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