xref: /llvm-project/llvm/test/CodeGen/ARM/machine-outliner-thunk.ll (revision 03141aa04acb2481652125c974bf3cfd125f4ce9)
10e4827aaSYvan Roux; RUN: llc -enable-machine-outliner -verify-machineinstrs -mtriple=armv7-- \
20e4827aaSYvan Roux; RUN: -stop-after=machine-outliner < %s | FileCheck %s --check-prefix=ARM
30e4827aaSYvan Roux; RUN: llc -enable-machine-outliner -verify-machineinstrs -mtriple=thumbv7-- \
40e4827aaSYvan Roux; RUN: -stop-after=machine-outliner < %s | FileCheck %s --check-prefix=THUMB
50e4827aaSYvan Roux; RUN: llc -enable-machine-outliner -verify-machineinstrs \
60e4827aaSYvan Roux; RUN: -mtriple=thumbv7-apple-darwin -stop-after=machine-outliner < %s \
70e4827aaSYvan Roux; RUN: | FileCheck %s --check-prefix=MACHO
80e4827aaSYvan Roux; RUN: llc -enable-machine-outliner -verify-machineinstrs -mtriple=thumbv5-- \
90e4827aaSYvan Roux; RUN: --stop-after=machine-outliner < %s | FileCheck %s --check-prefix=THUMB1
10*03141aa0SSam Parker; RUN: llc -verify-machineinstrs -mtriple=thumbv8m.main \
11*03141aa0SSam Parker; RUN: --stop-after=machine-outliner < %s | FileCheck %s --check-prefix=THUMB
120e4827aaSYvan Roux
130e4827aaSYvan Rouxdeclare i32 @thunk_called_fn(i32, i32, i32, i32)
140e4827aaSYvan Roux
15*03141aa0SSam Parkerdefine i32 @a() #0 {
160e4827aaSYvan Roux; ARM-LABEL: name:             a
170e4827aaSYvan Roux; ARM:       bb.0.entry:
180e4827aaSYvan Roux; ARM-NEXT:    liveins: $r11, $lr
190e4827aaSYvan Roux; ARM:         $sp = frame-setup STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r11, killed $lr
200e4827aaSYvan Roux; ARM-NEXT:    frame-setup CFI_INSTRUCTION def_cfa_offset 8
210e4827aaSYvan Roux; ARM-NEXT:    frame-setup CFI_INSTRUCTION offset $lr, -4
220e4827aaSYvan Roux; ARM-NEXT:    frame-setup CFI_INSTRUCTION offset $r11, -8
230e4827aaSYvan Roux; ARM-NEXT:    BL @OUTLINED_FUNCTION_0{{.*}}
240e4827aaSYvan Roux; ARM-NEXT:    renamable $r0 = ADDri killed renamable $r0, 8, 14 /* CC::al */, $noreg, $noreg
250e4827aaSYvan Roux; ARM-NEXT:    $sp = frame-destroy LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r11, def $pc, implicit killed $r0
260e4827aaSYvan Roux
270e4827aaSYvan Roux; THUMB-LABEL: name:             a
280e4827aaSYvan Roux; THUMB:       bb.0.entry:
290e4827aaSYvan Roux; THUMB-NEXT:    liveins: $r7, $lr
300e4827aaSYvan Roux; THUMB:         frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr
310e4827aaSYvan Roux; THUMB-NEXT:    frame-setup CFI_INSTRUCTION def_cfa_offset 8
320e4827aaSYvan Roux; THUMB-NEXT:    frame-setup CFI_INSTRUCTION offset $lr, -4
330e4827aaSYvan Roux; THUMB-NEXT:    frame-setup CFI_INSTRUCTION offset $r7, -8
340e4827aaSYvan Roux; THUMB-NEXT:    tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0{{.*}}
350e4827aaSYvan Roux; THUMB-NEXT:    renamable $r0, dead $cpsr = tADDi8 killed renamable $r0, 8, 14 /* CC::al */, $noreg
360e4827aaSYvan Roux; THUMB-NEXT:    tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
370e4827aaSYvan Roux
380e4827aaSYvan Roux; MACHO-LABEL: name:             a
390e4827aaSYvan Roux; MACHO:       bb.0.entry:
400e4827aaSYvan Roux; MACHO-NEXT:    liveins: $lr
410e4827aaSYvan Roux; MACHO:         early-clobber $sp = frame-setup t2STR_PRE killed $lr, $sp, -4, 14 /* CC::al */, $noreg
420e4827aaSYvan Roux; MACHO-NEXT:    frame-setup CFI_INSTRUCTION def_cfa_offset 4
430e4827aaSYvan Roux; MACHO-NEXT:    frame-setup CFI_INSTRUCTION offset $lr, -4
440e4827aaSYvan Roux; MACHO-NEXT:    tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0{{.*}}
450e4827aaSYvan Roux; MACHO-NEXT:    renamable $r0, dead $cpsr = tADDi8 killed renamable $r0, 8, 14 /* CC::al */, $noreg
460e4827aaSYvan Roux; MACHO-NEXT:    $lr, $sp = frame-destroy t2LDR_POST $sp, 4, 14 /* CC::al */, $noreg
470e4827aaSYvan Roux; MACHO-NEXT:    tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0
480e4827aaSYvan Roux
490e4827aaSYvan Roux; THUMB1-NOT: OUTLINED_FUNCTION_0
500e4827aaSYvan Roux
510e4827aaSYvan Rouxentry:
520e4827aaSYvan Roux  %call = tail call i32 @thunk_called_fn(i32 1, i32 2, i32 3, i32 4)
530e4827aaSYvan Roux  %cx = add i32 %call, 8
540e4827aaSYvan Roux  ret i32 %cx
550e4827aaSYvan Roux}
560e4827aaSYvan Roux
57*03141aa0SSam Parkerdefine i32 @b() #0 {
580e4827aaSYvan Roux; ARM-LABEL: name:             b
590e4827aaSYvan Roux; ARM:       bb.0.entry:
600e4827aaSYvan Roux; ARM-NEXT:    liveins: $r11, $lr
610e4827aaSYvan Roux; ARM:         $sp = frame-setup STMDB_UPD $sp, 14 /* CC::al */, $noreg, killed $r11, killed $lr
620e4827aaSYvan Roux; ARM-NEXT:    frame-setup CFI_INSTRUCTION def_cfa_offset 8
630e4827aaSYvan Roux; ARM-NEXT:    frame-setup CFI_INSTRUCTION offset $lr, -4
640e4827aaSYvan Roux; ARM-NEXT:    frame-setup CFI_INSTRUCTION offset $r11, -8
650e4827aaSYvan Roux; ARM-NEXT:    BL @OUTLINED_FUNCTION_0{{.*}}
660e4827aaSYvan Roux; ARM-NEXT:    renamable $r0 = ADDri killed renamable $r0, 88, 14 /* CC::al */, $noreg, $noreg
670e4827aaSYvan Roux; ARM-NEXT:    $sp = frame-destroy LDMIA_RET $sp, 14 /* CC::al */, $noreg, def $r11, def $pc, implicit killed $r0
680e4827aaSYvan Roux
690e4827aaSYvan Roux; THUMB-LABEL: name:             b
700e4827aaSYvan Roux; THUMB:       bb.0.entry:
710e4827aaSYvan Roux; THUMB-NEXT:    liveins: $r7, $lr
720e4827aaSYvan Roux; THUMB:         frame-setup tPUSH 14 /* CC::al */, $noreg, killed $r7, killed $lr
730e4827aaSYvan Roux; THUMB-NEXT:    frame-setup CFI_INSTRUCTION def_cfa_offset 8
740e4827aaSYvan Roux; THUMB-NEXT:    frame-setup CFI_INSTRUCTION offset $lr, -4
750e4827aaSYvan Roux; THUMB-NEXT:    frame-setup CFI_INSTRUCTION offset $r7, -8
760e4827aaSYvan Roux; THUMB-NEXT:    tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0{{.*}}
770e4827aaSYvan Roux; THUMB-NEXT:    renamable $r0, dead $cpsr = tADDi8 killed renamable $r0, 88, 14 /* CC::al */, $noreg
780e4827aaSYvan Roux; THUMB-NEXT:    tPOP_RET 14 /* CC::al */, $noreg, def $r7, def $pc
790e4827aaSYvan Roux
800e4827aaSYvan Roux; MACHO-LABEL: name:             b
810e4827aaSYvan Roux; MACHO:       bb.0.entry:
820e4827aaSYvan Roux; MACHO-NEXT:    liveins: $lr
830e4827aaSYvan Roux; MACHO:         early-clobber $sp = frame-setup t2STR_PRE killed $lr, $sp, -4, 14 /* CC::al */, $noreg
840e4827aaSYvan Roux; MACHO-NEXT:    frame-setup CFI_INSTRUCTION def_cfa_offset 4
850e4827aaSYvan Roux; MACHO-NEXT:    frame-setup CFI_INSTRUCTION offset $lr, -4
860e4827aaSYvan Roux; MACHO-NEXT:    tBL 14 /* CC::al */, $noreg, @OUTLINED_FUNCTION_0{{.*}}
870e4827aaSYvan Roux; MACHO-NEXT:    renamable $r0, dead $cpsr = tADDi8 killed renamable $r0, 88, 14 /* CC::al */, $noreg
880e4827aaSYvan Roux; MACHO-NEXT:    $lr, $sp = frame-destroy t2LDR_POST $sp, 4, 14 /* CC::al */, $noreg
890e4827aaSYvan Roux; MACHO-NEXT:    tBX_RET 14 /* CC::al */, $noreg, implicit killed $r0
900e4827aaSYvan Rouxentry:
910e4827aaSYvan Roux  %call = tail call i32 @thunk_called_fn(i32 1, i32 2, i32 3, i32 4)
920e4827aaSYvan Roux  %cx = add i32 %call, 88
930e4827aaSYvan Roux  ret i32 %cx
940e4827aaSYvan Roux}
950e4827aaSYvan Roux
960e4827aaSYvan Roux; ARM-LABEL: name:            OUTLINED_FUNCTION_0
970e4827aaSYvan Roux; ARM:        bb.0:
980e4827aaSYvan Roux; ARM-NEXT:   liveins: $r10, $r9, $r8, $r7, $r6, $r5, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8
990e4827aaSYvan Roux; ARM:        $r0 = MOVi 1, 14 /* CC::al */, $noreg, $noreg
1000e4827aaSYvan Roux; ARM-NEXT:   $r1 = MOVi 2, 14 /* CC::al */, $noreg, $noreg
1010e4827aaSYvan Roux; ARM-NEXT:   $r2 = MOVi 3, 14 /* CC::al */, $noreg, $noreg
1020e4827aaSYvan Roux; ARM-NEXT:   $r3 = MOVi 4, 14 /* CC::al */, $noreg, $noreg
1030e4827aaSYvan Roux; ARM-NEXT:   TAILJMPd @thunk_called_fn, implicit $sp
1040e4827aaSYvan Roux
1050e4827aaSYvan Roux; THUMB-LABEL: name:            OUTLINED_FUNCTION_0
1060e4827aaSYvan Roux; THUMB:        bb.0:
1070e4827aaSYvan Roux; THUMB-NEXT:   liveins: $r11, $r10, $r9, $r8, $r6, $r5, $r4, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8
1080e4827aaSYvan Roux; THUMB:        $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1090e4827aaSYvan Roux; THUMB-NEXT:   $r1, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
1100e4827aaSYvan Roux; THUMB-NEXT:   $r2, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
1110e4827aaSYvan Roux; THUMB-NEXT:   $r3, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
1120e4827aaSYvan Roux; THUMB-NEXT:   tTAILJMPdND @thunk_called_fn, 14 /* CC::al */, $noreg, implicit $sp
1130e4827aaSYvan Roux
1140e4827aaSYvan Roux; MACHO-LABEL: name:            OUTLINED_FUNCTION_0
1150e4827aaSYvan Roux; MACHO:        bb.0:
1160e4827aaSYvan Roux; MACHO-NEXT:   liveins: $r7, $r6, $r5, $r4, $r11, $r10, $r8, $d15, $d14, $d13, $d12, $d11, $d10, $d9, $d8
1170e4827aaSYvan Roux; MACHO:        $r0, dead $cpsr = tMOVi8 1, 14 /* CC::al */, $noreg
1180e4827aaSYvan Roux; MACHO-NEXT:   $r1, dead $cpsr = tMOVi8 2, 14 /* CC::al */, $noreg
1190e4827aaSYvan Roux; MACHO-NEXT:   $r2, dead $cpsr = tMOVi8 3, 14 /* CC::al */, $noreg
1200e4827aaSYvan Roux; MACHO-NEXT:   $r3, dead $cpsr = tMOVi8 4, 14 /* CC::al */, $noreg
1210e4827aaSYvan Roux; MACHO-NEXT:   tTAILJMPd @thunk_called_fn, 14 /* CC::al */, $noreg, implicit $sp
122*03141aa0SSam Parker
123*03141aa0SSam Parkerattributes #0 = { minsize optsize }
124