blob: 146a2223c3570c8645daf602cf99a52debb643c1 [file] [log] [blame]
David Green2f9eed62019-04-23 11:46:58 +00001; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2; RUN: llc -mtriple=thumbv8m.main-none-none-eabi %s -o - -verify-machineinstrs | FileCheck %s
3
4declare i32 @fn(i32) #0
5
6define i32 @f1(i32 %a) #0 {
7; CHECK-LABEL: f1:
8; CHECK: @ %bb.0: @ %entry
9; CHECK-NEXT: .save {r4, lr}
10; CHECK-NEXT: push {r4, lr}
11; CHECK-NEXT: mov r4, r0
12; CHECK-NEXT: bl fn
13; CHECK-NEXT: movs r0, #0
14; CHECK-NEXT: cbz r4, .LBB0_2
15; CHECK-NEXT: @ %bb.1: @ %return
16; CHECK-NEXT: pop {r4, pc}
17; CHECK-NEXT: .LBB0_2: @ %if.end
18; CHECK-NEXT: bl fn
19; CHECK-NEXT: adds r0, #1
20; CHECK-NEXT: pop {r4, pc}
21entry:
22 %call = tail call i32 @fn(i32 %a) #2
23 %tobool = icmp eq i32 %a, 0
24 br i1 %tobool, label %if.end, label %return
25
26if.end: ; preds = %entry
27 %call1 = tail call i32 @fn(i32 0) #2
28 %add = add nsw i32 %call1, 1
29 br label %return
30
31return: ; preds = %entry, %if.end
32 %retval.0 = phi i32 [ %add, %if.end ], [ 0, %entry ]
33 ret i32 %retval.0
34}
35
36define i32 @f2(i32 %a) #0 {
37; CHECK-LABEL: f2:
38; CHECK: @ %bb.0: @ %entry
39; CHECK-NEXT: .save {r4, lr}
40; CHECK-NEXT: push {r4, lr}
41; CHECK-NEXT: mov r4, r0
42; CHECK-NEXT: bl fn
43; CHECK-NEXT: movs r0, #0
44; CHECK-NEXT: cmp r4, #1
45; CHECK-NEXT: bne .LBB1_2
46; CHECK-NEXT: @ %bb.1: @ %if.end
47; CHECK-NEXT: bl fn
48; CHECK-NEXT: adds r0, #1
49; CHECK-NEXT: .LBB1_2: @ %return
50; CHECK-NEXT: pop {r4, pc}
51entry:
52 %call = tail call i32 @fn(i32 %a) #2
53 %tobool = icmp eq i32 %a, 1
54 br i1 %tobool, label %if.end, label %return
55
56if.end: ; preds = %entry
57 %call1 = tail call i32 @fn(i32 0) #2
58 %add = add nsw i32 %call1, 1
59 br label %return
60
61return: ; preds = %entry, %if.end
62 %retval.0 = phi i32 [ %add, %if.end ], [ 0, %entry ]
63 ret i32 %retval.0
64}
65
66define void @f3(i32 %x) #0 {
67; CHECK-LABEL: f3:
68; CHECK: @ %bb.0: @ %entry
Oliver Stannarda294d9e2020-04-06 10:33:55 +010069; CHECK-NEXT: cmp r0, #1
70; CHECK-NEXT: bne .LBB2_2
71; CHECK-NEXT: @ %bb.1: @ %t
David Green2f9eed62019-04-23 11:46:58 +000072; CHECK-NEXT: .save {r7, lr}
73; CHECK-NEXT: push {r7, lr}
Oliver Stannarda294d9e2020-04-06 10:33:55 +010074; CHECK-NEXT: movs r0, #0
75; CHECK-NEXT: bl fn
76; CHECK-NEXT: pop.w {r7, lr}
77; CHECK-NEXT: .LBB2_2: @ %f
78; CHECK-NEXT: bx lr
David Green2f9eed62019-04-23 11:46:58 +000079entry:
80 %p = icmp eq i32 %x, 1
81 br i1 %p, label %t, label %f
82
83t:
84 call i32 @fn(i32 0)
85 br label %f
86
87f:
88 ret void
89}
90
91attributes #0 = { minsize nounwind optsize }
92