xref: /llvm-project/llvm/test/CodeGen/ARM/machine-outliner-return-2.ll (revision 7360d6d921c67e92cc82635112e72fb2a59aacf4)
1*7360d6d9SMomchil Velikov; RUN: llc -verify-machineinstrs %s -o - | FileCheck %s
2*7360d6d9SMomchil Velikovtarget datalayout = "e-m:e-p:32:32-Fi8-i64:64-v128:64:128-a:0:32-n32-S64"
3*7360d6d9SMomchil Velikovtarget triple = "thumbv7m-unknown-unknown-eabi"
4*7360d6d9SMomchil Velikov
5*7360d6d9SMomchil Velikovdeclare dso_local i32 @t(i32) local_unnamed_addr #0
6*7360d6d9SMomchil Velikov
7*7360d6d9SMomchil Velikovdefine dso_local i32 @f(i32 %a, i32 %b, i32 %c) local_unnamed_addr #0 {
8*7360d6d9SMomchil Velikoventry:
9*7360d6d9SMomchil Velikov  %mul = mul nsw i32 %a, 3
10*7360d6d9SMomchil Velikov  %add = add nsw i32 %mul, 1
11*7360d6d9SMomchil Velikov  %sub = add nsw i32 %b, -1
12*7360d6d9SMomchil Velikov  %div = sdiv i32 %add, %sub
13*7360d6d9SMomchil Velikov  %sub1 = sub nsw i32 %a, %c
14*7360d6d9SMomchil Velikov  %div2 = sdiv i32 %div, %sub1
15*7360d6d9SMomchil Velikov  %mul3 = mul nsw i32 %div2, %b
16*7360d6d9SMomchil Velikov  %add4 = add nsw i32 %mul3, 1
17*7360d6d9SMomchil Velikov  %call = tail call i32 @t(i32 %add4) #0
18*7360d6d9SMomchil Velikov  ret i32 %call
19*7360d6d9SMomchil Velikov}
20*7360d6d9SMomchil Velikov; CHECK-LABEL: f:
21*7360d6d9SMomchil Velikov; CHECK:       str  lr, [sp, #-8]!
22*7360d6d9SMomchil Velikov; CHECK-NEXT:  bl   OUTLINED_FUNCTION_0
23*7360d6d9SMomchil Velikov; CHECK-NEXT:  ldr  lr, [sp], #8
24*7360d6d9SMomchil Velikov; CHECK-NEXT:  adds r0, #1
25*7360d6d9SMomchil Velikov; CHECK-NEXT:  b    t
26*7360d6d9SMomchil Velikov
27*7360d6d9SMomchil Velikovdefine dso_local i32 @g(i32 %a, i32 %b, i32 %c) local_unnamed_addr #0 {
28*7360d6d9SMomchil Velikoventry:
29*7360d6d9SMomchil Velikov  %mul = mul nsw i32 %a, 3
30*7360d6d9SMomchil Velikov  %add = add nsw i32 %mul, 1
31*7360d6d9SMomchil Velikov  %sub = add nsw i32 %b, -1
32*7360d6d9SMomchil Velikov  %div = sdiv i32 %add, %sub
33*7360d6d9SMomchil Velikov  %sub1 = sub nsw i32 %a, %c
34*7360d6d9SMomchil Velikov  %div2 = sdiv i32 %div, %sub1
35*7360d6d9SMomchil Velikov  %mul3 = mul nsw i32 %div2, %b
36*7360d6d9SMomchil Velikov  %add4 = add nsw i32 %mul3, 3
37*7360d6d9SMomchil Velikov  %call = tail call i32 @t(i32 %add4) #0
38*7360d6d9SMomchil Velikov  ret i32 %call
39*7360d6d9SMomchil Velikov}
40*7360d6d9SMomchil Velikov
41*7360d6d9SMomchil Velikov; CHECK-LABEL: g:
42*7360d6d9SMomchil Velikov; CHECK:       str  lr, [sp, #-8]!
43*7360d6d9SMomchil Velikov; CHECK-NEXT:  bl   OUTLINED_FUNCTION_0
44*7360d6d9SMomchil Velikov; CHECK-NEXT:  ldr  lr, [sp], #8
45*7360d6d9SMomchil Velikov; CHECK-NEXT:  adds r0, #3
46*7360d6d9SMomchil Velikov; CHECK-NEXT:  b    t
47*7360d6d9SMomchil Velikov
48*7360d6d9SMomchil Velikov; CHECK-LABEL: OUTLINED_FUNCTION_0:
49*7360d6d9SMomchil Velikov; CHECK-NOT:   lr
50*7360d6d9SMomchil Velikov; CHECK:       bx lr
51*7360d6d9SMomchil Velikov
52*7360d6d9SMomchil Velikovattributes #0 = { minsize nounwind optsize }
53