1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-pc-linux | FileCheck %s -check-prefix=LINUX -check-prefix=CHECK 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=i686-apple-darwin | FileCheck %s -check-prefix=DARWIN -check-prefix=CHECK 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdeclare i32 @__gxx_personality_v0(...) 5*9880d681SAndroid Build Coastguard Workerdeclare void @good(i32 %a, i32 %b, i32 %c, i32 %d) 6*9880d681SAndroid Build Coastguard Workerdeclare void @large(i32 %a, i32 %b, i32 %c, i32 %d, i32 %e, i32 %f) 7*9880d681SAndroid Build Coastguard Workerdeclare void @empty() 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker; When we use an invoke, we expect a .cfi_escape GNU_ARGS_SIZE 10*9880d681SAndroid Build Coastguard Worker; with size 16 before the invocation. Without FP, we also expect 11*9880d681SAndroid Build Coastguard Worker; .cfi_adjust_cfa_offset after each push. 12*9880d681SAndroid Build Coastguard Worker; Darwin should not generate pushes in either circumstance. 13*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1_nofp: 14*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 15*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $4 16*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 17*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 18*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $3 19*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 20*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 21*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $2 22*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 23*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 24*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $1 25*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 26*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 27*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: call 28*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $16, %esp 29*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_adjust_cfa_offset -16 30*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: .cfi_escape 31*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: pushl 32*9880d681SAndroid Build Coastguard Workerdefine void @test1_nofp() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 35*9880d681SAndroid Build Coastguard Worker to label %continue unwind label %cleanup 36*9880d681SAndroid Build Coastguard Workercontinue: 37*9880d681SAndroid Build Coastguard Worker ret void 38*9880d681SAndroid Build Coastguard Workercleanup: 39*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 40*9880d681SAndroid Build Coastguard Worker cleanup 41*9880d681SAndroid Build Coastguard Worker ret void 42*9880d681SAndroid Build Coastguard Worker} 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test1_fp: 45*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 46*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $4 47*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $3 48*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $2 49*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $1 50*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: call 51*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $16, %esp 52*9880d681SAndroid Build Coastguard Worker; DARWIN: pushl %ebp 53*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: .cfi_escape 54*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: pushl 55*9880d681SAndroid Build Coastguard Workerdefine void @test1_fp() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 56*9880d681SAndroid Build Coastguard Workerentry: 57*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 58*9880d681SAndroid Build Coastguard Worker to label %continue unwind label %cleanup 59*9880d681SAndroid Build Coastguard Workercontinue: 60*9880d681SAndroid Build Coastguard Worker ret void 61*9880d681SAndroid Build Coastguard Workercleanup: 62*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 63*9880d681SAndroid Build Coastguard Worker cleanup 64*9880d681SAndroid Build Coastguard Worker ret void 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; If the function has no handlers, we don't need to generate GNU_ARGS_SIZE, 68*9880d681SAndroid Build Coastguard Worker; even if it has an unwind table. Without FP, we still need cfi_adjust_cfa_offset, 69*9880d681SAndroid Build Coastguard Worker; so darwin should not generate pushes. 70*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2_nofp: 71*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_escape 72*9880d681SAndroid Build Coastguard Worker; LINUX: pushl $4 73*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 74*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 75*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $3 76*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 77*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 78*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $2 79*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 80*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 81*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $1 82*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 83*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 84*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: call 85*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $28, %esp 86*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_adjust_cfa_offset -16 87*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: .cfi_escape 88*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: pushl 89*9880d681SAndroid Build Coastguard Workerdefine void @test2_nofp() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 90*9880d681SAndroid Build Coastguard Workerentry: 91*9880d681SAndroid Build Coastguard Worker call void @good(i32 1, i32 2, i32 3, i32 4) 92*9880d681SAndroid Build Coastguard Worker ret void 93*9880d681SAndroid Build Coastguard Worker} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test2_fp: 96*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .cfi_escape 97*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: .cfi_adjust_cfa_offset 98*9880d681SAndroid Build Coastguard Worker; CHECK: pushl $4 99*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushl $3 100*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushl $2 101*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: pushl $1 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call 103*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addl $24, %esp 104*9880d681SAndroid Build Coastguard Workerdefine void @test2_fp() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 105*9880d681SAndroid Build Coastguard Workerentry: 106*9880d681SAndroid Build Coastguard Worker call void @good(i32 1, i32 2, i32 3, i32 4) 107*9880d681SAndroid Build Coastguard Worker ret void 108*9880d681SAndroid Build Coastguard Worker} 109*9880d681SAndroid Build Coastguard Worker 110*9880d681SAndroid Build Coastguard Worker; If we did not end up using any pushes, no need for GNU_ARGS_SIZE or 111*9880d681SAndroid Build Coastguard Worker; cfi_adjust_cfa_offset. 112*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3_nofp: 113*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_escape 114*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_adjust_cfa_offset 115*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: pushl 116*9880d681SAndroid Build Coastguard Worker; LINUX: retl 117*9880d681SAndroid Build Coastguard Workerdefine void @test3_nofp() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 118*9880d681SAndroid Build Coastguard Workerentry: 119*9880d681SAndroid Build Coastguard Worker invoke void @empty() 120*9880d681SAndroid Build Coastguard Worker to label %continue unwind label %cleanup 121*9880d681SAndroid Build Coastguard Workercontinue: 122*9880d681SAndroid Build Coastguard Worker ret void 123*9880d681SAndroid Build Coastguard Workercleanup: 124*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 125*9880d681SAndroid Build Coastguard Worker cleanup 126*9880d681SAndroid Build Coastguard Worker ret void 127*9880d681SAndroid Build Coastguard Worker} 128*9880d681SAndroid Build Coastguard Worker 129*9880d681SAndroid Build Coastguard Worker; If we did not end up using any pushes, no need for GNU_ARGS_SIZE or 130*9880d681SAndroid Build Coastguard Worker; cfi_adjust_cfa_offset. 131*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test3_fp: 132*9880d681SAndroid Build Coastguard Worker; LINUX: pushl %ebp 133*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_escape 134*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_adjust_cfa_offset 135*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: pushl 136*9880d681SAndroid Build Coastguard Worker; LINUX: retl 137*9880d681SAndroid Build Coastguard Workerdefine void @test3_fp() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 138*9880d681SAndroid Build Coastguard Workerentry: 139*9880d681SAndroid Build Coastguard Worker invoke void @empty() 140*9880d681SAndroid Build Coastguard Worker to label %continue unwind label %cleanup 141*9880d681SAndroid Build Coastguard Workercontinue: 142*9880d681SAndroid Build Coastguard Worker ret void 143*9880d681SAndroid Build Coastguard Workercleanup: 144*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 145*9880d681SAndroid Build Coastguard Worker cleanup 146*9880d681SAndroid Build Coastguard Worker ret void 147*9880d681SAndroid Build Coastguard Worker} 148*9880d681SAndroid Build Coastguard Worker 149*9880d681SAndroid Build Coastguard Worker; Different sized stacks need different GNU_ARGS_SIZEs 150*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test4: 151*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 152*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $4 153*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $3 154*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $2 155*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $1 156*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: call 157*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $16, %esp 158*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x20 159*9880d681SAndroid Build Coastguard Worker; LINUX: subl $8, %esp 160*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $11 161*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $10 162*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $9 163*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $8 164*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $7 165*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $6 166*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: calll large 167*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $32, %esp 168*9880d681SAndroid Build Coastguard Workerdefine void @test4() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 169*9880d681SAndroid Build Coastguard Workerentry: 170*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 171*9880d681SAndroid Build Coastguard Worker to label %continue1 unwind label %cleanup 172*9880d681SAndroid Build Coastguard Workercontinue1: 173*9880d681SAndroid Build Coastguard Worker invoke void @large(i32 6, i32 7, i32 8, i32 9, i32 10, i32 11) 174*9880d681SAndroid Build Coastguard Worker to label %continue2 unwind label %cleanup 175*9880d681SAndroid Build Coastguard Workercontinue2: 176*9880d681SAndroid Build Coastguard Worker ret void 177*9880d681SAndroid Build Coastguard Workercleanup: 178*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 179*9880d681SAndroid Build Coastguard Worker cleanup 180*9880d681SAndroid Build Coastguard Worker ret void 181*9880d681SAndroid Build Coastguard Worker} 182*9880d681SAndroid Build Coastguard Worker 183*9880d681SAndroid Build Coastguard Worker; If we did use pushes, we need to reset GNU_ARGS_SIZE before a call 184*9880d681SAndroid Build Coastguard Worker; without parameters, but don't need to adjust the cfa offset 185*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5_nofp: 186*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 187*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $4 188*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 189*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 190*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $3 191*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 192*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 193*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $2 194*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 195*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 196*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $1 197*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: Ltmp{{[0-9]+}}: 198*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: .cfi_adjust_cfa_offset 4 199*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: call 200*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $16, %esp 201*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_adjust_cfa_offset -16 202*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_adjust_cfa_offset 203*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x00 204*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_adjust_cfa_offset 205*9880d681SAndroid Build Coastguard Worker; LINUX: call 206*9880d681SAndroid Build Coastguard Workerdefine void @test5_nofp() #0 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 207*9880d681SAndroid Build Coastguard Workerentry: 208*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 209*9880d681SAndroid Build Coastguard Worker to label %continue1 unwind label %cleanup 210*9880d681SAndroid Build Coastguard Workercontinue1: 211*9880d681SAndroid Build Coastguard Worker invoke void @empty() 212*9880d681SAndroid Build Coastguard Worker to label %continue2 unwind label %cleanup 213*9880d681SAndroid Build Coastguard Workercontinue2: 214*9880d681SAndroid Build Coastguard Worker ret void 215*9880d681SAndroid Build Coastguard Workercleanup: 216*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 217*9880d681SAndroid Build Coastguard Worker cleanup 218*9880d681SAndroid Build Coastguard Worker ret void 219*9880d681SAndroid Build Coastguard Worker} 220*9880d681SAndroid Build Coastguard Worker 221*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test5_fp: 222*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 223*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $4 224*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $3 225*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $2 226*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: pushl $1 227*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: call 228*9880d681SAndroid Build Coastguard Worker; LINUX-NEXT: addl $16, %esp 229*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x00 230*9880d681SAndroid Build Coastguard Worker; LINUX-NOT: .cfi_adjust_cfa_offset 231*9880d681SAndroid Build Coastguard Worker; LINUX: call 232*9880d681SAndroid Build Coastguard Workerdefine void @test5_fp() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 233*9880d681SAndroid Build Coastguard Workerentry: 234*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 235*9880d681SAndroid Build Coastguard Worker to label %continue1 unwind label %cleanup 236*9880d681SAndroid Build Coastguard Workercontinue1: 237*9880d681SAndroid Build Coastguard Worker invoke void @empty() 238*9880d681SAndroid Build Coastguard Worker to label %continue2 unwind label %cleanup 239*9880d681SAndroid Build Coastguard Workercontinue2: 240*9880d681SAndroid Build Coastguard Worker ret void 241*9880d681SAndroid Build Coastguard Workercleanup: 242*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 243*9880d681SAndroid Build Coastguard Worker cleanup 244*9880d681SAndroid Build Coastguard Worker ret void 245*9880d681SAndroid Build Coastguard Worker} 246*9880d681SAndroid Build Coastguard Worker 247*9880d681SAndroid Build Coastguard Worker; FIXME: This is actually inefficient - we don't need to repeat the .cfi_escape twice. 248*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test6: 249*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 250*9880d681SAndroid Build Coastguard Worker; LINUX: call 251*9880d681SAndroid Build Coastguard Worker; LINUX: .cfi_escape 0x2e, 0x10 252*9880d681SAndroid Build Coastguard Worker; LINUX: call 253*9880d681SAndroid Build Coastguard Workerdefine void @test6() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 254*9880d681SAndroid Build Coastguard Workerentry: 255*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 256*9880d681SAndroid Build Coastguard Worker to label %continue1 unwind label %cleanup 257*9880d681SAndroid Build Coastguard Workercontinue1: 258*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 5, i32 6, i32 7, i32 8) 259*9880d681SAndroid Build Coastguard Worker to label %continue2 unwind label %cleanup 260*9880d681SAndroid Build Coastguard Workercontinue2: 261*9880d681SAndroid Build Coastguard Worker ret void 262*9880d681SAndroid Build Coastguard Workercleanup: 263*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 264*9880d681SAndroid Build Coastguard Worker cleanup 265*9880d681SAndroid Build Coastguard Worker ret void 266*9880d681SAndroid Build Coastguard Worker} 267*9880d681SAndroid Build Coastguard Worker 268*9880d681SAndroid Build Coastguard Worker; Darwin should generate pushes in the presense of FP and an unwind table, 269*9880d681SAndroid Build Coastguard Worker; but not FP and invoke. 270*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test7: 271*9880d681SAndroid Build Coastguard Worker; DARWIN: pushl %ebp 272*9880d681SAndroid Build Coastguard Worker; DARWIN: movl %esp, %ebp 273*9880d681SAndroid Build Coastguard Worker; DARWIN: .cfi_def_cfa_register %ebp 274*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: .cfi_adjust_cfa_offset 275*9880d681SAndroid Build Coastguard Worker; DARWIN: pushl $4 276*9880d681SAndroid Build Coastguard Worker; DARWIN-NEXT: pushl $3 277*9880d681SAndroid Build Coastguard Worker; DARWIN-NEXT: pushl $2 278*9880d681SAndroid Build Coastguard Worker; DARWIN-NEXT: pushl $1 279*9880d681SAndroid Build Coastguard Worker; DARWIN-NEXT: call 280*9880d681SAndroid Build Coastguard Workerdefine void @test7() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 281*9880d681SAndroid Build Coastguard Workerentry: 282*9880d681SAndroid Build Coastguard Worker call void @good(i32 1, i32 2, i32 3, i32 4) 283*9880d681SAndroid Build Coastguard Worker ret void 284*9880d681SAndroid Build Coastguard Worker} 285*9880d681SAndroid Build Coastguard Worker 286*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: test8: 287*9880d681SAndroid Build Coastguard Worker; DARWIN: pushl %ebp 288*9880d681SAndroid Build Coastguard Worker; DARWIN: movl %esp, %ebp 289*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: .cfi_adjust_cfa_offset 290*9880d681SAndroid Build Coastguard Worker; DARWIN-NOT: pushl 291*9880d681SAndroid Build Coastguard Workerdefine void @test8() #1 personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) { 292*9880d681SAndroid Build Coastguard Workerentry: 293*9880d681SAndroid Build Coastguard Worker invoke void @good(i32 1, i32 2, i32 3, i32 4) 294*9880d681SAndroid Build Coastguard Worker to label %continue unwind label %cleanup 295*9880d681SAndroid Build Coastguard Workercontinue: 296*9880d681SAndroid Build Coastguard Worker ret void 297*9880d681SAndroid Build Coastguard Workercleanup: 298*9880d681SAndroid Build Coastguard Worker landingpad { i8*, i32 } 299*9880d681SAndroid Build Coastguard Worker cleanup 300*9880d681SAndroid Build Coastguard Worker ret void 301*9880d681SAndroid Build Coastguard Worker} 302*9880d681SAndroid Build Coastguard Worker 303*9880d681SAndroid Build Coastguard Workerattributes #0 = { optsize } 304*9880d681SAndroid Build Coastguard Workerattributes #1 = { optsize "no-frame-pointer-elim"="true" } 305