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