1; RUN: llc -verify-machineinstrs -mtriple powerpc-ibm-aix-xcoff -mcpu=pwr8 \ 2; RUN: -ppc-merge-string-pool=true -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX32,AIXDATA 3; RUN: llc -verify-machineinstrs -mtriple powerpc64-ibm-aix-xcoff -mcpu=pwr8 \ 4; RUN: -ppc-merge-string-pool=true -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=AIX64,AIXDATA 5; RUN: llc -verify-machineinstrs -mtriple powerpc64-unknown-linux -mcpu=pwr8 \ 6; RUN: -ppc-merge-string-pool=true -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64BE,LINUXDATA 7; RUN: llc -verify-machineinstrs -mtriple powerpc64le-unknown-linux -mcpu=pwr8 \ 8; RUN: -ppc-merge-string-pool=true -ppc-asm-full-reg-names < %s | FileCheck %s --check-prefixes=LINUX64LE,LINUXDATA 9 10 11;; This @GLOBALSTRING is a user of @.str which causes @.str to not get pooled. 12@.str = private unnamed_addr constant [47 x i8] c"This is the global string that is at the top.\0A\00", align 1 13@GLOBALSTRING = dso_local local_unnamed_addr global ptr @.str, align 8 14 15@IntArray2 = dso_local global [7 x i32] [i32 5, i32 7, i32 9, i32 11, i32 17, i32 1235, i32 32], align 4 16@.str.1 = private unnamed_addr constant [12 x i8] c"str1_STRING\00", align 1 17@.str.2 = private unnamed_addr constant [12 x i8] c"str2_STRING\00", align 1 18@.str.3 = private unnamed_addr constant [12 x i8] c"str3_STRING\00", align 1 19@.str.4 = private unnamed_addr constant [12 x i8] c"str4_STRING\00", align 1 20@.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 21@__const.str6.TheString = private unnamed_addr constant [10 x i8] c"ABCABCABC\00", align 1 22@.str.6 = private unnamed_addr constant [12 x i8] c"MixedString\00", align 1 23@__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 24@__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 25@__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 26@__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 27@.str.7 = private unnamed_addr constant [20 x i8] c"Different String 01\00", align 1 28@.str.8 = private unnamed_addr constant [15 x i8] c"Static Global\0A\00", align 1 29 30;; Special alignment of 128 on this string will force it to go first and have padding added. 31;; TODO: At the momment these will not be pooled because the extra alignment may be lost. 32@.str.9 = private unnamed_addr constant [17 x i8] c"str9_STRING.....\00", align 128 33@.str.10 = private unnamed_addr constant [17 x i8] c"str10_STRING....\00", align 128 34 35;; Undef constant. 36@.str.11 = private unnamed_addr constant [10 x i8] undef, align 1 37 38define dso_local signext i32 @str1() local_unnamed_addr #0 { 39; AIX32-LABEL: str1: 40; AIX32: # %bb.0: # %entry 41; AIX32-NEXT: mflr r0 42; AIX32-NEXT: stwu r1, -64(r1) 43; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool 44; AIX32-NEXT: stw r0, 72(r1) 45; AIX32-NEXT: addi r3, r3, 422 46; AIX32-NEXT: bl .callee[PR] 47; AIX32-NEXT: nop 48; AIX32-NEXT: addi r1, r1, 64 49; AIX32-NEXT: lwz r0, 8(r1) 50; AIX32-NEXT: mtlr r0 51; AIX32-NEXT: blr 52; 53; AIX64-LABEL: str1: 54; AIX64: # %bb.0: # %entry 55; AIX64-NEXT: mflr r0 56; AIX64-NEXT: stdu r1, -112(r1) 57; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 58; AIX64-NEXT: std r0, 128(r1) 59; AIX64-NEXT: addi r3, r3, 422 60; AIX64-NEXT: bl .callee[PR] 61; AIX64-NEXT: nop 62; AIX64-NEXT: addi r1, r1, 112 63; AIX64-NEXT: ld r0, 16(r1) 64; AIX64-NEXT: mtlr r0 65; AIX64-NEXT: blr 66; 67; LINUX64BE-LABEL: str1: 68; LINUX64BE: # %bb.0: # %entry 69; LINUX64BE-NEXT: mflr r0 70; LINUX64BE-NEXT: stdu r1, -112(r1) 71; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 72; LINUX64BE-NEXT: std r0, 128(r1) 73; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 74; LINUX64BE-NEXT: addi r3, r3, 422 75; LINUX64BE-NEXT: bl callee 76; LINUX64BE-NEXT: nop 77; LINUX64BE-NEXT: addi r1, r1, 112 78; LINUX64BE-NEXT: ld r0, 16(r1) 79; LINUX64BE-NEXT: mtlr r0 80; LINUX64BE-NEXT: blr 81; 82; LINUX64LE-LABEL: str1: 83; LINUX64LE: # %bb.0: # %entry 84; LINUX64LE-NEXT: mflr r0 85; LINUX64LE-NEXT: stdu r1, -32(r1) 86; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 87; LINUX64LE-NEXT: std r0, 48(r1) 88; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 89; LINUX64LE-NEXT: addi r3, r3, 422 90; LINUX64LE-NEXT: bl callee 91; LINUX64LE-NEXT: nop 92; LINUX64LE-NEXT: addi r1, r1, 32 93; LINUX64LE-NEXT: ld r0, 16(r1) 94; LINUX64LE-NEXT: mtlr r0 95; LINUX64LE-NEXT: blr 96entry: 97 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.1) 98 ret i32 %call 99} 100 101declare signext i32 @callee(ptr noundef) local_unnamed_addr 102 103define dso_local signext i32 @str2() local_unnamed_addr #0 { 104; AIX32-LABEL: str2: 105; AIX32: # %bb.0: # %entry 106; AIX32-NEXT: mflr r0 107; AIX32-NEXT: stwu r1, -64(r1) 108; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool 109; AIX32-NEXT: stw r0, 72(r1) 110; AIX32-NEXT: addi r3, r3, 388 111; AIX32-NEXT: bl .callee[PR] 112; AIX32-NEXT: nop 113; AIX32-NEXT: addi r1, r1, 64 114; AIX32-NEXT: lwz r0, 8(r1) 115; AIX32-NEXT: mtlr r0 116; AIX32-NEXT: blr 117; 118; AIX64-LABEL: str2: 119; AIX64: # %bb.0: # %entry 120; AIX64-NEXT: mflr r0 121; AIX64-NEXT: stdu r1, -112(r1) 122; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 123; AIX64-NEXT: std r0, 128(r1) 124; AIX64-NEXT: addi r3, r3, 388 125; AIX64-NEXT: bl .callee[PR] 126; AIX64-NEXT: nop 127; AIX64-NEXT: addi r1, r1, 112 128; AIX64-NEXT: ld r0, 16(r1) 129; AIX64-NEXT: mtlr r0 130; AIX64-NEXT: blr 131; 132; LINUX64BE-LABEL: str2: 133; LINUX64BE: # %bb.0: # %entry 134; LINUX64BE-NEXT: mflr r0 135; LINUX64BE-NEXT: stdu r1, -112(r1) 136; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 137; LINUX64BE-NEXT: std r0, 128(r1) 138; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 139; LINUX64BE-NEXT: addi r3, r3, 388 140; LINUX64BE-NEXT: bl callee 141; LINUX64BE-NEXT: nop 142; LINUX64BE-NEXT: addi r1, r1, 112 143; LINUX64BE-NEXT: ld r0, 16(r1) 144; LINUX64BE-NEXT: mtlr r0 145; LINUX64BE-NEXT: blr 146; 147; LINUX64LE-LABEL: str2: 148; LINUX64LE: # %bb.0: # %entry 149; LINUX64LE-NEXT: mflr r0 150; LINUX64LE-NEXT: stdu r1, -32(r1) 151; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 152; LINUX64LE-NEXT: std r0, 48(r1) 153; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 154; LINUX64LE-NEXT: addi r3, r3, 388 155; LINUX64LE-NEXT: bl callee 156; LINUX64LE-NEXT: nop 157; LINUX64LE-NEXT: addi r1, r1, 32 158; LINUX64LE-NEXT: ld r0, 16(r1) 159; LINUX64LE-NEXT: mtlr r0 160; LINUX64LE-NEXT: blr 161entry: 162 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.2) 163 ret i32 %call 164} 165 166define dso_local signext i32 @str3() local_unnamed_addr #0 { 167; AIX32-LABEL: str3: 168; AIX32: # %bb.0: # %entry 169; AIX32-NEXT: mflr r0 170; AIX32-NEXT: stwu r1, -64(r1) 171; AIX32-NEXT: stw r0, 72(r1) 172; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill 173; AIX32-NEXT: lwz r31, L..C0(r2) # @__ModuleStringPool 174; AIX32-NEXT: addi r3, r31, 434 175; AIX32-NEXT: bl .callee[PR] 176; AIX32-NEXT: nop 177; AIX32-NEXT: addi r4, r31, 388 178; AIX32-NEXT: mr r31, r3 179; AIX32-NEXT: mr r3, r4 180; AIX32-NEXT: bl .callee[PR] 181; AIX32-NEXT: nop 182; AIX32-NEXT: add r3, r3, r31 183; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload 184; AIX32-NEXT: addi r1, r1, 64 185; AIX32-NEXT: lwz r0, 8(r1) 186; AIX32-NEXT: mtlr r0 187; AIX32-NEXT: blr 188; 189; AIX64-LABEL: str3: 190; AIX64: # %bb.0: # %entry 191; AIX64-NEXT: mflr r0 192; AIX64-NEXT: stdu r1, -128(r1) 193; AIX64-NEXT: std r0, 144(r1) 194; AIX64-NEXT: std r30, 112(r1) # 8-byte Folded Spill 195; AIX64-NEXT: ld r30, L..C0(r2) # @__ModuleStringPool 196; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill 197; AIX64-NEXT: addi r3, r30, 434 198; AIX64-NEXT: bl .callee[PR] 199; AIX64-NEXT: nop 200; AIX64-NEXT: mr r31, r3 201; AIX64-NEXT: addi r3, r30, 388 202; AIX64-NEXT: bl .callee[PR] 203; AIX64-NEXT: nop 204; AIX64-NEXT: add r3, r3, r31 205; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload 206; AIX64-NEXT: ld r30, 112(r1) # 8-byte Folded Reload 207; AIX64-NEXT: extsw r3, r3 208; AIX64-NEXT: addi r1, r1, 128 209; AIX64-NEXT: ld r0, 16(r1) 210; AIX64-NEXT: mtlr r0 211; AIX64-NEXT: blr 212; 213; LINUX64BE-LABEL: str3: 214; LINUX64BE: # %bb.0: # %entry 215; LINUX64BE-NEXT: mflr r0 216; LINUX64BE-NEXT: stdu r1, -144(r1) 217; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 218; LINUX64BE-NEXT: std r0, 160(r1) 219; LINUX64BE-NEXT: std r29, 120(r1) # 8-byte Folded Spill 220; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill 221; LINUX64BE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l 222; LINUX64BE-NEXT: addi r3, r29, 434 223; LINUX64BE-NEXT: bl callee 224; LINUX64BE-NEXT: nop 225; LINUX64BE-NEXT: mr r30, r3 226; LINUX64BE-NEXT: addi r3, r29, 388 227; LINUX64BE-NEXT: bl callee 228; LINUX64BE-NEXT: nop 229; LINUX64BE-NEXT: add r3, r3, r30 230; LINUX64BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload 231; LINUX64BE-NEXT: ld r29, 120(r1) # 8-byte Folded Reload 232; LINUX64BE-NEXT: extsw r3, r3 233; LINUX64BE-NEXT: addi r1, r1, 144 234; LINUX64BE-NEXT: ld r0, 16(r1) 235; LINUX64BE-NEXT: mtlr r0 236; LINUX64BE-NEXT: blr 237; 238; LINUX64LE-LABEL: str3: 239; LINUX64LE: # %bb.0: # %entry 240; LINUX64LE-NEXT: mflr r0 241; LINUX64LE-NEXT: std r29, -24(r1) # 8-byte Folded Spill 242; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill 243; LINUX64LE-NEXT: stdu r1, -64(r1) 244; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 245; LINUX64LE-NEXT: std r0, 80(r1) 246; LINUX64LE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l 247; LINUX64LE-NEXT: addi r3, r29, 434 248; LINUX64LE-NEXT: bl callee 249; LINUX64LE-NEXT: nop 250; LINUX64LE-NEXT: mr r30, r3 251; LINUX64LE-NEXT: addi r3, r29, 388 252; LINUX64LE-NEXT: bl callee 253; LINUX64LE-NEXT: nop 254; LINUX64LE-NEXT: add r3, r3, r30 255; LINUX64LE-NEXT: extsw r3, r3 256; LINUX64LE-NEXT: addi r1, r1, 64 257; LINUX64LE-NEXT: ld r0, 16(r1) 258; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 259; LINUX64LE-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 260; LINUX64LE-NEXT: mtlr r0 261; LINUX64LE-NEXT: blr 262entry: 263 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.3) 264 %call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.2) 265 %add = add nsw i32 %call1, %call 266 ret i32 %add 267} 268 269define dso_local signext i32 @str4() local_unnamed_addr #0 { 270; AIX32-LABEL: str4: 271; AIX32: # %bb.0: # %entry 272; AIX32-NEXT: mflr r0 273; AIX32-NEXT: stwu r1, -64(r1) 274; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool 275; AIX32-NEXT: stw r0, 72(r1) 276; AIX32-NEXT: addi r3, r3, 446 277; AIX32-NEXT: bl .callee[PR] 278; AIX32-NEXT: nop 279; AIX32-NEXT: addi r1, r1, 64 280; AIX32-NEXT: lwz r0, 8(r1) 281; AIX32-NEXT: mtlr r0 282; AIX32-NEXT: blr 283; 284; AIX64-LABEL: str4: 285; AIX64: # %bb.0: # %entry 286; AIX64-NEXT: mflr r0 287; AIX64-NEXT: stdu r1, -112(r1) 288; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 289; AIX64-NEXT: std r0, 128(r1) 290; AIX64-NEXT: addi r3, r3, 446 291; AIX64-NEXT: bl .callee[PR] 292; AIX64-NEXT: nop 293; AIX64-NEXT: addi r1, r1, 112 294; AIX64-NEXT: ld r0, 16(r1) 295; AIX64-NEXT: mtlr r0 296; AIX64-NEXT: blr 297; 298; LINUX64BE-LABEL: str4: 299; LINUX64BE: # %bb.0: # %entry 300; LINUX64BE-NEXT: mflr r0 301; LINUX64BE-NEXT: stdu r1, -112(r1) 302; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 303; LINUX64BE-NEXT: std r0, 128(r1) 304; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 305; LINUX64BE-NEXT: addi r3, r3, 446 306; LINUX64BE-NEXT: bl callee 307; LINUX64BE-NEXT: nop 308; LINUX64BE-NEXT: addi r1, r1, 112 309; LINUX64BE-NEXT: ld r0, 16(r1) 310; LINUX64BE-NEXT: mtlr r0 311; LINUX64BE-NEXT: blr 312; 313; LINUX64LE-LABEL: str4: 314; LINUX64LE: # %bb.0: # %entry 315; LINUX64LE-NEXT: mflr r0 316; LINUX64LE-NEXT: stdu r1, -32(r1) 317; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 318; LINUX64LE-NEXT: std r0, 48(r1) 319; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 320; LINUX64LE-NEXT: addi r3, r3, 446 321; LINUX64LE-NEXT: bl callee 322; LINUX64LE-NEXT: nop 323; LINUX64LE-NEXT: addi r1, r1, 32 324; LINUX64LE-NEXT: ld r0, 16(r1) 325; LINUX64LE-NEXT: mtlr r0 326; LINUX64LE-NEXT: blr 327entry: 328 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.4) 329 ret i32 %call 330} 331 332define dso_local signext i32 @str5() local_unnamed_addr #0 { 333; AIX32-LABEL: str5: 334; AIX32: # %bb.0: # %entry 335; AIX32-NEXT: mflr r0 336; AIX32-NEXT: stwu r1, -64(r1) 337; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool 338; AIX32-NEXT: stw r0, 72(r1) 339; AIX32-NEXT: addi r3, r3, 493 340; AIX32-NEXT: bl .callee[PR] 341; AIX32-NEXT: nop 342; AIX32-NEXT: addi r1, r1, 64 343; AIX32-NEXT: lwz r0, 8(r1) 344; AIX32-NEXT: mtlr r0 345; AIX32-NEXT: blr 346; 347; AIX64-LABEL: str5: 348; AIX64: # %bb.0: # %entry 349; AIX64-NEXT: mflr r0 350; AIX64-NEXT: stdu r1, -112(r1) 351; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 352; AIX64-NEXT: std r0, 128(r1) 353; AIX64-NEXT: addi r3, r3, 493 354; AIX64-NEXT: bl .callee[PR] 355; AIX64-NEXT: nop 356; AIX64-NEXT: addi r1, r1, 112 357; AIX64-NEXT: ld r0, 16(r1) 358; AIX64-NEXT: mtlr r0 359; AIX64-NEXT: blr 360; 361; LINUX64BE-LABEL: str5: 362; LINUX64BE: # %bb.0: # %entry 363; LINUX64BE-NEXT: mflr r0 364; LINUX64BE-NEXT: stdu r1, -112(r1) 365; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 366; LINUX64BE-NEXT: std r0, 128(r1) 367; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 368; LINUX64BE-NEXT: addi r3, r3, 493 369; LINUX64BE-NEXT: bl callee 370; LINUX64BE-NEXT: nop 371; LINUX64BE-NEXT: addi r1, r1, 112 372; LINUX64BE-NEXT: ld r0, 16(r1) 373; LINUX64BE-NEXT: mtlr r0 374; LINUX64BE-NEXT: blr 375; 376; LINUX64LE-LABEL: str5: 377; LINUX64LE: # %bb.0: # %entry 378; LINUX64LE-NEXT: mflr r0 379; LINUX64LE-NEXT: stdu r1, -32(r1) 380; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 381; LINUX64LE-NEXT: std r0, 48(r1) 382; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 383; LINUX64LE-NEXT: addi r3, r3, 493 384; LINUX64LE-NEXT: bl callee 385; LINUX64LE-NEXT: nop 386; LINUX64LE-NEXT: addi r1, r1, 32 387; LINUX64LE-NEXT: ld r0, 16(r1) 388; LINUX64LE-NEXT: mtlr r0 389; LINUX64LE-NEXT: blr 390entry: 391 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.5) 392 ret i32 %call 393} 394 395define dso_local signext i32 @array1() local_unnamed_addr #0 { 396; AIX32-LABEL: array1: 397; AIX32: # %bb.0: # %entry 398; AIX32-NEXT: mflr r0 399; AIX32-NEXT: stwu r1, -96(r1) 400; AIX32-NEXT: lwz r3, L..C0(r2) # @__ModuleStringPool 401; AIX32-NEXT: li r4, 372 402; AIX32-NEXT: li r5, 360 403; AIX32-NEXT: stw r0, 104(r1) 404; AIX32-NEXT: lxvw4x vs0, r3, r4 405; AIX32-NEXT: lxvw4x vs1, r3, r5 406; AIX32-NEXT: li r4, 12 407; AIX32-NEXT: addi r3, r1, 64 408; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27 409; AIX32-NEXT: stxvw4x vs0, 0, r4 410; AIX32-NEXT: stxvw4x vs1, 0, r3 411; AIX32-NEXT: bl .calleeInt[PR] 412; AIX32-NEXT: nop 413; AIX32-NEXT: addi r1, r1, 96 414; AIX32-NEXT: lwz r0, 8(r1) 415; AIX32-NEXT: mtlr r0 416; AIX32-NEXT: blr 417; 418; AIX64-LABEL: array1: 419; AIX64: # %bb.0: # %entry 420; AIX64-NEXT: mflr r0 421; AIX64-NEXT: stdu r1, -144(r1) 422; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 423; AIX64-NEXT: li r4, 372 424; AIX64-NEXT: li r5, 360 425; AIX64-NEXT: std r0, 160(r1) 426; AIX64-NEXT: lxvw4x vs0, r3, r4 427; AIX64-NEXT: lxvw4x vs1, r3, r5 428; AIX64-NEXT: addi r4, r1, 124 429; AIX64-NEXT: addi r3, r1, 112 430; AIX64-NEXT: stxvw4x vs0, 0, r4 431; AIX64-NEXT: stxvw4x vs1, 0, r3 432; AIX64-NEXT: bl .calleeInt[PR] 433; AIX64-NEXT: nop 434; AIX64-NEXT: addi r1, r1, 144 435; AIX64-NEXT: ld r0, 16(r1) 436; AIX64-NEXT: mtlr r0 437; AIX64-NEXT: blr 438; 439; LINUX64BE-LABEL: array1: 440; LINUX64BE: # %bb.0: # %entry 441; LINUX64BE-NEXT: mflr r0 442; LINUX64BE-NEXT: stdu r1, -144(r1) 443; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 444; LINUX64BE-NEXT: li r4, 372 445; LINUX64BE-NEXT: li r5, 360 446; LINUX64BE-NEXT: std r0, 160(r1) 447; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 448; LINUX64BE-NEXT: lxvw4x vs0, r3, r4 449; LINUX64BE-NEXT: lxvw4x vs1, r3, r5 450; LINUX64BE-NEXT: addi r4, r1, 124 451; LINUX64BE-NEXT: addi r3, r1, 112 452; LINUX64BE-NEXT: stxvw4x vs0, 0, r4 453; LINUX64BE-NEXT: stxvw4x vs1, 0, r3 454; LINUX64BE-NEXT: bl calleeInt 455; LINUX64BE-NEXT: nop 456; LINUX64BE-NEXT: addi r1, r1, 144 457; LINUX64BE-NEXT: ld r0, 16(r1) 458; LINUX64BE-NEXT: mtlr r0 459; LINUX64BE-NEXT: blr 460; 461; LINUX64LE-LABEL: array1: 462; LINUX64LE: # %bb.0: # %entry 463; LINUX64LE-NEXT: mflr r0 464; LINUX64LE-NEXT: stdu r1, -64(r1) 465; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 466; LINUX64LE-NEXT: li r4, 372 467; LINUX64LE-NEXT: li r5, 360 468; LINUX64LE-NEXT: std r0, 80(r1) 469; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 470; LINUX64LE-NEXT: lxvd2x vs0, r3, r4 471; LINUX64LE-NEXT: lxvd2x vs1, r3, r5 472; LINUX64LE-NEXT: addi r4, r1, 44 473; LINUX64LE-NEXT: addi r3, r1, 32 474; LINUX64LE-NEXT: stxvd2x vs0, 0, r4 475; LINUX64LE-NEXT: stxvd2x vs1, 0, r3 476; LINUX64LE-NEXT: bl calleeInt 477; LINUX64LE-NEXT: nop 478; LINUX64LE-NEXT: addi r1, r1, 64 479; LINUX64LE-NEXT: ld r0, 16(r1) 480; LINUX64LE-NEXT: mtlr r0 481; LINUX64LE-NEXT: blr 482entry: 483 %IntArray = alloca [7 x i32], align 4 484 call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %IntArray) 485 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) 486 %call = call signext i32 @calleeInt(ptr noundef nonnull %IntArray) 487 call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %IntArray) 488 ret i32 %call 489} 490 491declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) 492declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) 493declare signext i32 @calleeInt(ptr noundef) local_unnamed_addr 494declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) 495 496define dso_local double @DValue1() local_unnamed_addr #0 { 497; LINUX-LABEL: DValue1: 498; LINUX: # %bb.0: # %entry 499; LINUX-NEXT: addis 3, 2, .LCPI6_0@toc@ha 500; LINUX-NEXT: lfd 1, .LCPI6_0@toc@l(3) 501; LINUX-NEXT: blr 502; AIX32-LABEL: DValue1: 503; AIX32: # %bb.0: # %entry 504; AIX32-NEXT: lwz r3, L..C1(r2) # %const.0 505; AIX32-NEXT: lfd f1, 0(r3) 506; AIX32-NEXT: blr 507; 508; AIX64-LABEL: DValue1: 509; AIX64: # %bb.0: # %entry 510; AIX64-NEXT: ld r3, L..C1(r2) # %const.0 511; AIX64-NEXT: lfd f1, 0(r3) 512; AIX64-NEXT: blr 513; 514; LINUX64BE-LABEL: DValue1: 515; LINUX64BE: # %bb.0: # %entry 516; LINUX64BE-NEXT: addis r3, r2, .LCPI6_0@toc@ha 517; LINUX64BE-NEXT: lfd f1, .LCPI6_0@toc@l(r3) 518; LINUX64BE-NEXT: blr 519; 520; LINUX64LE-LABEL: DValue1: 521; LINUX64LE: # %bb.0: # %entry 522; LINUX64LE-NEXT: addis r3, r2, .LCPI6_0@toc@ha 523; LINUX64LE-NEXT: lfd f1, .LCPI6_0@toc@l(r3) 524; LINUX64LE-NEXT: blr 525entry: 526 ret double 3.141590e+00 527} 528 529define dso_local signext i32 @str6() local_unnamed_addr #0 { 530; AIX32-LABEL: str6: 531; AIX32: # %bb.0: # %entry 532; AIX32-NEXT: mflr r0 533; AIX32-NEXT: stwu r1, -80(r1) 534; AIX32-NEXT: li r3, 17152 535; AIX32-NEXT: lis r4, 16963 536; AIX32-NEXT: stw r0, 88(r1) 537; AIX32-NEXT: lis r5, 16706 538; AIX32-NEXT: sth r3, 72(r1) 539; AIX32-NEXT: ori r3, r4, 16706 540; AIX32-NEXT: ori r4, r5, 17217 541; AIX32-NEXT: stw r31, 76(r1) # 4-byte Folded Spill 542; AIX32-NEXT: stw r3, 68(r1) 543; AIX32-NEXT: addi r3, r1, 64 544; AIX32-NEXT: stw r4, 64(r1) 545; AIX32-NEXT: bl .callee[PR] 546; AIX32-NEXT: nop 547; AIX32-NEXT: addi r4, r1, 69 548; AIX32-NEXT: mr r31, r3 549; AIX32-NEXT: mr r3, r4 550; AIX32-NEXT: bl .callee[PR] 551; AIX32-NEXT: nop 552; AIX32-NEXT: add r3, r3, r31 553; AIX32-NEXT: lwz r31, 76(r1) # 4-byte Folded Reload 554; AIX32-NEXT: addi r1, r1, 80 555; AIX32-NEXT: lwz r0, 8(r1) 556; AIX32-NEXT: mtlr r0 557; AIX32-NEXT: blr 558; 559; AIX64-LABEL: str6: 560; AIX64: # %bb.0: # %entry 561; AIX64-NEXT: mflr r0 562; AIX64-NEXT: stdu r1, -144(r1) 563; AIX64-NEXT: lis r3, 16706 564; AIX64-NEXT: std r0, 160(r1) 565; AIX64-NEXT: li r4, 17152 566; AIX64-NEXT: std r31, 136(r1) # 8-byte Folded Spill 567; AIX64-NEXT: ori r3, r3, 17217 568; AIX64-NEXT: rldic r3, r3, 32, 1 569; AIX64-NEXT: oris r3, r3, 16963 570; AIX64-NEXT: sth r4, 128(r1) 571; AIX64-NEXT: ori r3, r3, 16706 572; AIX64-NEXT: std r3, 120(r1) 573; AIX64-NEXT: addi r3, r1, 120 574; AIX64-NEXT: bl .callee[PR] 575; AIX64-NEXT: nop 576; AIX64-NEXT: mr r31, r3 577; AIX64-NEXT: addi r3, r1, 125 578; AIX64-NEXT: bl .callee[PR] 579; AIX64-NEXT: nop 580; AIX64-NEXT: add r3, r3, r31 581; AIX64-NEXT: ld r31, 136(r1) # 8-byte Folded Reload 582; AIX64-NEXT: extsw r3, r3 583; AIX64-NEXT: addi r1, r1, 144 584; AIX64-NEXT: ld r0, 16(r1) 585; AIX64-NEXT: mtlr r0 586; AIX64-NEXT: blr 587; 588; LINUX64BE-LABEL: str6: 589; LINUX64BE: # %bb.0: # %entry 590; LINUX64BE-NEXT: mflr r0 591; LINUX64BE-NEXT: stdu r1, -144(r1) 592; LINUX64BE-NEXT: lis r3, 16706 593; LINUX64BE-NEXT: std r0, 160(r1) 594; LINUX64BE-NEXT: li r4, 17152 595; LINUX64BE-NEXT: std r30, 128(r1) # 8-byte Folded Spill 596; LINUX64BE-NEXT: ori r3, r3, 17217 597; LINUX64BE-NEXT: rldic r3, r3, 32, 1 598; LINUX64BE-NEXT: oris r3, r3, 16963 599; LINUX64BE-NEXT: sth r4, 120(r1) 600; LINUX64BE-NEXT: ori r3, r3, 16706 601; LINUX64BE-NEXT: std r3, 112(r1) 602; LINUX64BE-NEXT: addi r3, r1, 112 603; LINUX64BE-NEXT: bl callee 604; LINUX64BE-NEXT: nop 605; LINUX64BE-NEXT: mr r30, r3 606; LINUX64BE-NEXT: addi r3, r1, 117 607; LINUX64BE-NEXT: bl callee 608; LINUX64BE-NEXT: nop 609; LINUX64BE-NEXT: add r3, r3, r30 610; LINUX64BE-NEXT: ld r30, 128(r1) # 8-byte Folded Reload 611; LINUX64BE-NEXT: extsw r3, r3 612; LINUX64BE-NEXT: addi r1, r1, 144 613; LINUX64BE-NEXT: ld r0, 16(r1) 614; LINUX64BE-NEXT: mtlr r0 615; LINUX64BE-NEXT: blr 616; 617; LINUX64LE-LABEL: str6: 618; LINUX64LE: # %bb.0: # %entry 619; LINUX64LE-NEXT: mflr r0 620; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill 621; LINUX64LE-NEXT: stdu r1, -64(r1) 622; LINUX64LE-NEXT: lis r3, 8480 623; LINUX64LE-NEXT: std r0, 80(r1) 624; LINUX64LE-NEXT: li r4, 67 625; LINUX64LE-NEXT: ori r3, r3, 41377 626; LINUX64LE-NEXT: sth r4, 40(r1) 627; LINUX64LE-NEXT: rldic r3, r3, 33, 1 628; LINUX64LE-NEXT: oris r3, r3, 16707 629; LINUX64LE-NEXT: ori r3, r3, 16961 630; LINUX64LE-NEXT: std r3, 32(r1) 631; LINUX64LE-NEXT: addi r3, r1, 32 632; LINUX64LE-NEXT: bl callee 633; LINUX64LE-NEXT: nop 634; LINUX64LE-NEXT: mr r30, r3 635; LINUX64LE-NEXT: addi r3, r1, 37 636; LINUX64LE-NEXT: bl callee 637; LINUX64LE-NEXT: nop 638; LINUX64LE-NEXT: add r3, r3, r30 639; LINUX64LE-NEXT: extsw r3, r3 640; LINUX64LE-NEXT: addi r1, r1, 64 641; LINUX64LE-NEXT: ld r0, 16(r1) 642; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 643; LINUX64LE-NEXT: mtlr r0 644; LINUX64LE-NEXT: blr 645entry: 646 %TheString = alloca [10 x i8], align 1 647 call void @llvm.lifetime.start.p0(i64 10, ptr nonnull %TheString) 648 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) 649 %call = call signext i32 @callee(ptr noundef nonnull %TheString) 650 %add.ptr = getelementptr inbounds i8, ptr %TheString, i64 5 651 %call2 = call signext i32 @callee(ptr noundef nonnull %add.ptr) 652 %add = add nsw i32 %call2, %call 653 call void @llvm.lifetime.end.p0(i64 10, ptr nonnull %TheString) 654 ret i32 %add 655} 656 657define dso_local signext i32 @str7() local_unnamed_addr #0 { 658; AIX32-LABEL: str7: 659; AIX32: # %bb.0: # %entry 660; AIX32-NEXT: mflr r0 661; AIX32-NEXT: stwu r1, -64(r1) 662; AIX32-NEXT: lwz r3, L..C2(r2) # @GLOBALSTRING 663; AIX32-NEXT: stw r0, 72(r1) 664; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill 665; AIX32-NEXT: lwz r3, 0(r3) 666; AIX32-NEXT: bl .callee[PR] 667; AIX32-NEXT: nop 668; AIX32-NEXT: lwz r4, L..C0(r2) # @__ModuleStringPool 669; AIX32-NEXT: mr r31, r3 670; AIX32-NEXT: addi r4, r4, 458 671; AIX32-NEXT: mr r3, r4 672; AIX32-NEXT: bl .callee[PR] 673; AIX32-NEXT: nop 674; AIX32-NEXT: add r3, r3, r31 675; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload 676; AIX32-NEXT: addi r1, r1, 64 677; AIX32-NEXT: lwz r0, 8(r1) 678; AIX32-NEXT: mtlr r0 679; AIX32-NEXT: blr 680; 681; AIX64-LABEL: str7: 682; AIX64: # %bb.0: # %entry 683; AIX64-NEXT: mflr r0 684; AIX64-NEXT: stdu r1, -128(r1) 685; AIX64-NEXT: ld r3, L..C2(r2) # @GLOBALSTRING 686; AIX64-NEXT: std r0, 144(r1) 687; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill 688; AIX64-NEXT: ld r3, 0(r3) 689; AIX64-NEXT: bl .callee[PR] 690; AIX64-NEXT: nop 691; AIX64-NEXT: mr r31, r3 692; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 693; AIX64-NEXT: addi r3, r3, 458 694; AIX64-NEXT: bl .callee[PR] 695; AIX64-NEXT: nop 696; AIX64-NEXT: add r3, r3, r31 697; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload 698; AIX64-NEXT: extsw r3, r3 699; AIX64-NEXT: addi r1, r1, 128 700; AIX64-NEXT: ld r0, 16(r1) 701; AIX64-NEXT: mtlr r0 702; AIX64-NEXT: blr 703; 704; LINUX64BE-LABEL: str7: 705; LINUX64BE: # %bb.0: # %entry 706; LINUX64BE-NEXT: mflr r0 707; LINUX64BE-NEXT: stdu r1, -128(r1) 708; LINUX64BE-NEXT: std r0, 144(r1) 709; LINUX64BE-NEXT: addis r3, r2, GLOBALSTRING@toc@ha 710; LINUX64BE-NEXT: std r30, 112(r1) # 8-byte Folded Spill 711; LINUX64BE-NEXT: ld r3, GLOBALSTRING@toc@l(r3) 712; LINUX64BE-NEXT: bl callee 713; LINUX64BE-NEXT: nop 714; LINUX64BE-NEXT: mr r30, r3 715; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 716; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 717; LINUX64BE-NEXT: addi r3, r3, 458 718; LINUX64BE-NEXT: bl callee 719; LINUX64BE-NEXT: nop 720; LINUX64BE-NEXT: add r3, r3, r30 721; LINUX64BE-NEXT: ld r30, 112(r1) # 8-byte Folded Reload 722; LINUX64BE-NEXT: extsw r3, r3 723; LINUX64BE-NEXT: addi r1, r1, 128 724; LINUX64BE-NEXT: ld r0, 16(r1) 725; LINUX64BE-NEXT: mtlr r0 726; LINUX64BE-NEXT: blr 727; 728; LINUX64LE-LABEL: str7: 729; LINUX64LE: # %bb.0: # %entry 730; LINUX64LE-NEXT: mflr r0 731; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill 732; LINUX64LE-NEXT: stdu r1, -48(r1) 733; LINUX64LE-NEXT: std r0, 64(r1) 734; LINUX64LE-NEXT: addis r3, r2, GLOBALSTRING@toc@ha 735; LINUX64LE-NEXT: ld r3, GLOBALSTRING@toc@l(r3) 736; LINUX64LE-NEXT: bl callee 737; LINUX64LE-NEXT: nop 738; LINUX64LE-NEXT: mr r30, r3 739; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 740; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 741; LINUX64LE-NEXT: addi r3, r3, 458 742; LINUX64LE-NEXT: bl callee 743; LINUX64LE-NEXT: nop 744; LINUX64LE-NEXT: add r3, r3, r30 745; LINUX64LE-NEXT: extsw r3, r3 746; LINUX64LE-NEXT: addi r1, r1, 48 747; LINUX64LE-NEXT: ld r0, 16(r1) 748; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 749; LINUX64LE-NEXT: mtlr r0 750; LINUX64LE-NEXT: blr 751entry: 752 %0 = load ptr, ptr @GLOBALSTRING, align 8 753 %call = tail call signext i32 @callee(ptr noundef %0) 754 %call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.8) 755 %add = add nsw i32 %call1, %call 756 ret i32 %add 757} 758 759define dso_local signext i32 @mixed1() local_unnamed_addr #0 { 760; AIX32-LABEL: mixed1: 761; AIX32: # %bb.0: # %entry 762; AIX32-NEXT: mflr r0 763; AIX32-NEXT: stwu r1, -64(r1) 764; AIX32-NEXT: lwz r3, L..C3(r2) # @IntArray2 765; AIX32-NEXT: stw r0, 72(r1) 766; AIX32-NEXT: stw r31, 60(r1) # 4-byte Folded Spill 767; AIX32-NEXT: bl .calleeInt[PR] 768; AIX32-NEXT: nop 769; AIX32-NEXT: lwz r4, L..C0(r2) # @__ModuleStringPool 770; AIX32-NEXT: mr r31, r3 771; AIX32-NEXT: addi r4, r4, 400 772; AIX32-NEXT: mr r3, r4 773; AIX32-NEXT: bl .callee[PR] 774; AIX32-NEXT: nop 775; AIX32-NEXT: add r3, r3, r31 776; AIX32-NEXT: lwz r31, 60(r1) # 4-byte Folded Reload 777; AIX32-NEXT: addi r1, r1, 64 778; AIX32-NEXT: lwz r0, 8(r1) 779; AIX32-NEXT: mtlr r0 780; AIX32-NEXT: blr 781; 782; AIX64-LABEL: mixed1: 783; AIX64: # %bb.0: # %entry 784; AIX64-NEXT: mflr r0 785; AIX64-NEXT: stdu r1, -128(r1) 786; AIX64-NEXT: ld r3, L..C3(r2) # @IntArray2 787; AIX64-NEXT: std r0, 144(r1) 788; AIX64-NEXT: std r31, 120(r1) # 8-byte Folded Spill 789; AIX64-NEXT: bl .calleeInt[PR] 790; AIX64-NEXT: nop 791; AIX64-NEXT: mr r31, r3 792; AIX64-NEXT: ld r3, L..C0(r2) # @__ModuleStringPool 793; AIX64-NEXT: addi r3, r3, 400 794; AIX64-NEXT: bl .callee[PR] 795; AIX64-NEXT: nop 796; AIX64-NEXT: add r3, r3, r31 797; AIX64-NEXT: ld r31, 120(r1) # 8-byte Folded Reload 798; AIX64-NEXT: extsw r3, r3 799; AIX64-NEXT: addi r1, r1, 128 800; AIX64-NEXT: ld r0, 16(r1) 801; AIX64-NEXT: mtlr r0 802; AIX64-NEXT: blr 803; 804; LINUX64BE-LABEL: mixed1: 805; LINUX64BE: # %bb.0: # %entry 806; LINUX64BE-NEXT: mflr r0 807; LINUX64BE-NEXT: stdu r1, -128(r1) 808; LINUX64BE-NEXT: addis r3, r2, IntArray2@toc@ha 809; LINUX64BE-NEXT: std r0, 144(r1) 810; LINUX64BE-NEXT: std r30, 112(r1) # 8-byte Folded Spill 811; LINUX64BE-NEXT: addi r3, r3, IntArray2@toc@l 812; LINUX64BE-NEXT: bl calleeInt 813; LINUX64BE-NEXT: nop 814; LINUX64BE-NEXT: mr r30, r3 815; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 816; LINUX64BE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 817; LINUX64BE-NEXT: addi r3, r3, 400 818; LINUX64BE-NEXT: bl callee 819; LINUX64BE-NEXT: nop 820; LINUX64BE-NEXT: add r3, r3, r30 821; LINUX64BE-NEXT: ld r30, 112(r1) # 8-byte Folded Reload 822; LINUX64BE-NEXT: extsw r3, r3 823; LINUX64BE-NEXT: addi r1, r1, 128 824; LINUX64BE-NEXT: ld r0, 16(r1) 825; LINUX64BE-NEXT: mtlr r0 826; LINUX64BE-NEXT: blr 827; 828; LINUX64LE-LABEL: mixed1: 829; LINUX64LE: # %bb.0: # %entry 830; LINUX64LE-NEXT: mflr r0 831; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill 832; LINUX64LE-NEXT: stdu r1, -48(r1) 833; LINUX64LE-NEXT: addis r3, r2, IntArray2@toc@ha 834; LINUX64LE-NEXT: std r0, 64(r1) 835; LINUX64LE-NEXT: addi r3, r3, IntArray2@toc@l 836; LINUX64LE-NEXT: bl calleeInt 837; LINUX64LE-NEXT: nop 838; LINUX64LE-NEXT: mr r30, r3 839; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 840; LINUX64LE-NEXT: addi r3, r3, .L__ModuleStringPool@toc@l 841; LINUX64LE-NEXT: addi r3, r3, 400 842; LINUX64LE-NEXT: bl callee 843; LINUX64LE-NEXT: nop 844; LINUX64LE-NEXT: add r3, r3, r30 845; LINUX64LE-NEXT: extsw r3, r3 846; LINUX64LE-NEXT: addi r1, r1, 48 847; LINUX64LE-NEXT: ld r0, 16(r1) 848; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 849; LINUX64LE-NEXT: mtlr r0 850; LINUX64LE-NEXT: blr 851entry: 852 %call = tail call signext i32 @calleeInt(ptr noundef nonnull @IntArray2) 853 %call1 = tail call signext i32 @callee(ptr noundef nonnull @.str.6) 854 %add = add nsw i32 %call1, %call 855 ret i32 %add 856} 857 858define dso_local signext i32 @mixed2() local_unnamed_addr #0 { 859; AIX32-LABEL: mixed2: 860; AIX32: # %bb.0: # %entry 861; AIX32-NEXT: mflr r0 862; AIX32-NEXT: stwu r1, -112(r1) 863; AIX32-NEXT: stw r0, 120(r1) 864; AIX32-NEXT: stw r30, 104(r1) # 4-byte Folded Spill 865; AIX32-NEXT: lwz r30, L..C0(r2) # @__ModuleStringPool 866; AIX32-NEXT: li r3, 372 867; AIX32-NEXT: li r4, 360 868; AIX32-NEXT: stw r31, 108(r1) # 4-byte Folded Spill 869; AIX32-NEXT: lxvw4x vs0, r30, r3 870; AIX32-NEXT: lxvw4x vs1, r30, r4 871; AIX32-NEXT: li r4, 12 872; AIX32-NEXT: addi r3, r1, 64 873; AIX32-NEXT: rlwimi r4, r3, 0, 30, 27 874; AIX32-NEXT: stxvw4x vs0, 0, r4 875; AIX32-NEXT: stxvw4x vs1, 0, r3 876; AIX32-NEXT: bl .calleeInt[PR] 877; AIX32-NEXT: nop 878; AIX32-NEXT: lwz r4, L..C3(r2) # @IntArray2 879; AIX32-NEXT: mr r31, r3 880; AIX32-NEXT: mr r3, r4 881; AIX32-NEXT: bl .calleeInt[PR] 882; AIX32-NEXT: nop 883; AIX32-NEXT: addi r4, r30, 400 884; AIX32-NEXT: mr r5, r3 885; AIX32-NEXT: mr r3, r4 886; AIX32-NEXT: add r31, r5, r31 887; AIX32-NEXT: bl .callee[PR] 888; AIX32-NEXT: nop 889; AIX32-NEXT: addi r4, r30, 473 890; AIX32-NEXT: mr r5, r3 891; AIX32-NEXT: mr r3, r4 892; AIX32-NEXT: add r31, r31, r5 893; AIX32-NEXT: bl .callee[PR] 894; AIX32-NEXT: nop 895; AIX32-NEXT: add r3, r31, r3 896; AIX32-NEXT: lwz r31, 108(r1) # 4-byte Folded Reload 897; AIX32-NEXT: lwz r30, 104(r1) # 4-byte Folded Reload 898; AIX32-NEXT: addi r1, r1, 112 899; AIX32-NEXT: lwz r0, 8(r1) 900; AIX32-NEXT: mtlr r0 901; AIX32-NEXT: blr 902; 903; AIX64-LABEL: mixed2: 904; AIX64: # %bb.0: # %entry 905; AIX64-NEXT: mflr r0 906; AIX64-NEXT: stdu r1, -160(r1) 907; AIX64-NEXT: std r0, 176(r1) 908; AIX64-NEXT: std r30, 144(r1) # 8-byte Folded Spill 909; AIX64-NEXT: ld r30, L..C0(r2) # @__ModuleStringPool 910; AIX64-NEXT: li r3, 372 911; AIX64-NEXT: li r4, 360 912; AIX64-NEXT: std r31, 152(r1) # 8-byte Folded Spill 913; AIX64-NEXT: lxvw4x vs0, r30, r3 914; AIX64-NEXT: lxvw4x vs1, r30, r4 915; AIX64-NEXT: addi r4, r1, 124 916; AIX64-NEXT: addi r3, r1, 112 917; AIX64-NEXT: stxvw4x vs0, 0, r4 918; AIX64-NEXT: stxvw4x vs1, 0, r3 919; AIX64-NEXT: bl .calleeInt[PR] 920; AIX64-NEXT: nop 921; AIX64-NEXT: mr r31, r3 922; AIX64-NEXT: ld r3, L..C3(r2) # @IntArray2 923; AIX64-NEXT: bl .calleeInt[PR] 924; AIX64-NEXT: nop 925; AIX64-NEXT: addi r4, r30, 400 926; AIX64-NEXT: add r31, r3, r31 927; AIX64-NEXT: mr r3, r4 928; AIX64-NEXT: bl .callee[PR] 929; AIX64-NEXT: nop 930; AIX64-NEXT: addi r4, r30, 473 931; AIX64-NEXT: add r31, r31, r3 932; AIX64-NEXT: mr r3, r4 933; AIX64-NEXT: bl .callee[PR] 934; AIX64-NEXT: nop 935; AIX64-NEXT: add r3, r31, r3 936; AIX64-NEXT: ld r31, 152(r1) # 8-byte Folded Reload 937; AIX64-NEXT: ld r30, 144(r1) # 8-byte Folded Reload 938; AIX64-NEXT: extsw r3, r3 939; AIX64-NEXT: addi r1, r1, 160 940; AIX64-NEXT: ld r0, 16(r1) 941; AIX64-NEXT: mtlr r0 942; AIX64-NEXT: blr 943; 944; LINUX64BE-LABEL: mixed2: 945; LINUX64BE: # %bb.0: # %entry 946; LINUX64BE-NEXT: mflr r0 947; LINUX64BE-NEXT: stdu r1, -176(r1) 948; LINUX64BE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 949; LINUX64BE-NEXT: std r0, 192(r1) 950; LINUX64BE-NEXT: std r29, 152(r1) # 8-byte Folded Spill 951; LINUX64BE-NEXT: li r4, 360 952; LINUX64BE-NEXT: std r30, 160(r1) # 8-byte Folded Spill 953; LINUX64BE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l 954; LINUX64BE-NEXT: li r3, 372 955; LINUX64BE-NEXT: lxvw4x vs0, r29, r3 956; LINUX64BE-NEXT: addi r3, r1, 112 957; LINUX64BE-NEXT: lxvw4x vs1, r29, r4 958; LINUX64BE-NEXT: addi r4, r1, 124 959; LINUX64BE-NEXT: stxvw4x vs0, 0, r4 960; LINUX64BE-NEXT: stxvw4x vs1, 0, r3 961; LINUX64BE-NEXT: bl calleeInt 962; LINUX64BE-NEXT: nop 963; LINUX64BE-NEXT: mr r30, r3 964; LINUX64BE-NEXT: addis r3, r2, IntArray2@toc@ha 965; LINUX64BE-NEXT: addi r3, r3, IntArray2@toc@l 966; LINUX64BE-NEXT: bl calleeInt 967; LINUX64BE-NEXT: nop 968; LINUX64BE-NEXT: addi r4, r29, 400 969; LINUX64BE-NEXT: add r30, r3, r30 970; LINUX64BE-NEXT: mr r3, r4 971; LINUX64BE-NEXT: bl callee 972; LINUX64BE-NEXT: nop 973; LINUX64BE-NEXT: addi r4, r29, 473 974; LINUX64BE-NEXT: add r30, r30, r3 975; LINUX64BE-NEXT: mr r3, r4 976; LINUX64BE-NEXT: bl callee 977; LINUX64BE-NEXT: nop 978; LINUX64BE-NEXT: add r3, r30, r3 979; LINUX64BE-NEXT: ld r30, 160(r1) # 8-byte Folded Reload 980; LINUX64BE-NEXT: ld r29, 152(r1) # 8-byte Folded Reload 981; LINUX64BE-NEXT: extsw r3, r3 982; LINUX64BE-NEXT: addi r1, r1, 176 983; LINUX64BE-NEXT: ld r0, 16(r1) 984; LINUX64BE-NEXT: mtlr r0 985; LINUX64BE-NEXT: blr 986; 987; LINUX64LE-LABEL: mixed2: 988; LINUX64LE: # %bb.0: # %entry 989; LINUX64LE-NEXT: mflr r0 990; LINUX64LE-NEXT: std r29, -24(r1) # 8-byte Folded Spill 991; LINUX64LE-NEXT: std r30, -16(r1) # 8-byte Folded Spill 992; LINUX64LE-NEXT: stdu r1, -96(r1) 993; LINUX64LE-NEXT: addis r3, r2, .L__ModuleStringPool@toc@ha 994; LINUX64LE-NEXT: li r4, 360 995; LINUX64LE-NEXT: std r0, 112(r1) 996; LINUX64LE-NEXT: addi r29, r3, .L__ModuleStringPool@toc@l 997; LINUX64LE-NEXT: li r3, 372 998; LINUX64LE-NEXT: lxvd2x vs0, r29, r3 999; LINUX64LE-NEXT: lxvd2x vs1, r29, r4 1000; LINUX64LE-NEXT: addi r4, r1, 44 1001; LINUX64LE-NEXT: addi r3, r1, 32 1002; LINUX64LE-NEXT: stxvd2x vs0, 0, r4 1003; LINUX64LE-NEXT: stxvd2x vs1, 0, r3 1004; LINUX64LE-NEXT: bl calleeInt 1005; LINUX64LE-NEXT: nop 1006; LINUX64LE-NEXT: mr r30, r3 1007; LINUX64LE-NEXT: addis r3, r2, IntArray2@toc@ha 1008; LINUX64LE-NEXT: addi r3, r3, IntArray2@toc@l 1009; LINUX64LE-NEXT: bl calleeInt 1010; LINUX64LE-NEXT: nop 1011; LINUX64LE-NEXT: addi r4, r29, 400 1012; LINUX64LE-NEXT: add r30, r3, r30 1013; LINUX64LE-NEXT: mr r3, r4 1014; LINUX64LE-NEXT: bl callee 1015; LINUX64LE-NEXT: nop 1016; LINUX64LE-NEXT: addi r4, r29, 473 1017; LINUX64LE-NEXT: add r30, r30, r3 1018; LINUX64LE-NEXT: mr r3, r4 1019; LINUX64LE-NEXT: bl callee 1020; LINUX64LE-NEXT: nop 1021; LINUX64LE-NEXT: add r3, r30, r3 1022; LINUX64LE-NEXT: extsw r3, r3 1023; LINUX64LE-NEXT: addi r1, r1, 96 1024; LINUX64LE-NEXT: ld r0, 16(r1) 1025; LINUX64LE-NEXT: ld r30, -16(r1) # 8-byte Folded Reload 1026; LINUX64LE-NEXT: ld r29, -24(r1) # 8-byte Folded Reload 1027; LINUX64LE-NEXT: mtlr r0 1028; LINUX64LE-NEXT: blr 1029entry: 1030 %IntArray = alloca [7 x i32], align 4 1031 call void @llvm.lifetime.start.p0(i64 28, ptr nonnull %IntArray) 1032 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) 1033 %call = call signext i32 @calleeInt(ptr noundef nonnull %IntArray) 1034 %call1 = call signext i32 @calleeInt(ptr noundef nonnull @IntArray2) 1035 %add = add nsw i32 %call1, %call 1036 %call2 = call signext i32 @callee(ptr noundef nonnull @.str.6) 1037 %add3 = add nsw i32 %add, %call2 1038 %call4 = call signext i32 @callee(ptr noundef nonnull @.str.7) 1039 %add5 = add nsw i32 %add3, %call4 1040 call void @llvm.lifetime.end.p0(i64 28, ptr nonnull %IntArray) 1041 ret i32 %add5 1042} 1043 1044define dso_local signext i32 @str9() local_unnamed_addr #0 { 1045; AIX32-LABEL: str9: 1046; AIX32: # %bb.0: # %entry 1047; AIX32-NEXT: mflr r0 1048; AIX32-NEXT: stwu r1, -64(r1) 1049; AIX32-NEXT: lwz r3, L..C4(r2) # @.str.9 1050; AIX32-NEXT: stw r0, 72(r1) 1051; AIX32-NEXT: bl .callee[PR] 1052; AIX32-NEXT: nop 1053; AIX32-NEXT: addi r1, r1, 64 1054; AIX32-NEXT: lwz r0, 8(r1) 1055; AIX32-NEXT: mtlr r0 1056; AIX32-NEXT: blr 1057; 1058; AIX64-LABEL: str9: 1059; AIX64: # %bb.0: # %entry 1060; AIX64-NEXT: mflr r0 1061; AIX64-NEXT: stdu r1, -112(r1) 1062; AIX64-NEXT: ld r3, L..C4(r2) # @.str.9 1063; AIX64-NEXT: std r0, 128(r1) 1064; AIX64-NEXT: bl .callee[PR] 1065; AIX64-NEXT: nop 1066; AIX64-NEXT: addi r1, r1, 112 1067; AIX64-NEXT: ld r0, 16(r1) 1068; AIX64-NEXT: mtlr r0 1069; AIX64-NEXT: blr 1070; 1071; LINUX64BE-LABEL: str9: 1072; LINUX64BE: # %bb.0: # %entry 1073; LINUX64BE-NEXT: mflr r0 1074; LINUX64BE-NEXT: stdu r1, -112(r1) 1075; LINUX64BE-NEXT: addis r3, r2, .L.str.9@toc@ha 1076; LINUX64BE-NEXT: std r0, 128(r1) 1077; LINUX64BE-NEXT: addi r3, r3, .L.str.9@toc@l 1078; LINUX64BE-NEXT: bl callee 1079; LINUX64BE-NEXT: nop 1080; LINUX64BE-NEXT: addi r1, r1, 112 1081; LINUX64BE-NEXT: ld r0, 16(r1) 1082; LINUX64BE-NEXT: mtlr r0 1083; LINUX64BE-NEXT: blr 1084; 1085; LINUX64LE-LABEL: str9: 1086; LINUX64LE: # %bb.0: # %entry 1087; LINUX64LE-NEXT: mflr r0 1088; LINUX64LE-NEXT: stdu r1, -32(r1) 1089; LINUX64LE-NEXT: addis r3, r2, .L.str.9@toc@ha 1090; LINUX64LE-NEXT: std r0, 48(r1) 1091; LINUX64LE-NEXT: addi r3, r3, .L.str.9@toc@l 1092; LINUX64LE-NEXT: bl callee 1093; LINUX64LE-NEXT: nop 1094; LINUX64LE-NEXT: addi r1, r1, 32 1095; LINUX64LE-NEXT: ld r0, 16(r1) 1096; LINUX64LE-NEXT: mtlr r0 1097; LINUX64LE-NEXT: blr 1098entry: 1099 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.9) 1100 ret i32 %call 1101} 1102 1103define dso_local signext i32 @str10() local_unnamed_addr #0 { 1104; AIX32-LABEL: str10: 1105; AIX32: # %bb.0: # %entry 1106; AIX32-NEXT: mflr r0 1107; AIX32-NEXT: stwu r1, -64(r1) 1108; AIX32-NEXT: lwz r3, L..C5(r2) # @.str.10 1109; AIX32-NEXT: stw r0, 72(r1) 1110; AIX32-NEXT: bl .callee[PR] 1111; AIX32-NEXT: nop 1112; AIX32-NEXT: addi r1, r1, 64 1113; AIX32-NEXT: lwz r0, 8(r1) 1114; AIX32-NEXT: mtlr r0 1115; AIX32-NEXT: blr 1116; 1117; AIX64-LABEL: str10: 1118; AIX64: # %bb.0: # %entry 1119; AIX64-NEXT: mflr r0 1120; AIX64-NEXT: stdu r1, -112(r1) 1121; AIX64-NEXT: ld r3, L..C5(r2) # @.str.10 1122; AIX64-NEXT: std r0, 128(r1) 1123; AIX64-NEXT: bl .callee[PR] 1124; AIX64-NEXT: nop 1125; AIX64-NEXT: addi r1, r1, 112 1126; AIX64-NEXT: ld r0, 16(r1) 1127; AIX64-NEXT: mtlr r0 1128; AIX64-NEXT: blr 1129; 1130; LINUX64BE-LABEL: str10: 1131; LINUX64BE: # %bb.0: # %entry 1132; LINUX64BE-NEXT: mflr r0 1133; LINUX64BE-NEXT: stdu r1, -112(r1) 1134; LINUX64BE-NEXT: addis r3, r2, .L.str.10@toc@ha 1135; LINUX64BE-NEXT: std r0, 128(r1) 1136; LINUX64BE-NEXT: addi r3, r3, .L.str.10@toc@l 1137; LINUX64BE-NEXT: bl callee 1138; LINUX64BE-NEXT: nop 1139; LINUX64BE-NEXT: addi r1, r1, 112 1140; LINUX64BE-NEXT: ld r0, 16(r1) 1141; LINUX64BE-NEXT: mtlr r0 1142; LINUX64BE-NEXT: blr 1143; 1144; LINUX64LE-LABEL: str10: 1145; LINUX64LE: # %bb.0: # %entry 1146; LINUX64LE-NEXT: mflr r0 1147; LINUX64LE-NEXT: stdu r1, -32(r1) 1148; LINUX64LE-NEXT: addis r3, r2, .L.str.10@toc@ha 1149; LINUX64LE-NEXT: std r0, 48(r1) 1150; LINUX64LE-NEXT: addi r3, r3, .L.str.10@toc@l 1151; LINUX64LE-NEXT: bl callee 1152; LINUX64LE-NEXT: nop 1153; LINUX64LE-NEXT: addi r1, r1, 32 1154; LINUX64LE-NEXT: ld r0, 16(r1) 1155; LINUX64LE-NEXT: mtlr r0 1156; LINUX64LE-NEXT: blr 1157entry: 1158 %call = tail call signext i32 @callee(ptr noundef nonnull @.str.10) 1159 ret i32 %call 1160} 1161 1162attributes #0 = { nounwind } 1163 1164; AIXDATA: .csect L..__ModuleStringPool[RO],2 1165; AIXDATA: .align 3 # @__ModuleStringPool 1166; AIXDATA: .vbyte 4, 5 # 0x5 1167; AIXDATA: .vbyte 4, 7 # 0x7 1168; AIXDATA: .vbyte 4, 9 # 0x9 1169; AIXDATA: .vbyte 4, 11 # 0xb 1170; AIXDATA: .vbyte 4, 17 # 0x11 1171; AIXDATA: .vbyte 4, 1235 # 0x4d3 1172; AIXDATA: .vbyte 4, 32 # 0x20 1173; AIXDATA: .string "str2_STRING" 1174; AIXDATA: .string "MixedString" 1175; AIXDATA: .string "ABCABCABC" 1176; AIXDATA: .string "str1_STRING" 1177; AIXDATA: .string "str3_STRING" 1178; AIXDATA: .string "str4_STRING" 1179; AIXDATA: .byte 'S,'t,'a,'t,'i,'c,' ,'G,'l,'o,'b,'a,'l,0012,0000 1180; AIXDATA: .string "Different String 01" 1181; AIXDATA: .string "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING" 1182 1183; LINUXDATA: .L__ModuleStringPool: 1184; LINUXDATA: .long 5 # 0x5 1185; LINUXDATA: .long 7 # 0x7 1186; LINUXDATA: .long 9 # 0x9 1187; LINUXDATA: .long 11 # 0xb 1188; LINUXDATA: .long 17 # 0x11 1189; LINUXDATA: .long 1235 # 0x4d3 1190; LINUXDATA: .long 32 # 0x20 1191; LINUXDATA: .asciz "str2_STRING" 1192; LINUXDATA: .asciz "MixedString" 1193; LINUXDATA: .asciz "ABCABCABC" 1194; LINUXDATA: .asciz "str1_STRING" 1195; LINUXDATA: .asciz "str3_STRING" 1196; LINUXDATA: .asciz "str4_STRING" 1197; LINUXDATA: .asciz "Static Global\n" 1198; LINUXDATA: .asciz "Different String 01" 1199; LINUXDATA: .asciz "longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_longerstr5_STRING" 1200