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