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