Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / Mips / compactbranches / compact-branches-64.ll
blob1ba80bff8d5af333b3868c63132e4408534bfbf1
1 ; RUN: llc -relocation-model=pic -march=mipsel -mcpu=mips64r6 \
2 ; RUN:     -disable-mips-delay-filler -target-abi=n64 < %s | FileCheck %s
4 ; Function Attrs: nounwind
5 define void @l() {
6 entry:
7 ; CHECK-LABEL:  l:
8 ; CHECK: jalrc $25
9   %call = tail call i64 @k()
10 ; CHECK: jalrc $25
11   %call1 = tail call i64 @j()
12   %cmp = icmp eq i64 %call, %call1
13 ; CHECK: bnec
14   br i1 %cmp, label %if.then, label %if.end
16 if.then:                                          ; preds = %entry:
17 ; CHECK: jalrc $25
18   tail call void @f(i64 signext -2)
19   br label %if.end
21 if.end:                                           ; preds = %if.then, %entry
22 ; CHECK: jrc  $ra
23   ret void
26 declare i64 @k()
28 declare i64 @j()
30 declare void @f(i64 signext)
32 ; Function Attrs: define void @l2() {
33 define void @l2() {
34 entry:
35 ; CHECK-LABEL: l2:
36 ; CHECK: jalrc $25
37   %call = tail call i64 @k()
38 ; CHECK: jalrc $25
39   %call1 = tail call i64 @i()
40   %cmp = icmp eq i64 %call, %call1
41 ; CHECK: beqc
42   br i1 %cmp, label %if.end, label %if.then
44 if.then:                                          ; preds = %entry:
45 ; CHECK: jalrc $25
46   tail call void @f(i64 signext -1)
47   br label %if.end
49 if.end:                                           ; preds = %entry, %if.then
50 ; CHECK: jrc  $ra
51   ret void
54 declare i64 @i()
56 ; Function Attrs: nounwind
57 define void @l3() {
58 entry:
59 ; CHECK-LABEL: l3:
60 ; CHECK: jalrc $25
61   %call = tail call i64 @k()
62   %cmp = icmp slt i64 %call, 0
63 ; CHECK: bgez
64   br i1 %cmp, label %if.then, label %if.end
66 if.then:                                          ; preds = %entry:
67 ; CHECK: jalrc $25
68   tail call void @f(i64 signext 0)
69   br label %if.end
71 if.end:                                           ; preds = %if.then, %entry
72 ; CHECK: jrc $ra
73   ret void
76 ; Function Attrs: nounwind
77 define void @l4() {
78 entry:
79 ; CHECK-LABEL: l4:
80 ; CHECK: jalrc $25
81   %call = tail call i64 @k()
82   %cmp = icmp slt i64 %call, 1
83 ; CHECK: bgtzc
84   br i1 %cmp, label %if.then, label %if.end
86 if.then:                                          ; preds = %entry:
87   tail call void @f(i64 signext 1)
88   br label %if.end
90 if.end:                                           ; preds = %if.then, %entry
91 ; CHECK: jrc $ra
92   ret void
95 ; Function Attrs: nounwind
96 define void @l5() {
97 entry:
98 ; CHECK-LABEL: l5:
99 ; CHECK: jalrc $25
100   %call = tail call i64 @k()
101   %cmp = icmp sgt i64 %call, 0
102 ; CHECK: blezc
103   br i1 %cmp, label %if.then, label %if.end
105 if.then:                                          ; preds = %entry:
106 ; CHECK: jalrc $25
107   tail call void @f(i64 signext 2)
108   br label %if.end
110 if.end:                                           ; preds = %if.then, %entry
111 ; CHECK: jrc  $ra
112   ret void
115 ; Function Attrs: nounwind
116 define void @l6() {
117 entry:
118 ; CHECK-LABEL: l6:
119 ; CHECK: jalrc $25
120   %call = tail call i64 @k()
121   %cmp = icmp sgt i64 %call, -1
122 ; CHECK: bltzc
123   br i1 %cmp, label %if.then, label %if.end
125 if.then:                                          ; preds = %entry:
126 ; CHECK: jalrc $25
127   tail call void @f(i64 signext 3)
128   br label %if.end
130 if.end:                                           ; preds = %if.then, %entry
131 ; CHECK: jrc $ra
132   ret void
135 ; Function Attrs: nounwind
136 define void @l7() {
137 entry:
138 ; CHECK-LABEL: l7:
139 ; CHECK: jalrc $25
140   %call = tail call i64 @k()
141   %cmp = icmp eq i64 %call, 0
142 ; CHECK: bnezc
143   br i1 %cmp, label %if.then, label %if.end
145 if.then:                                          ; preds = %entry:
146 ; CHECK: jalrc $25
147   tail call void @f(i64 signext 4)
148   br label %if.end
150 if.end:                                           ; preds = %if.then, %entry
151 ; CHECK: jrc  $ra
152   ret void
155 ; Function Attrs: nounwind
156 define void @l8() {
157 entry:
158 ; CHECK-LABEL: l8:
159 ; CHECK: jalrc $25
160   %call = tail call i64 @k()
161   %cmp = icmp eq i64 %call, 0
162 ; CHECK: beqzc
163   br i1 %cmp, label %if.end, label %if.then
165 if.then:                                          ; preds = %entry:
166 ; CHECK: jalrc $25
167   tail call void @f(i64 signext 5)
168   br label %if.end
170 if.end:                                           ; preds = %entry, %if.then
171 ; CHECK: jrc  $ra
172   ret void
175 define i64 @l9(ptr %i) {
176 entry:
177 ; CHECK-LABEL: l9:
178   %i.addr = alloca ptr, align 4
179   store ptr %i, ptr %i.addr, align 4
180 ; CHECK: jalrc $25
181   %call = call i64 @k()
182   %cmp = icmp ne i64 %call, 0
183 ; CHECK: beqzc
184   br i1 %cmp, label %if.then, label %if.end
186 if.then:                                          ; preds = %entry
187   %0 = load ptr, ptr %i.addr, align 4
188 ; CHECK: jalrc $25
189   %call1 = call ptr %0()
190   br label %if.end
192 if.end:                                           ; preds = %if.then, %entry
193 ; CHECK: jrc $ra
194   ret i64 -1