; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 -enable-global-merge=false \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32,AIXDATA
; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 -enable-global-merge=false \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64,AIXDATA
; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE,LINUXDATA
; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux -mcpu=pwr8 \
; RUN: -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64LE,LINUXDATA
;; This @GLOBALSTRING is a user of @.str which causes @.str to not get pooled.
@.str = private unnamed_addr constant [47 x i8] c"This is the global string that is at the top.\0A\00", align 1
@GLOBALSTRING = dso_local local_unnamed_addr global ptr @.str, align 8
@IntArray2 = dso_local global [7 x i32] [i32 5, i32 7, i32 9, i32 11, i32 17, i32 1235, i32 32], align 4
@.str.1 = private unnamed_addr constant [12 x i8] c"str1_STRING\00", align 1
@.str.2 = private unnamed_addr constant [12 x i8] c"str2_STRING\00", align 1
@.str.3 = private unnamed_addr constant [12 x i8] c"str3_STRING\00", align 1
@.str.4 = private unnamed_addr constant [12 x i8] c"str4_STRING\00", align 1
@.str.5 = private unnamed_addr constant [183 x i8] c"longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING\00", align 1
@__const.str6.TheString = private unnamed_addr constant [10 x i8] c"ABCABCABC\00", align 1
@.str.6 = private unnamed_addr constant [12 x i8] c"MixedString\00", align 1
@__const.mixed2.IntArray = private unnamed_addr constant [7 x i32] [i32 5, i32 7, i32 9, i32 11, i32 17, i32 1235, i32 32], align 4
@__const.IntArray3 = private unnamed_addr constant [14 x i64] [i64 15, i64 7, i64 19, i64 11, i64 17, i64 1235, i64 72, i64 51, i64 32, i64 231, i64 86, i64 64, i64 754, i64 281], align 8
@__const.IntArray4 = private unnamed_addr constant [14 x i64] [i64 15, i64 7, i64 19, i64 11, i64 17, i64 1235, i64 72, i64 51, i64 32, i64 231, i64 86, i64 64, i64 754, i64 281], align 8
@__const.IntArray5 = private unnamed_addr constant [17 x i64] [i64 15, i64 7, i64 19, i64 11, i64 17, i64 1235, i64 72, i64 51, i64 32, i64 231, i64 86, i64 64, i64 754, i64 281, i64 61, i64 63, i64 67], align 8
@.str.7 = private unnamed_addr constant [20 x i8] c"Different String 01\00", align 1
@.str.8 = private unnamed_addr constant [15 x i8] c"Static Global\0A\00", align 1
;; Special alignment of 128 on this string will force it to go first and have padding added.
;; TODO: At the momment these will not be pooled because the extra alignment may be lost.
@.str.9 = private unnamed_addr constant [17 x i8] c"str9_STRING.....\00", align 128
@.str.10 = private unnamed_addr constant [17 x i8] c"str10_STRING....\00", align 128
;; Undef constant.
@.str.11 = private unnamed_addr constant [10 x i8] undef, align 1
define dso_local signext i32 @str1() local_unnamed_addr #0 {
; AIX32-LABEL: str1:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: addi r3, r3, 422
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str1:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -112(r1)
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: std r0, 128(r1)
; AIX64-NEXT: addi r3, r3, 422
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 112
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str1:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -112(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: std r0, 128(r1)
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r3, 422
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 112
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str1:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -32(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: std r0, 48(r1)
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r3, 422
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 32
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.1)
ret i32 %call
}
declare signext i32 @callee(ptr noundef) local_unnamed_addr
define dso_local signext i32 @str2() local_unnamed_addr #0 {
; AIX32-LABEL: str2:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: addi r3, r3, 388
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str2:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -112(r1)
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: std r0, 128(r1)
; AIX64-NEXT: addi r3, r3, 388
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 112
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str2:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -112(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: std r0, 128(r1)
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r3, 388
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 112
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str2:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -32(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: std r0, 48(r1)
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r3, 388
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 32
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.2)
ret i32 %call
}
define dso_local signext i32 @str3() local_unnamed_addr #0 {
; AIX32-LABEL: str3:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: stw r30, 56(r1) # 4-byte Folded Spill
; AIX32-NEXT: lwz r30, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: addi r3, r30, 434
; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: mr r31, r3
; AIX32-NEXT: addi r3, r30, 388
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r3, r3, r31
; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload
; AIX32-NEXT: lwz r30, 56(r1) # 4-byte Folded Reload
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str3:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -128(r1)
; AIX64-NEXT: std r0, 144(r1)
; AIX64-NEXT: std r30, 112(r1) # 8-byte Folded Spill
; AIX64-NEXT: ld r30, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: addi r3, r30, 434
; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: mr r31, r3
; AIX64-NEXT: addi r3, r30, 388
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r3, r3, r31
; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload
; AIX64-NEXT: ld r30, 112(r1) # 8-byte Folded Reload
; AIX64-NEXT: extsw r3, r3
; AIX64-NEXT: addi r1, r1, 128
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str3:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -144(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: std r0, 160(r1)
; LINUX64BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: addi r3, r29, 434
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: mr r30, r3
; LINUX64BE-NEXT: addi r3, r29, 388
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r3, r3, r30
; LINUX64BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: ld r29, 120(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: extsw r3, r3
; LINUX64BE-NEXT: addi r1, r1, 144
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str3:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: std r29, -24(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: stdu r1, -64(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: std r0, 80(r1)
; LINUX64LE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r29, 434
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: mr r30, r3
; LINUX64LE-NEXT: addi r3, r29, 388
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r3, r3, r30
; LINUX64LE-NEXT: extsw r3, r3
; LINUX64LE-NEXT: addi r1, r1, 64
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.3)
%call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.2)
%add = add nsw i32 %call1, %call
ret i32 %add
}
define dso_local signext i32 @str4() local_unnamed_addr #0 {
; AIX32-LABEL: str4:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: addi r3, r3, 446
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str4:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -112(r1)
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: std r0, 128(r1)
; AIX64-NEXT: addi r3, r3, 446
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 112
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str4:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -112(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: std r0, 128(r1)
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r3, 446
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 112
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str4:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -32(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: std r0, 48(r1)
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r3, 446
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 32
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.4)
ret i32 %call
}
define dso_local signext i32 @str5() local_unnamed_addr #0 {
; AIX32-LABEL: str5:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: addi r3, r3, 493
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str5:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -112(r1)
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: std r0, 128(r1)
; AIX64-NEXT: addi r3, r3, 493
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 112
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str5:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -112(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: std r0, 128(r1)
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r3, 493
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 112
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str5:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -32(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: std r0, 48(r1)
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r3, 493
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 32
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.5)
ret i32 %call
}
define dso_local signext i32 @array1() local_unnamed_addr #0 {
; AIX32-LABEL: array1:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -96(r1)
; AIX32-NEXT: lwz r5, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: li r6, 372
; AIX32-NEXT: li r4, 12
; AIX32-NEXT: addi r3, r1, 64
; AIX32-NEXT: stw r0, 104(r1)
; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27
; AIX32-NEXT: lxvw4x vs0, r5, r6
; AIX32-NEXT: stxvw4x vs0, 0, r4
; AIX32-NEXT: li r4, 360
; AIX32-NEXT: lxvw4x vs0, r5, r4
; AIX32-NEXT: stxvw4x vs0, 0, r3
; AIX32-NEXT: bl .calleeInt[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 96
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: array1:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -144(r1)
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: li r4, 372
; AIX64-NEXT: std r0, 160(r1)
; AIX64-NEXT: lxvw4x vs0, r3, r4
; AIX64-NEXT: addi r4, r1, 124
; AIX64-NEXT: stxvw4x vs0, 0, r4
; AIX64-NEXT: li r4, 360
; AIX64-NEXT: lxvw4x vs0, r3, r4
; AIX64-NEXT: addi r3, r1, 112
; AIX64-NEXT: stxvw4x vs0, 0, r3
; AIX64-NEXT: bl .calleeInt[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 144
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: array1:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -144(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: li r4, 372
; LINUX64BE-NEXT: std r0, 160(r1)
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: lxvw4x vs0, r3, r4
; LINUX64BE-NEXT: addi r4, r1, 124
; LINUX64BE-NEXT: stxvw4x vs0, 0, r4
; LINUX64BE-NEXT: li r4, 360
; LINUX64BE-NEXT: lxvw4x vs0, r3, r4
; LINUX64BE-NEXT: addi r3, r1, 112
; LINUX64BE-NEXT: stxvw4x vs0, 0, r3
; LINUX64BE-NEXT: bl calleeInt
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 144
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: array1:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -64(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: li r4, 372
; LINUX64LE-NEXT: std r0, 80(r1)
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: lxvd2x vs0, r3, r4
; LINUX64LE-NEXT: addi r4, r1, 44
; LINUX64LE-NEXT: stxvd2x vs0, 0, r4
; LINUX64LE-NEXT: li r4, 360
; LINUX64LE-NEXT: lxvd2x vs0, r3, r4
; LINUX64LE-NEXT: addi r3, r1, 32
; LINUX64LE-NEXT: stxvd2x vs0, 0, r3
; LINUX64LE-NEXT: bl calleeInt
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 64
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%IntArray = alloca [7 x i32], align 4
call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %IntArray)
call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %IntArray, ptr noundef nonnull align 4 dereferenceable(28) @__const.mixed2.IntArray, i64 28, i1 false)
%call = call signext i32 @calleeInt(ptr noundef nonnull %IntArray)
call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %IntArray)
ret i32 %call
}
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg)
declare signext i32 @calleeInt(ptr noundef) local_unnamed_addr
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)
define dso_local double @DValue1() local_unnamed_addr #0 {
; LINUX-LABEL: DValue1:
; LINUX: # %bb.0: # %entry
; LINUX-NEXT: addis 3, 2, .LCPI6_0@toc@ha
; LINUX-NEXT: lfd 1, .LCPI6_0@toc@l(3)
; LINUX-NEXT: blr
; AIX32-LABEL: DValue1:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: lwz r3, L..C1(r2) # %const.0
; AIX32-NEXT: lfd f1, 0(r3)
; AIX32-NEXT: blr
;
; AIX64-LABEL: DValue1:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: ld r3, L..C1(r2) # %const.0
; AIX64-NEXT: lfd f1, 0(r3)
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: DValue1:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: addis r3, r2, .LCPI6_0@toc@ha
; LINUX64BE-NEXT: lfd f1, .LCPI6_0@toc@l(r3)
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: DValue1:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: addis r3, r2, .LCPI6_0@toc@ha
; LINUX64LE-NEXT: lfd f1, .LCPI6_0@toc@l(r3)
; LINUX64LE-NEXT: blr
entry:
ret double 3.141590e+00
}
define dso_local signext i32 @str6() local_unnamed_addr #0 {
; AIX32-LABEL: str6:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -80(r1)
; AIX32-NEXT: li r3, 17152
; AIX32-NEXT: stw r0, 88(r1)
; AIX32-NEXT: stw r31, 76(r1) # 4-byte Folded Spill
; AIX32-NEXT: sth r3, 72(r1)
; AIX32-NEXT: lis r3, 16963
; AIX32-NEXT: ori r3, r3, 16706
; AIX32-NEXT: stw r3, 68(r1)
; AIX32-NEXT: lis r3, 16706
; AIX32-NEXT: ori r3, r3, 17217
; AIX32-NEXT: stw r3, 64(r1)
; AIX32-NEXT: addi r3, r1, 64
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: mr r31, r3
; AIX32-NEXT: addi r3, r1, 69
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r3, r3, r31
; AIX32-NEXT: lwz r31, 76(r1) # 4-byte Folded Reload
; AIX32-NEXT: addi r1, r1, 80
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str6:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -144(r1)
; AIX64-NEXT: li r3, 17152
; AIX64-NEXT: std r0, 160(r1)
; AIX64-NEXT: std r31, 136(r1) # 8-byte Folded Spill
; AIX64-NEXT: sth r3, 128(r1)
; AIX64-NEXT: lis r3, 16706
; AIX64-NEXT: ori r3, r3, 17217
; AIX64-NEXT: rldic r3, r3, 32, 1
; AIX64-NEXT: oris r3, r3, 16963
; AIX64-NEXT: ori r3, r3, 16706
; AIX64-NEXT: std r3, 120(r1)
; AIX64-NEXT: addi r3, r1, 120
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: mr r31, r3
; AIX64-NEXT: addi r3, r1, 125
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r3, r3, r31
; AIX64-NEXT: ld r31, 136(r1) # 8-byte Folded Reload
; AIX64-NEXT: extsw r3, r3
; AIX64-NEXT: addi r1, r1, 144
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str6:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -144(r1)
; LINUX64BE-NEXT: li r3, 17152
; LINUX64BE-NEXT: std r0, 160(r1)
; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: sth r3, 120(r1)
; LINUX64BE-NEXT: lis r3, 16706
; LINUX64BE-NEXT: ori r3, r3, 17217
; LINUX64BE-NEXT: rldic r3, r3, 32, 1
; LINUX64BE-NEXT: oris r3, r3, 16963
; LINUX64BE-NEXT: ori r3, r3, 16706
; LINUX64BE-NEXT: std r3, 112(r1)
; LINUX64BE-NEXT: addi r3, r1, 112
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: mr r30, r3
; LINUX64BE-NEXT: addi r3, r1, 117
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r3, r3, r30
; LINUX64BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: extsw r3, r3
; LINUX64BE-NEXT: addi r1, r1, 144
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str6:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: stdu r1, -64(r1)
; LINUX64LE-NEXT: li r3, 67
; LINUX64LE-NEXT: std r0, 80(r1)
; LINUX64LE-NEXT: sth r3, 40(r1)
; LINUX64LE-NEXT: lis r3, 8480
; LINUX64LE-NEXT: ori r3, r3, 41377
; LINUX64LE-NEXT: rldic r3, r3, 33, 1
; LINUX64LE-NEXT: oris r3, r3, 16707
; LINUX64LE-NEXT: ori r3, r3, 16961
; LINUX64LE-NEXT: std r3, 32(r1)
; LINUX64LE-NEXT: addi r3, r1, 32
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: mr r30, r3
; LINUX64LE-NEXT: addi r3, r1, 37
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r3, r3, r30
; LINUX64LE-NEXT: extsw r3, r3
; LINUX64LE-NEXT: addi r1, r1, 64
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%TheString = alloca [10 x i8], align 1
call void @llvm.lifetime.start.p0(i64 10, ptr nonnull %TheString)
call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 1 dereferenceable(10) %TheString, ptr noundef nonnull align 1 dereferenceable(10) @__const.str6.TheString, i64 10, i1 false)
%call = call signext i32 @callee(ptr noundef nonnull %TheString)
%add.ptr = getelementptr inbounds i8, ptr %TheString, i64 5
%call2 = call signext i32 @callee(ptr noundef nonnull %add.ptr)
%add = add nsw i32 %call2, %call
call void @llvm.lifetime.end.p0(i64 10, ptr nonnull %TheString)
ret i32 %add
}
define dso_local signext i32 @str7() local_unnamed_addr #0 {
; AIX32-LABEL: str7:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C2(r2) # @GLOBALSTRING
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill
; AIX32-NEXT: lwz r3, 0(r3)
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: mr r31, r3
; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: addi r3, r3, 458
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r3, r3, r31
; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str7:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -128(r1)
; AIX64-NEXT: ld r3, L..C2(r2) # @GLOBALSTRING
; AIX64-NEXT: std r0, 144(r1)
; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill
; AIX64-NEXT: ld r3, 0(r3)
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: mr r31, r3
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: addi r3, r3, 458
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r3, r3, r31
; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload
; AIX64-NEXT: extsw r3, r3
; AIX64-NEXT: addi r1, r1, 128
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str7:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -128(r1)
; LINUX64BE-NEXT: std r0, 144(r1)
; LINUX64BE-NEXT: addis r3, r2, GLOBALSTRING@toc@ha
; LINUX64BE-NEXT: ld r3, GLOBALSTRING@toc@l(r3)
; LINUX64BE-NEXT: std r30, 112(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: mr r30, r3
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r3, 458
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r3, r3, r30
; LINUX64BE-NEXT: ld r30, 112(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: extsw r3, r3
; LINUX64BE-NEXT: addi r1, r1, 128
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str7:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: stdu r1, -48(r1)
; LINUX64LE-NEXT: std r0, 64(r1)
; LINUX64LE-NEXT: addis r3, r2, GLOBALSTRING@toc@ha
; LINUX64LE-NEXT: ld r3, GLOBALSTRING@toc@l(r3)
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: mr r30, r3
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r3, 458
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r3, r3, r30
; LINUX64LE-NEXT: extsw r3, r3
; LINUX64LE-NEXT: addi r1, r1, 48
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%0 = load ptr, ptr @GLOBALSTRING, align 8
%call = tail call signext i32 @callee(ptr noundef %0)
%call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.8)
%add = add nsw i32 %call1, %call
ret i32 %add
}
define dso_local signext i32 @mixed1() local_unnamed_addr #0 {
; AIX32-LABEL: mixed1:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C3(r2) # @IntArray2
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill
; AIX32-NEXT: bl .calleeInt[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: mr r31, r3
; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: addi r3, r3, 400
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r3, r3, r31
; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: mixed1:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -128(r1)
; AIX64-NEXT: ld r3, L..C3(r2) # @IntArray2
; AIX64-NEXT: std r0, 144(r1)
; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill
; AIX64-NEXT: bl .calleeInt[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: mr r31, r3
; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: addi r3, r3, 400
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r3, r3, r31
; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload
; AIX64-NEXT: extsw r3, r3
; AIX64-NEXT: addi r1, r1, 128
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: mixed1:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -128(r1)
; LINUX64BE-NEXT: addis r3, r2, IntArray2@toc@ha
; LINUX64BE-NEXT: std r0, 144(r1)
; LINUX64BE-NEXT: std r30, 112(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: addi r3, r3, IntArray2@toc@l
; LINUX64BE-NEXT: bl calleeInt
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: mr r30, r3
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r3, 400
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r3, r3, r30
; LINUX64BE-NEXT: ld r30, 112(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: extsw r3, r3
; LINUX64BE-NEXT: addi r1, r1, 128
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: mixed1:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: stdu r1, -48(r1)
; LINUX64LE-NEXT: addis r3, r2, IntArray2@toc@ha
; LINUX64LE-NEXT: std r0, 64(r1)
; LINUX64LE-NEXT: addi r3, r3, IntArray2@toc@l
; LINUX64LE-NEXT: bl calleeInt
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: mr r30, r3
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r3, 400
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r3, r3, r30
; LINUX64LE-NEXT: extsw r3, r3
; LINUX64LE-NEXT: addi r1, r1, 48
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @calleeInt(ptr noundef nonnull @IntArray2)
%call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.6)
%add = add nsw i32 %call1, %call
ret i32 %add
}
define dso_local signext i32 @mixed2() local_unnamed_addr #0 {
; AIX32-LABEL: mixed2:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -112(r1)
; AIX32-NEXT: stw r0, 120(r1)
; AIX32-NEXT: stw r30, 104(r1) # 4-byte Folded Spill
; AIX32-NEXT: lwz r30, L..C0(r2) # @__ModuleStringPool
; AIX32-NEXT: li r5, 372
; AIX32-NEXT: li r4, 12
; AIX32-NEXT: addi r3, r1, 64
; AIX32-NEXT: stw r31, 108(r1) # 4-byte Folded Spill
; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27
; AIX32-NEXT: lxvw4x vs0, r30, r5
; AIX32-NEXT: stxvw4x vs0, 0, r4
; AIX32-NEXT: li r4, 360
; AIX32-NEXT: lxvw4x vs0, r30, r4
; AIX32-NEXT: stxvw4x vs0, 0, r3
; AIX32-NEXT: bl .calleeInt[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: mr r31, r3
; AIX32-NEXT: lwz r3, L..C3(r2) # @IntArray2
; AIX32-NEXT: bl .calleeInt[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r31, r3, r31
; AIX32-NEXT: addi r3, r30, 400
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r31, r31, r3
; AIX32-NEXT: addi r3, r30, 473
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: add r3, r31, r3
; AIX32-NEXT: lwz r31, 108(r1) # 4-byte Folded Reload
; AIX32-NEXT: lwz r30, 104(r1) # 4-byte Folded Reload
; AIX32-NEXT: addi r1, r1, 112
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: mixed2:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -160(r1)
; AIX64-NEXT: std r0, 176(r1)
; AIX64-NEXT: std r30, 144(r1) # 8-byte Folded Spill
; AIX64-NEXT: ld r30, L..C0(r2) # @__ModuleStringPool
; AIX64-NEXT: li r3, 372
; AIX64-NEXT: std r31, 152(r1) # 8-byte Folded Spill
; AIX64-NEXT: lxvw4x vs0, r30, r3
; AIX64-NEXT: addi r3, r1, 124
; AIX64-NEXT: stxvw4x vs0, 0, r3
; AIX64-NEXT: li r3, 360
; AIX64-NEXT: lxvw4x vs0, r30, r3
; AIX64-NEXT: addi r3, r1, 112
; AIX64-NEXT: stxvw4x vs0, 0, r3
; AIX64-NEXT: bl .calleeInt[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: mr r31, r3
; AIX64-NEXT: ld r3, L..C3(r2) # @IntArray2
; AIX64-NEXT: bl .calleeInt[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r31, r3, r31
; AIX64-NEXT: addi r3, r30, 400
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r31, r31, r3
; AIX64-NEXT: addi r3, r30, 473
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: add r3, r31, r3
; AIX64-NEXT: ld r31, 152(r1) # 8-byte Folded Reload
; AIX64-NEXT: ld r30, 144(r1) # 8-byte Folded Reload
; AIX64-NEXT: extsw r3, r3
; AIX64-NEXT: addi r1, r1, 160
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: mixed2:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -176(r1)
; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64BE-NEXT: std r0, 192(r1)
; LINUX64BE-NEXT: std r29, 152(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: li r4, 372
; LINUX64BE-NEXT: std r30, 160(r1) # 8-byte Folded Spill
; LINUX64BE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l
; LINUX64BE-NEXT: addi r3, r1, 124
; LINUX64BE-NEXT: lxvw4x vs0, r29, r4
; LINUX64BE-NEXT: stxvw4x vs0, 0, r3
; LINUX64BE-NEXT: li r3, 360
; LINUX64BE-NEXT: lxvw4x vs0, r29, r3
; LINUX64BE-NEXT: addi r3, r1, 112
; LINUX64BE-NEXT: stxvw4x vs0, 0, r3
; LINUX64BE-NEXT: bl calleeInt
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: mr r30, r3
; LINUX64BE-NEXT: addis r3, r2, IntArray2@toc@ha
; LINUX64BE-NEXT: addi r3, r3, IntArray2@toc@l
; LINUX64BE-NEXT: bl calleeInt
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r30, r3, r30
; LINUX64BE-NEXT: addi r3, r29, 400
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r30, r30, r3
; LINUX64BE-NEXT: addi r3, r29, 473
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: add r3, r30, r3
; LINUX64BE-NEXT: ld r30, 160(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: ld r29, 152(r1) # 8-byte Folded Reload
; LINUX64BE-NEXT: extsw r3, r3
; LINUX64BE-NEXT: addi r1, r1, 176
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: mixed2:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: std r29, -24(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill
; LINUX64LE-NEXT: stdu r1, -96(r1)
; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha
; LINUX64LE-NEXT: li r4, 372
; LINUX64LE-NEXT: std r0, 112(r1)
; LINUX64LE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l
; LINUX64LE-NEXT: addi r3, r1, 44
; LINUX64LE-NEXT: lxvd2x vs0, r29, r4
; LINUX64LE-NEXT: stxvd2x vs0, 0, r3
; LINUX64LE-NEXT: li r3, 360
; LINUX64LE-NEXT: lxvd2x vs0, r29, r3
; LINUX64LE-NEXT: addi r3, r1, 32
; LINUX64LE-NEXT: stxvd2x vs0, 0, r3
; LINUX64LE-NEXT: bl calleeInt
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: mr r30, r3
; LINUX64LE-NEXT: addis r3, r2, IntArray2@toc@ha
; LINUX64LE-NEXT: addi r3, r3, IntArray2@toc@l
; LINUX64LE-NEXT: bl calleeInt
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r30, r3, r30
; LINUX64LE-NEXT: addi r3, r29, 400
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r30, r30, r3
; LINUX64LE-NEXT: addi r3, r29, 473
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: add r3, r30, r3
; LINUX64LE-NEXT: extsw r3, r3
; LINUX64LE-NEXT: addi r1, r1, 96
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: ld r29, -24(r1) # 8-byte Folded Reload
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%IntArray = alloca [7 x i32], align 4
call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %IntArray)
call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 4 dereferenceable(28) %IntArray, ptr noundef nonnull align 4 dereferenceable(28) @__const.mixed2.IntArray, i64 28, i1 false)
%call = call signext i32 @calleeInt(ptr noundef nonnull %IntArray)
%call1 = call signext i32 @calleeInt(ptr noundef nonnull @IntArray2)
%add = add nsw i32 %call1, %call
%call2 = call signext i32 @callee(ptr noundef nonnull @.str.6)
%add3 = add nsw i32 %add, %call2
%call4 = call signext i32 @callee(ptr noundef nonnull @.str.7)
%add5 = add nsw i32 %add3, %call4
call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %IntArray)
ret i32 %add5
}
define dso_local signext i32 @str9() local_unnamed_addr #0 {
; AIX32-LABEL: str9:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C4(r2) # @.str.9
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str9:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -112(r1)
; AIX64-NEXT: ld r3, L..C4(r2) # @.str.9
; AIX64-NEXT: std r0, 128(r1)
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 112
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str9:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -112(r1)
; LINUX64BE-NEXT: addis r3, r2, .L.str.9@toc@ha
; LINUX64BE-NEXT: std r0, 128(r1)
; LINUX64BE-NEXT: addi r3, r3, .L.str.9@toc@l
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 112
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str9:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -32(r1)
; LINUX64LE-NEXT: addis r3, r2, .L.str.9@toc@ha
; LINUX64LE-NEXT: std r0, 48(r1)
; LINUX64LE-NEXT: addi r3, r3, .L.str.9@toc@l
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 32
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.9)
ret i32 %call
}
define dso_local signext i32 @str10() local_unnamed_addr #0 {
; AIX32-LABEL: str10:
; AIX32: # %bb.0: # %entry
; AIX32-NEXT: mflr r0
; AIX32-NEXT: stwu r1, -64(r1)
; AIX32-NEXT: lwz r3, L..C5(r2) # @.str.10
; AIX32-NEXT: stw r0, 72(r1)
; AIX32-NEXT: bl .callee[PR]
; AIX32-NEXT: nop
; AIX32-NEXT: addi r1, r1, 64
; AIX32-NEXT: lwz r0, 8(r1)
; AIX32-NEXT: mtlr r0
; AIX32-NEXT: blr
;
; AIX64-LABEL: str10:
; AIX64: # %bb.0: # %entry
; AIX64-NEXT: mflr r0
; AIX64-NEXT: stdu r1, -112(r1)
; AIX64-NEXT: ld r3, L..C5(r2) # @.str.10
; AIX64-NEXT: std r0, 128(r1)
; AIX64-NEXT: bl .callee[PR]
; AIX64-NEXT: nop
; AIX64-NEXT: addi r1, r1, 112
; AIX64-NEXT: ld r0, 16(r1)
; AIX64-NEXT: mtlr r0
; AIX64-NEXT: blr
;
; LINUX64BE-LABEL: str10:
; LINUX64BE: # %bb.0: # %entry
; LINUX64BE-NEXT: mflr r0
; LINUX64BE-NEXT: stdu r1, -112(r1)
; LINUX64BE-NEXT: addis r3, r2, .L.str.10@toc@ha
; LINUX64BE-NEXT: std r0, 128(r1)
; LINUX64BE-NEXT: addi r3, r3, .L.str.10@toc@l
; LINUX64BE-NEXT: bl callee
; LINUX64BE-NEXT: nop
; LINUX64BE-NEXT: addi r1, r1, 112
; LINUX64BE-NEXT: ld r0, 16(r1)
; LINUX64BE-NEXT: mtlr r0
; LINUX64BE-NEXT: blr
;
; LINUX64LE-LABEL: str10:
; LINUX64LE: # %bb.0: # %entry
; LINUX64LE-NEXT: mflr r0
; LINUX64LE-NEXT: stdu r1, -32(r1)
; LINUX64LE-NEXT: addis r3, r2, .L.str.10@toc@ha
; LINUX64LE-NEXT: std r0, 48(r1)
; LINUX64LE-NEXT: addi r3, r3, .L.str.10@toc@l
; LINUX64LE-NEXT: bl callee
; LINUX64LE-NEXT: nop
; LINUX64LE-NEXT: addi r1, r1, 32
; LINUX64LE-NEXT: ld r0, 16(r1)
; LINUX64LE-NEXT: mtlr r0
; LINUX64LE-NEXT: blr
entry:
%call = tail call signext i32 @callee(ptr noundef nonnull @.str.10)
ret i32 %call
}
attributes #0 = { nounwind }
; AIXDATA: .csect L..__ModuleStringPool[RO],3
; AIXDATA: .align 3 # @__ModuleStringPool
; AIXDATA: .vbyte 4, 5 # 0x5
; AIXDATA: .vbyte 4, 7 # 0x7
; AIXDATA: .vbyte 4, 9 # 0x9
; AIXDATA: .vbyte 4, 11 # 0xb
; AIXDATA: .vbyte 4, 17 # 0x11
; AIXDATA: .vbyte 4, 1235 # 0x4d3
; AIXDATA: .vbyte 4, 32 # 0x20
; AIXDATA: .string "str2_STRING"
; AIXDATA: .string "MixedString"
; AIXDATA: .string "ABCABCABC"
; AIXDATA: .string "str1_STRING"
; AIXDATA: .string "str3_STRING"
; AIXDATA: .string "str4_STRING"
; AIXDATA: .byte 'S,'t,'a,'t,'i,'c,' ,'G,'l,'o,'b,'a,'l,0012,0000
; AIXDATA: .string "Different String 01"
; AIXDATA: .string "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING"
; LINUXDATA: .L__ModuleStringPool:
; LINUXDATA: .long 5 # 0x5
; LINUXDATA: .long 7 # 0x7
; LINUXDATA: .long 9 # 0x9
; LINUXDATA: .long 11 # 0xb
; LINUXDATA: .long 17 # 0x11
; LINUXDATA: .long 1235 # 0x4d3
; LINUXDATA: .long 32 # 0x20
; LINUXDATA: .asciz "str2_STRING"
; LINUXDATA: .asciz "MixedString"
; LINUXDATA: .asciz "ABCABCABC"
; LINUXDATA: .asciz "str1_STRING"
; LINUXDATA: .asciz "str3_STRING"
; LINUXDATA: .asciz "str4_STRING"
; LINUXDATA: .asciz "Static Global\n"
; LINUXDATA: .asciz "Different String 01"
; LINUXDATA: .asciz "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING"