| # RUN: llc -march=mips -mcpu=mips32r2 -mattr=+micromips %s -o - \ |
| # RUN: -start-after=block-placement | FileCheck %s |
| |
| # Test that the micromips jal instruction is correctly handled by the delay slot |
| # filler by converting it to a short delay slot for the li instruction. |
| |
| # CHECK-LABEL: caller13 |
| # CHECK: jals callee13 |
| # CHECK-NEXT: li16 |
| |
| --- | |
| declare i32 @callee13(i32, i32) |
| |
| define i32 @caller13() { |
| entry: |
| %call = tail call i32 (i32, i32) @callee13(i32 1, i32 2) |
| ret i32 %call |
| } |
| |
| ... |
| --- |
| name: caller13 |
| alignment: 2 |
| exposesReturnsTwice: false |
| legalized: false |
| regBankSelected: false |
| selected: false |
| tracksRegLiveness: true |
| registers: |
| liveins: |
| frameInfo: |
| isFrameAddressTaken: false |
| isReturnAddressTaken: false |
| hasStackMap: false |
| hasPatchPoint: false |
| stackSize: 24 |
| offsetAdjustment: 0 |
| maxAlignment: 4 |
| adjustsStack: true |
| hasCalls: true |
| stackProtector: '' |
| maxCallFrameSize: 16 |
| hasOpaqueSPAdjustment: false |
| hasVAStart: false |
| hasMustTailInVarArgFunc: false |
| savePoint: '' |
| restorePoint: '' |
| fixedStack: |
| stack: |
| - { id: 0, name: '', type: spill-slot, offset: -4, size: 4, alignment: 4, |
| stack-id: 0, callee-saved-register: '$ra', callee-saved-restored: true, |
| debug-info-variable: '', debug-info-expression: '', |
| debug-info-location: '' } |
| constants: |
| body: | |
| bb.0.entry: |
| liveins: $ra |
| |
| $sp = ADDiu $sp, -24 |
| CFI_INSTRUCTION def_cfa_offset 24 |
| SW killed $ra, $sp, 20 :: (store 4 into %stack.0) |
| CFI_INSTRUCTION offset $ra_64, -4 |
| $a0 = LI16_MM 1 |
| $a1 = LI16_MM 2 |
| JAL_MM @callee13, csr_o32, implicit-def dead $ra, implicit killed $a0, implicit killed $a1, implicit-def $sp, implicit-def $v0 |
| $ra = LW $sp, 20 :: (load 4 from %stack.0) |
| $sp = ADDiu $sp, 24 |
| PseudoReturn undef $ra, implicit $v0 |
| |
| |
| ... |