309 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 32# RUN: llc -run-pass=cfi-fixup %s -o - | FileCheck %s3--- |4 source_filename = "cfi-fixup.ll"5 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"6 target triple = "aarch64-linux"7 8 define i32 @f(i32 %x) #0 {9 entry:10 %p = alloca i8, i32 30000, align 111 switch i32 %x, label %if.end7 [12 i32 0, label %return13 i32 1, label %if.then214 i32 2, label %if.then515 ]16 17 if.then2: ; preds = %entry18 %call = tail call i32 @g1(i32 1)19 %add = add nsw i32 %call, 120 br label %return21 22 if.then5: ; preds = %entry23 %call6 = tail call i32 @g0(i32 2)24 %sub = sub nsw i32 1, %call625 br label %return26 27 if.end7: ; preds = %entry28 br label %return29 30 return: ; preds = %if.end7, %if.then5, %if.then2, %entry31 %retval.0 = phi i32 [ %add, %if.then2 ], [ %sub, %if.then5 ], [ 0, %if.end7 ], [ 1, %entry ]32 ret i32 %retval.033 }34 35 declare i32 @g1(i32)36 37 declare i32 @g0(i32)38 39 attributes #0 = { uwtable "probe-stack"="inline-asm" }40 41...42---43name: f44alignment: 445exposesReturnsTwice: false46legalized: false47regBankSelected: false48selected: false49failedISel: false50tracksRegLiveness: true51hasWinCFI: false52callsEHReturn: false53callsUnwindInit: false54hasEHContTarget: false55hasEHScopes: false56hasEHFunclets: false57isOutlined: false58debugInstrRef: false59failsVerification: false60tracksDebugUserValues: true61registers: []62liveins:63 - { reg: '$w0', virtual-reg: '' }64frameInfo:65 isFrameAddressTaken: false66 isReturnAddressTaken: false67 hasStackMap: false68 hasPatchPoint: false69 stackSize: 3001670 offsetAdjustment: 071 maxAlignment: 872 adjustsStack: true73 hasCalls: true74 stackProtector: ''75 functionContext: ''76 maxCallFrameSize: 077 cvBytesOfCalleeSavedRegisters: 078 hasOpaqueSPAdjustment: false79 hasVAStart: false80 hasMustTailInVarArgFunc: false81 hasTailCall: false82 localFrameSize: 3000083 savePoint: []84 restorePoint: []85fixedStack: []86stack:87 - { id: 0, name: p, type: default, offset: -30016, size: 30000, alignment: 1,88 stack-id: default, callee-saved-register: '', callee-saved-restored: true,89 local-offset: -30000, debug-info-variable: '', debug-info-expression: '',90 debug-info-location: '' }91 - { id: 1, name: '', type: spill-slot, offset: -8, size: 8, alignment: 8,92 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true,93 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }94 - { id: 2, name: '', type: spill-slot, offset: -16, size: 8, alignment: 8,95 stack-id: default, callee-saved-register: '$fp', callee-saved-restored: true,96 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }97entry_values: []98callSites: []99debugValueSubstitutions: []100constants: []101machineFunctionInfo:102 hasRedZone: false103body: |104 ; CHECK-LABEL: name: f105 ; CHECK: bb.0.entry:106 ; CHECK-NEXT: successors: %bb.1(0x80000000)107 ; CHECK-NEXT: liveins: $w0, $lr, $fp108 ; CHECK-NEXT: {{ $}}109 ; CHECK-NEXT: early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1)110 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 16111 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w30, -8112 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION offset $w29, -16113 ; CHECK-NEXT: $x9 = frame-setup SUBXri $sp, 7, 12114 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa $w9, 28688115 ; CHECK-NEXT: {{ $}}116 ; CHECK-NEXT: bb.1.entry:117 ; CHECK-NEXT: successors: %bb.2(0x40000000), %bb.1(0x40000000)118 ; CHECK-NEXT: liveins: $x9119 ; CHECK-NEXT: {{ $}}120 ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 1, 12121 ; CHECK-NEXT: $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv122 ; CHECK-NEXT: frame-setup STRXui $xzr, $sp, 0123 ; CHECK-NEXT: frame-setup Bcc 1, %bb.1, implicit killed $nzcv124 ; CHECK-NEXT: {{ $}}125 ; CHECK-NEXT: bb.2.entry:126 ; CHECK-NEXT: successors: %bb.6(0x20000000), %bb.3(0x60000000)127 ; CHECK-NEXT: liveins: $w0128 ; CHECK-NEXT: {{ $}}129 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_register $wsp130 ; CHECK-NEXT: $sp = frame-setup SUBXri $sp, 1328, 0131 ; CHECK-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 30016132 ; CHECK-NEXT: CFI_INSTRUCTION remember_state133 ; CHECK-NEXT: frame-setup STRXui $xzr, $sp, 0134 ; CHECK-NEXT: CBZW renamable $w0, %bb.6135 ; CHECK-NEXT: {{ $}}136 ; CHECK-NEXT: bb.3.entry:137 ; CHECK-NEXT: successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555)138 ; CHECK-NEXT: liveins: $w0139 ; CHECK-NEXT: {{ $}}140 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv141 ; CHECK-NEXT: Bcc 0, %bb.7, implicit killed $nzcv142 ; CHECK-NEXT: {{ $}}143 ; CHECK-NEXT: bb.4.entry:144 ; CHECK-NEXT: successors: %bb.5(0x40000000), %bb.8(0x40000000)145 ; CHECK-NEXT: liveins: $w0146 ; CHECK-NEXT: {{ $}}147 ; CHECK-NEXT: dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv148 ; CHECK-NEXT: Bcc 1, %bb.8, implicit killed $nzcv149 ; CHECK-NEXT: {{ $}}150 ; CHECK-NEXT: bb.5.if.then2:151 ; CHECK-NEXT: liveins: $w0152 ; CHECK-NEXT: {{ $}}153 ; CHECK-NEXT: BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0154 ; CHECK-NEXT: renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0155 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12156 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344157 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0158 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16159 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)160 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0161 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30162 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29163 ; CHECK-NEXT: RET undef $lr, implicit killed $w0164 ; CHECK-NEXT: {{ $}}165 ; CHECK-NEXT: bb.6:166 ; CHECK-NEXT: CFI_INSTRUCTION restore_state167 ; CHECK-NEXT: CFI_INSTRUCTION remember_state168 ; CHECK-NEXT: renamable $w0 = MOVZWi 1, 0169 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12170 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344171 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0172 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16173 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)174 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0175 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30176 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29177 ; CHECK-NEXT: RET undef $lr, implicit killed $w0178 ; CHECK-NEXT: {{ $}}179 ; CHECK-NEXT: bb.7.if.then5:180 ; CHECK-NEXT: liveins: $w0181 ; CHECK-NEXT: {{ $}}182 ; CHECK-NEXT: CFI_INSTRUCTION restore_state183 ; CHECK-NEXT: CFI_INSTRUCTION remember_state184 ; CHECK-NEXT: BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0185 ; CHECK-NEXT: renamable $w8 = MOVZWi 1, 0186 ; CHECK-NEXT: $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0187 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12188 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344189 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0190 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16191 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)192 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0193 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30194 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29195 ; CHECK-NEXT: RET undef $lr, implicit killed $w0196 ; CHECK-NEXT: {{ $}}197 ; CHECK-NEXT: bb.8.if.end7:198 ; CHECK-NEXT: CFI_INSTRUCTION restore_state199 ; CHECK-NEXT: $w0 = ORRWrs $wzr, $wzr, 0200 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 7, 12201 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 1344202 ; CHECK-NEXT: $sp = frame-destroy ADDXri $sp, 1328, 0203 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 16204 ; CHECK-NEXT: early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)205 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION def_cfa_offset 0206 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w30207 ; CHECK-NEXT: frame-destroy CFI_INSTRUCTION restore $w29208 ; CHECK-NEXT: RET undef $lr, implicit killed $w0209 bb.0.entry:210 successors: %bb.1(0x80000000)211 liveins: $w0, $lr, $fp212 213 early-clobber $sp = frame-setup STPXpre killed $fp, killed $lr, $sp, -2 :: (store (s64) into %stack.2), (store (s64) into %stack.1)214 frame-setup CFI_INSTRUCTION def_cfa_offset 16215 frame-setup CFI_INSTRUCTION offset $w30, -8216 frame-setup CFI_INSTRUCTION offset $w29, -16217 $x9 = frame-setup SUBXri $sp, 7, 12218 frame-setup CFI_INSTRUCTION def_cfa $w9, 28688219 220 bb.1.entry:221 successors: %bb.2(0x40000000), %bb.1(0x40000000)222 liveins: $x9223 224 $sp = frame-setup SUBXri $sp, 1, 12225 $xzr = frame-setup SUBSXrx64 $sp, $x9, 24, implicit-def $nzcv226 frame-setup STRXui $xzr, $sp, 0227 frame-setup Bcc 1, %bb.1, implicit killed $nzcv228 229 bb.2.entry:230 successors: %bb.6(0x20000000), %bb.3(0x60000000)231 liveins: $w0232 233 frame-setup CFI_INSTRUCTION def_cfa_register $wsp234 $sp = frame-setup SUBXri $sp, 1328, 0235 frame-setup CFI_INSTRUCTION def_cfa_offset 30016236 frame-setup STRXui $xzr, $sp, 0237 CBZW renamable $w0, %bb.6238 239 bb.3.entry:240 successors: %bb.7(0x2aaaaaab), %bb.4(0x55555555)241 liveins: $w0242 243 dead $wzr = SUBSWri renamable $w0, 2, 0, implicit-def $nzcv244 Bcc 0, %bb.7, implicit killed $nzcv245 246 bb.4.entry:247 successors: %bb.5(0x40000000), %bb.8(0x40000000)248 liveins: $w0249 250 dead $wzr = SUBSWri renamable $w0, 1, 0, implicit-def $nzcv251 Bcc 1, %bb.8, implicit killed $nzcv252 253 bb.5.if.then2:254 liveins: $w0255 256 BL @g1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0257 renamable $w0 = nsw ADDWri killed renamable $w0, 1, 0258 $sp = frame-destroy ADDXri $sp, 7, 12259 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344260 $sp = frame-destroy ADDXri $sp, 1328, 0261 frame-destroy CFI_INSTRUCTION def_cfa_offset 16262 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)263 frame-destroy CFI_INSTRUCTION def_cfa_offset 0264 frame-destroy CFI_INSTRUCTION restore $w30265 frame-destroy CFI_INSTRUCTION restore $w29266 RET undef $lr, implicit killed $w0267 268 bb.6:269 renamable $w0 = MOVZWi 1, 0270 $sp = frame-destroy ADDXri $sp, 7, 12271 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344272 $sp = frame-destroy ADDXri $sp, 1328, 0273 frame-destroy CFI_INSTRUCTION def_cfa_offset 16274 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)275 frame-destroy CFI_INSTRUCTION def_cfa_offset 0276 frame-destroy CFI_INSTRUCTION restore $w30277 frame-destroy CFI_INSTRUCTION restore $w29278 RET undef $lr, implicit killed $w0279 280 bb.7.if.then5:281 liveins: $w0282 283 BL @g0, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit-def $sp, implicit-def $w0284 renamable $w8 = MOVZWi 1, 0285 $w0 = SUBWrs killed renamable $w8, killed renamable $w0, 0286 $sp = frame-destroy ADDXri $sp, 7, 12287 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344288 $sp = frame-destroy ADDXri $sp, 1328, 0289 frame-destroy CFI_INSTRUCTION def_cfa_offset 16290 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)291 frame-destroy CFI_INSTRUCTION def_cfa_offset 0292 frame-destroy CFI_INSTRUCTION restore $w30293 frame-destroy CFI_INSTRUCTION restore $w29294 RET undef $lr, implicit killed $w0295 296 bb.8.if.end7:297 $w0 = ORRWrs $wzr, $wzr, 0298 $sp = frame-destroy ADDXri $sp, 7, 12299 frame-destroy CFI_INSTRUCTION def_cfa_offset 1344300 $sp = frame-destroy ADDXri $sp, 1328, 0301 frame-destroy CFI_INSTRUCTION def_cfa_offset 16302 early-clobber $sp, $fp, $lr = frame-destroy LDPXpost $sp, 2 :: (load (s64) from %stack.2), (load (s64) from %stack.1)303 frame-destroy CFI_INSTRUCTION def_cfa_offset 0304 frame-destroy CFI_INSTRUCTION restore $w30305 frame-destroy CFI_INSTRUCTION restore $w29306 RET undef $lr, implicit killed $w0307 308...309