1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 2; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc64-ibm-aix < %s | FileCheck -check-prefix=AIX64 %s 3; RUN: llc -verify-machineinstrs -mcpu=ppc -mtriple=powerpc-ibm-aix < %s | FileCheck -check-prefix=AIX32 %s 4; RUN: llc -verify-machineinstrs -mtriple=powerpc64le-unknown-linux-gnu < %s | FileCheck -check-prefix=LE64 %s 5 6define signext i32 @leaf1_noredzone(i32 signext %a, i32 signext %b) #0 { 7; AIX64-LABEL: leaf1_noredzone: 8; AIX64: # %bb.0: # %entry 9; AIX64-NEXT: stdu 1, -64(1) 10; AIX64-NEXT: stw 3, 60(1) 11; AIX64-NEXT: add 3, 3, 4 12; AIX64-NEXT: extsw 3, 3 13; AIX64-NEXT: stw 4, 56(1) 14; AIX64-NEXT: addi 1, 1, 64 15; AIX64-NEXT: blr 16; 17; AIX32-LABEL: leaf1_noredzone: 18; AIX32: # %bb.0: # %entry 19; AIX32-NEXT: stwu 1, -32(1) 20; AIX32-NEXT: stw 3, 28(1) 21; AIX32-NEXT: add 3, 3, 4 22; AIX32-NEXT: stw 4, 24(1) 23; AIX32-NEXT: addi 1, 1, 32 24; AIX32-NEXT: blr 25; 26; LE64-LABEL: leaf1_noredzone: 27; LE64: # %bb.0: # %entry 28; LE64-NEXT: stdu 1, -48(1) 29; LE64-NEXT: stw 3, 44(1) 30; LE64-NEXT: add 3, 3, 4 31; LE64-NEXT: stw 4, 40(1) 32; LE64-NEXT: extsw 3, 3 33; LE64-NEXT: addi 1, 1, 48 34; LE64-NEXT: blr 35entry: 36 %a.addr = alloca i32, align 4 37 %b.addr = alloca i32, align 4 38 store i32 %a, ptr %a.addr, align 4 39 store i32 %b, ptr %b.addr, align 4 40 %0 = load i32, ptr %a.addr, align 4 41 %1 = load i32, ptr %b.addr, align 4 42 %add = add nsw i32 %0, %1 43 ret i32 %add 44} 45 46define void @nonleaf1_noredzone(i32 signext %a, i32 signext %b) #0 { 47; AIX64-LABEL: nonleaf1_noredzone: 48; AIX64: # %bb.0: # %entry 49; AIX64-NEXT: mflr 0 50; AIX64-NEXT: stdu 1, -128(1) 51; AIX64-NEXT: std 0, 144(1) 52; AIX64-NEXT: stw 3, 124(1) 53; AIX64-NEXT: add 3, 3, 4 54; AIX64-NEXT: extsw 3, 3 55; AIX64-NEXT: stw 4, 120(1) 56; AIX64-NEXT: bl .leaf2[PR] 57; AIX64-NEXT: nop 58; AIX64-NEXT: lwz 3, 124(1) 59; AIX64-NEXT: lwz 4, 120(1) 60; AIX64-NEXT: sub 3, 3, 4 61; AIX64-NEXT: extsw 3, 3 62; AIX64-NEXT: bl .leaf2[PR] 63; AIX64-NEXT: nop 64; AIX64-NEXT: addi 1, 1, 128 65; AIX64-NEXT: ld 0, 16(1) 66; AIX64-NEXT: mtlr 0 67; AIX64-NEXT: blr 68; 69; AIX32-LABEL: nonleaf1_noredzone: 70; AIX32: # %bb.0: # %entry 71; AIX32-NEXT: mflr 0 72; AIX32-NEXT: stwu 1, -64(1) 73; AIX32-NEXT: stw 0, 72(1) 74; AIX32-NEXT: stw 3, 60(1) 75; AIX32-NEXT: add 3, 3, 4 76; AIX32-NEXT: stw 4, 56(1) 77; AIX32-NEXT: bl .leaf2[PR] 78; AIX32-NEXT: nop 79; AIX32-NEXT: lwz 3, 60(1) 80; AIX32-NEXT: lwz 4, 56(1) 81; AIX32-NEXT: sub 3, 3, 4 82; AIX32-NEXT: bl .leaf2[PR] 83; AIX32-NEXT: nop 84; AIX32-NEXT: addi 1, 1, 64 85; AIX32-NEXT: lwz 0, 8(1) 86; AIX32-NEXT: mtlr 0 87; AIX32-NEXT: blr 88; 89; LE64-LABEL: nonleaf1_noredzone: 90; LE64: # %bb.0: # %entry 91; LE64-NEXT: mflr 0 92; LE64-NEXT: stdu 1, -48(1) 93; LE64-NEXT: std 0, 64(1) 94; LE64-NEXT: stw 3, 44(1) 95; LE64-NEXT: add 3, 3, 4 96; LE64-NEXT: extsw 3, 3 97; LE64-NEXT: stw 4, 40(1) 98; LE64-NEXT: bl leaf2 99; LE64-NEXT: nop 100; LE64-NEXT: lwz 3, 44(1) 101; LE64-NEXT: lwz 4, 40(1) 102; LE64-NEXT: sub 3, 3, 4 103; LE64-NEXT: extsw 3, 3 104; LE64-NEXT: bl leaf2 105; LE64-NEXT: nop 106; LE64-NEXT: addi 1, 1, 48 107; LE64-NEXT: ld 0, 16(1) 108; LE64-NEXT: mtlr 0 109; LE64-NEXT: blr 110entry: 111 %a.addr = alloca i32, align 4 112 %b.addr = alloca i32, align 4 113 store i32 %a, ptr %a.addr, align 4 114 store i32 %b, ptr %b.addr, align 4 115 %0 = load i32, ptr %a.addr, align 4 116 %1 = load i32, ptr %b.addr, align 4 117 %add = add nsw i32 %0, %1 118 call void @leaf2(i32 signext %add) 119 %2 = load i32, ptr %a.addr, align 4 120 %3 = load i32, ptr %b.addr, align 4 121 %sub = sub nsw i32 %2, %3 122 call void @leaf2(i32 signext %sub) 123 ret void 124} 125 126declare void @leaf2(i32 signext) 127 128define signext i32 @leaf3_noredzone(i32 signext %a, i32 signext %b) #0 { 129; AIX64-LABEL: leaf3_noredzone: 130; AIX64: # %bb.0: # %entry 131; AIX64-NEXT: stdu 1, -48(1) 132; AIX64-NEXT: ld 6, 0(1) 133; AIX64-NEXT: mr 5, 3 134; AIX64-NEXT: add 3, 5, 4 135; AIX64-NEXT: extsw 3, 3 136; AIX64-NEXT: stw 5, 48(6) 137; AIX64-NEXT: stw 4, 52(6) 138; AIX64-NEXT: addi 1, 1, 48 139; AIX64-NEXT: blr 140; 141; AIX32-LABEL: leaf3_noredzone: 142; AIX32: # %bb.0: # %entry 143; AIX32-NEXT: stwu 1, -32(1) 144; AIX32-NEXT: lwz 6, 0(1) 145; AIX32-NEXT: mr 5, 3 146; AIX32-NEXT: add 3, 3, 4 147; AIX32-NEXT: stw 5, 24(6) 148; AIX32-NEXT: stw 4, 28(6) 149; AIX32-NEXT: addi 1, 1, 32 150; AIX32-NEXT: blr 151; 152; LE64-LABEL: leaf3_noredzone: 153; LE64: # %bb.0: # %entry 154; LE64-NEXT: stdu 1, -32(1) 155; LE64-NEXT: ld 5, 0(1) 156; LE64-NEXT: stw 3, 48(5) 157; LE64-NEXT: add 3, 3, 4 158; LE64-NEXT: stw 4, 52(5) 159; LE64-NEXT: extsw 3, 3 160; LE64-NEXT: addi 1, 1, 32 161; LE64-NEXT: blr 162entry: 163 %f.addr = call ptr @llvm.frameaddress(i32 1) 164 %a.addr = getelementptr ptr, ptr %f.addr, i32 6 165 %b.addr = getelementptr i32, ptr %a.addr, i32 1 166 store i32 %a, ptr %a.addr, align 4 167 store i32 %b, ptr %b.addr, align 4 168 %0 = load i32, ptr %a.addr, align 4 169 %1 = load i32, ptr %b.addr, align 4 170 %add = add nsw i32 %0, %1 171 ret i32 %add 172} 173 174define void @nonleaf2_noredzone(i32 signext %a, i32 signext %b) #0 { 175; AIX64-LABEL: nonleaf2_noredzone: 176; AIX64: # %bb.0: # %entry 177; AIX64-NEXT: mflr 0 178; AIX64-NEXT: stdu 1, -128(1) 179; AIX64-NEXT: std 0, 144(1) 180; AIX64-NEXT: std 31, 120(1) # 8-byte Folded Spill 181; AIX64-NEXT: add 5, 3, 4 182; AIX64-NEXT: ld 31, 0(1) 183; AIX64-NEXT: extsw 5, 5 184; AIX64-NEXT: stw 3, 48(31) 185; AIX64-NEXT: mr 3, 5 186; AIX64-NEXT: stw 4, 52(31) 187; AIX64-NEXT: bl .leaf2[PR] 188; AIX64-NEXT: nop 189; AIX64-NEXT: lwz 3, 48(31) 190; AIX64-NEXT: lwz 4, 52(31) 191; AIX64-NEXT: sub 3, 3, 4 192; AIX64-NEXT: extsw 3, 3 193; AIX64-NEXT: bl .leaf2[PR] 194; AIX64-NEXT: nop 195; AIX64-NEXT: ld 31, 120(1) # 8-byte Folded Reload 196; AIX64-NEXT: addi 1, 1, 128 197; AIX64-NEXT: ld 0, 16(1) 198; AIX64-NEXT: mtlr 0 199; AIX64-NEXT: blr 200; 201; AIX32-LABEL: nonleaf2_noredzone: 202; AIX32: # %bb.0: # %entry 203; AIX32-NEXT: mflr 0 204; AIX32-NEXT: stwu 1, -64(1) 205; AIX32-NEXT: stw 0, 72(1) 206; AIX32-NEXT: add 5, 3, 4 207; AIX32-NEXT: stw 31, 60(1) # 4-byte Folded Spill 208; AIX32-NEXT: lwz 31, 0(1) 209; AIX32-NEXT: stw 3, 24(31) 210; AIX32-NEXT: mr 3, 5 211; AIX32-NEXT: stw 4, 28(31) 212; AIX32-NEXT: bl .leaf2[PR] 213; AIX32-NEXT: nop 214; AIX32-NEXT: lwz 3, 24(31) 215; AIX32-NEXT: lwz 4, 28(31) 216; AIX32-NEXT: sub 3, 3, 4 217; AIX32-NEXT: bl .leaf2[PR] 218; AIX32-NEXT: nop 219; AIX32-NEXT: lwz 31, 60(1) # 4-byte Folded Reload 220; AIX32-NEXT: addi 1, 1, 64 221; AIX32-NEXT: lwz 0, 8(1) 222; AIX32-NEXT: mtlr 0 223; AIX32-NEXT: blr 224; 225; LE64-LABEL: nonleaf2_noredzone: 226; LE64: # %bb.0: # %entry 227; LE64-NEXT: mflr 0 228; LE64-NEXT: std 30, -16(1) # 8-byte Folded Spill 229; LE64-NEXT: stdu 1, -48(1) 230; LE64-NEXT: std 0, 64(1) 231; LE64-NEXT: ld 30, 0(1) 232; LE64-NEXT: stw 3, 48(30) 233; LE64-NEXT: add 3, 3, 4 234; LE64-NEXT: stw 4, 52(30) 235; LE64-NEXT: extsw 3, 3 236; LE64-NEXT: bl leaf2 237; LE64-NEXT: nop 238; LE64-NEXT: lwz 3, 48(30) 239; LE64-NEXT: lwz 4, 52(30) 240; LE64-NEXT: sub 3, 3, 4 241; LE64-NEXT: extsw 3, 3 242; LE64-NEXT: bl leaf2 243; LE64-NEXT: nop 244; LE64-NEXT: addi 1, 1, 48 245; LE64-NEXT: ld 0, 16(1) 246; LE64-NEXT: ld 30, -16(1) # 8-byte Folded Reload 247; LE64-NEXT: mtlr 0 248; LE64-NEXT: blr 249entry: 250 %f.addr = call ptr @llvm.frameaddress(i32 1) 251 %a.addr = getelementptr ptr, ptr %f.addr, i32 6 252 %b.addr = getelementptr i32, ptr %a.addr, i32 1 253 store i32 %a, ptr %a.addr, align 4 254 store i32 %b, ptr %b.addr, align 4 255 %0 = load i32, ptr %a.addr, align 4 256 %1 = load i32, ptr %b.addr, align 4 257 %add = add nsw i32 %0, %1 258 call void @leaf2(i32 signext %add) 259 %2 = load i32, ptr %a.addr, align 4 260 %3 = load i32, ptr %b.addr, align 4 261 %sub = sub nsw i32 %2, %3 262 call void @leaf2(i32 signext %sub) 263 ret void 264} 265 266define signext i32 @leaf1_redzone(i32 signext %a, i32 signext %b) #1 { 267; AIX64-LABEL: leaf1_redzone: 268; AIX64: # %bb.0: # %entry 269; AIX64-NEXT: stw 3, -4(1) 270; AIX64-NEXT: add 3, 3, 4 271; AIX64-NEXT: extsw 3, 3 272; AIX64-NEXT: stw 4, -8(1) 273; AIX64-NEXT: blr 274; 275; AIX32-LABEL: leaf1_redzone: 276; AIX32: # %bb.0: # %entry 277; AIX32-NEXT: stw 3, -4(1) 278; AIX32-NEXT: add 3, 3, 4 279; AIX32-NEXT: stw 4, -8(1) 280; AIX32-NEXT: blr 281; 282; LE64-LABEL: leaf1_redzone: 283; LE64: # %bb.0: # %entry 284; LE64-NEXT: stw 3, -4(1) 285; LE64-NEXT: add 3, 3, 4 286; LE64-NEXT: stw 4, -8(1) 287; LE64-NEXT: extsw 3, 3 288; LE64-NEXT: blr 289entry: 290 %a.addr = alloca i32, align 4 291 %b.addr = alloca i32, align 4 292 store i32 %a, ptr %a.addr, align 4 293 store i32 %b, ptr %b.addr, align 4 294 %0 = load i32, ptr %a.addr, align 4 295 %1 = load i32, ptr %b.addr, align 4 296 %add = add nsw i32 %0, %1 297 ret i32 %add 298} 299 300define void @nonleaf1_redzone(i32 signext %a, i32 signext %b) #1 { 301; AIX64-LABEL: nonleaf1_redzone: 302; AIX64: # %bb.0: # %entry 303; AIX64-NEXT: mflr 0 304; AIX64-NEXT: stdu 1, -128(1) 305; AIX64-NEXT: std 0, 144(1) 306; AIX64-NEXT: stw 3, 124(1) 307; AIX64-NEXT: add 3, 3, 4 308; AIX64-NEXT: extsw 3, 3 309; AIX64-NEXT: stw 4, 120(1) 310; AIX64-NEXT: bl .leaf2[PR] 311; AIX64-NEXT: nop 312; AIX64-NEXT: lwz 3, 124(1) 313; AIX64-NEXT: lwz 4, 120(1) 314; AIX64-NEXT: sub 3, 3, 4 315; AIX64-NEXT: extsw 3, 3 316; AIX64-NEXT: bl .leaf2[PR] 317; AIX64-NEXT: nop 318; AIX64-NEXT: addi 1, 1, 128 319; AIX64-NEXT: ld 0, 16(1) 320; AIX64-NEXT: mtlr 0 321; AIX64-NEXT: blr 322; 323; AIX32-LABEL: nonleaf1_redzone: 324; AIX32: # %bb.0: # %entry 325; AIX32-NEXT: mflr 0 326; AIX32-NEXT: stwu 1, -64(1) 327; AIX32-NEXT: stw 0, 72(1) 328; AIX32-NEXT: stw 3, 60(1) 329; AIX32-NEXT: add 3, 3, 4 330; AIX32-NEXT: stw 4, 56(1) 331; AIX32-NEXT: bl .leaf2[PR] 332; AIX32-NEXT: nop 333; AIX32-NEXT: lwz 3, 60(1) 334; AIX32-NEXT: lwz 4, 56(1) 335; AIX32-NEXT: sub 3, 3, 4 336; AIX32-NEXT: bl .leaf2[PR] 337; AIX32-NEXT: nop 338; AIX32-NEXT: addi 1, 1, 64 339; AIX32-NEXT: lwz 0, 8(1) 340; AIX32-NEXT: mtlr 0 341; AIX32-NEXT: blr 342; 343; LE64-LABEL: nonleaf1_redzone: 344; LE64: # %bb.0: # %entry 345; LE64-NEXT: mflr 0 346; LE64-NEXT: stdu 1, -48(1) 347; LE64-NEXT: std 0, 64(1) 348; LE64-NEXT: stw 3, 44(1) 349; LE64-NEXT: add 3, 3, 4 350; LE64-NEXT: extsw 3, 3 351; LE64-NEXT: stw 4, 40(1) 352; LE64-NEXT: bl leaf2 353; LE64-NEXT: nop 354; LE64-NEXT: lwz 3, 44(1) 355; LE64-NEXT: lwz 4, 40(1) 356; LE64-NEXT: sub 3, 3, 4 357; LE64-NEXT: extsw 3, 3 358; LE64-NEXT: bl leaf2 359; LE64-NEXT: nop 360; LE64-NEXT: addi 1, 1, 48 361; LE64-NEXT: ld 0, 16(1) 362; LE64-NEXT: mtlr 0 363; LE64-NEXT: blr 364entry: 365 %a.addr = alloca i32, align 4 366 %b.addr = alloca i32, align 4 367 store i32 %a, ptr %a.addr, align 4 368 store i32 %b, ptr %b.addr, align 4 369 %0 = load i32, ptr %a.addr, align 4 370 %1 = load i32, ptr %b.addr, align 4 371 %add = add nsw i32 %0, %1 372 call void @leaf2(i32 signext %add) 373 %2 = load i32, ptr %a.addr, align 4 374 %3 = load i32, ptr %b.addr, align 4 375 %sub = sub nsw i32 %2, %3 376 call void @leaf2(i32 signext %sub) 377 ret void 378} 379 380define signext i32 @leaf3_redzone(i32 signext %a, i32 signext %b) #1 { 381; AIX64-LABEL: leaf3_redzone: 382; AIX64: # %bb.0: # %entry 383; AIX64-NEXT: stdu 1, -48(1) 384; AIX64-NEXT: ld 6, 0(1) 385; AIX64-NEXT: mr 5, 3 386; AIX64-NEXT: add 3, 5, 4 387; AIX64-NEXT: extsw 3, 3 388; AIX64-NEXT: stw 5, 48(6) 389; AIX64-NEXT: stw 4, 52(6) 390; AIX64-NEXT: addi 1, 1, 48 391; AIX64-NEXT: blr 392; 393; AIX32-LABEL: leaf3_redzone: 394; AIX32: # %bb.0: # %entry 395; AIX32-NEXT: stwu 1, -32(1) 396; AIX32-NEXT: lwz 6, 0(1) 397; AIX32-NEXT: mr 5, 3 398; AIX32-NEXT: add 3, 3, 4 399; AIX32-NEXT: stw 5, 24(6) 400; AIX32-NEXT: stw 4, 28(6) 401; AIX32-NEXT: addi 1, 1, 32 402; AIX32-NEXT: blr 403; 404; LE64-LABEL: leaf3_redzone: 405; LE64: # %bb.0: # %entry 406; LE64-NEXT: stdu 1, -32(1) 407; LE64-NEXT: ld 5, 0(1) 408; LE64-NEXT: stw 3, 48(5) 409; LE64-NEXT: add 3, 3, 4 410; LE64-NEXT: stw 4, 52(5) 411; LE64-NEXT: extsw 3, 3 412; LE64-NEXT: addi 1, 1, 32 413; LE64-NEXT: blr 414entry: 415 %f.addr = call ptr @llvm.frameaddress(i32 1) 416 %a.addr = getelementptr ptr, ptr %f.addr, i32 6 417 %b.addr = getelementptr i32, ptr %a.addr, i32 1 418 store i32 %a, ptr %a.addr, align 4 419 store i32 %b, ptr %b.addr, align 4 420 %0 = load i32, ptr %a.addr, align 4 421 %1 = load i32, ptr %b.addr, align 4 422 %add = add nsw i32 %0, %1 423 ret i32 %add 424} 425 426define void @nonleaf2_redzone(i32 signext %a, i32 signext %b) #1 { 427; AIX64-LABEL: nonleaf2_redzone: 428; AIX64: # %bb.0: # %entry 429; AIX64-NEXT: mflr 0 430; AIX64-NEXT: stdu 1, -128(1) 431; AIX64-NEXT: std 0, 144(1) 432; AIX64-NEXT: std 31, 120(1) # 8-byte Folded Spill 433; AIX64-NEXT: add 5, 3, 4 434; AIX64-NEXT: ld 31, 0(1) 435; AIX64-NEXT: extsw 5, 5 436; AIX64-NEXT: stw 3, 48(31) 437; AIX64-NEXT: mr 3, 5 438; AIX64-NEXT: stw 4, 52(31) 439; AIX64-NEXT: bl .leaf2[PR] 440; AIX64-NEXT: nop 441; AIX64-NEXT: lwz 3, 48(31) 442; AIX64-NEXT: lwz 4, 52(31) 443; AIX64-NEXT: sub 3, 3, 4 444; AIX64-NEXT: extsw 3, 3 445; AIX64-NEXT: bl .leaf2[PR] 446; AIX64-NEXT: nop 447; AIX64-NEXT: ld 31, 120(1) # 8-byte Folded Reload 448; AIX64-NEXT: addi 1, 1, 128 449; AIX64-NEXT: ld 0, 16(1) 450; AIX64-NEXT: mtlr 0 451; AIX64-NEXT: blr 452; 453; AIX32-LABEL: nonleaf2_redzone: 454; AIX32: # %bb.0: # %entry 455; AIX32-NEXT: mflr 0 456; AIX32-NEXT: stwu 1, -64(1) 457; AIX32-NEXT: stw 0, 72(1) 458; AIX32-NEXT: add 5, 3, 4 459; AIX32-NEXT: stw 31, 60(1) # 4-byte Folded Spill 460; AIX32-NEXT: lwz 31, 0(1) 461; AIX32-NEXT: stw 3, 24(31) 462; AIX32-NEXT: mr 3, 5 463; AIX32-NEXT: stw 4, 28(31) 464; AIX32-NEXT: bl .leaf2[PR] 465; AIX32-NEXT: nop 466; AIX32-NEXT: lwz 3, 24(31) 467; AIX32-NEXT: lwz 4, 28(31) 468; AIX32-NEXT: sub 3, 3, 4 469; AIX32-NEXT: bl .leaf2[PR] 470; AIX32-NEXT: nop 471; AIX32-NEXT: lwz 31, 60(1) # 4-byte Folded Reload 472; AIX32-NEXT: addi 1, 1, 64 473; AIX32-NEXT: lwz 0, 8(1) 474; AIX32-NEXT: mtlr 0 475; AIX32-NEXT: blr 476; 477; LE64-LABEL: nonleaf2_redzone: 478; LE64: # %bb.0: # %entry 479; LE64-NEXT: mflr 0 480; LE64-NEXT: std 30, -16(1) # 8-byte Folded Spill 481; LE64-NEXT: stdu 1, -48(1) 482; LE64-NEXT: std 0, 64(1) 483; LE64-NEXT: ld 30, 0(1) 484; LE64-NEXT: stw 3, 48(30) 485; LE64-NEXT: add 3, 3, 4 486; LE64-NEXT: stw 4, 52(30) 487; LE64-NEXT: extsw 3, 3 488; LE64-NEXT: bl leaf2 489; LE64-NEXT: nop 490; LE64-NEXT: lwz 3, 48(30) 491; LE64-NEXT: lwz 4, 52(30) 492; LE64-NEXT: sub 3, 3, 4 493; LE64-NEXT: extsw 3, 3 494; LE64-NEXT: bl leaf2 495; LE64-NEXT: nop 496; LE64-NEXT: addi 1, 1, 48 497; LE64-NEXT: ld 0, 16(1) 498; LE64-NEXT: ld 30, -16(1) # 8-byte Folded Reload 499; LE64-NEXT: mtlr 0 500; LE64-NEXT: blr 501entry: 502 %f.addr = call ptr @llvm.frameaddress(i32 1) 503 %a.addr = getelementptr ptr, ptr %f.addr, i32 6 504 %b.addr = getelementptr i32, ptr %a.addr, i32 1 505 store i32 %a, ptr %a.addr, align 4 506 store i32 %b, ptr %b.addr, align 4 507 %0 = load i32, ptr %a.addr, align 4 508 %1 = load i32, ptr %b.addr, align 4 509 %add = add nsw i32 %0, %1 510 call void @leaf2(i32 signext %add) 511 %2 = load i32, ptr %a.addr, align 4 512 %3 = load i32, ptr %b.addr, align 4 513 %sub = sub nsw i32 %2, %3 514 call void @leaf2(i32 signext %sub) 515 ret void 516} 517 518attributes #0 = { noredzone nounwind noinline } 519attributes #1 = { nounwind noinline } 520