[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / Mips / compactbranches / compact-branches.ll
blobebbeea59235427ddfcc9aa8183891431ac927f2c
1 ; RUN: llc -march=mipsel -mcpu=mips32r6 -relocation-model=static \
2 ; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=STATIC32
3 ; RUN: llc -march=mipsel -mcpu=mips64r6 -relocation-model=pic -target-abi n64 \
4 ; RUN:     -disable-mips-delay-filler < %s | FileCheck %s -check-prefix=PIC
6 ; Function Attrs: nounwind
7 define void @l()  {
8 entry:
9 ; PIC: jalrc $25
10   %call = tail call i32 @k()
11 ; PIC: jalrc $25
12   %call1 = tail call i32 @j()
13   %cmp = icmp eq i32 %call, %call1
14 ; CHECK: bnec
15   br i1 %cmp, label %if.then, label %if.end
17 if.then:                                          ; preds = %entry:
18 ; STATIC: nop
19 ; STATIC: jal
20 ; PIC: jalrc $25
21   tail call void @f(i32 signext -2)
22   br label %if.end
24 if.end:                                           ; preds = %if.then, %entry
25 ; CHECK: jrc  $ra
26   ret void
29 declare i32 @k()
31 declare i32 @j()
33 declare void @f(i32 signext) 
35 ; Function Attrs: define void @l2()  {
36 define void @l2()  {
37 entry:
38 ; PIC: jalrc $25
39   %call = tail call i32 @k()
40 ; PIC: jalrc $25
41   %call1 = tail call i32 @i()
42   %cmp = icmp eq i32 %call, %call1
43 ; CHECK: beqc
44   br i1 %cmp, label %if.end, label %if.then
46 if.then:                                          ; preds = %entry:
47 ; STATIC: nop
48 ; STATIC: jal
49 ; PIC: jalrc $25
50   tail call void @f(i32 signext -1)
51   br label %if.end
53 if.end:                                           ; preds = %entry, %if.then
54 ; CHECK: jrc  $ra
55   ret void
58 declare i32 @i()
60 ; Function Attrs: nounwind
61 define void @l3()  {
62 entry:
63 ; PIC: jalrc $25
64   %call = tail call i32 @k()
65   %cmp = icmp slt i32 %call, 0
66 ; CHECK: bgez
67   br i1 %cmp, label %if.then, label %if.end
69 if.then:                                          ; preds = %entry:
70 ; STATIC: nop
71 ; STATIC: jal
72 ; PIC: jalrc $25
73   tail call void @f(i32 signext 0)
74   br label %if.end
76 if.end:                                           ; preds = %if.then, %entry
77 ; CHECK: jrc $ra
78   ret void
81 ; Function Attrs: nounwind
82 define void @l4()  {
83 entry:
84   %call = tail call i32 @k()
85   %cmp = icmp slt i32 %call, 1
86 ; CHECK: bgtzc
87   br i1 %cmp, label %if.then, label %if.end
89 if.then:                                          ; preds = %entry:
90 ; STATIC: nop
91 ; STATIC: jal
92   tail call void @f(i32 signext 1)
93   br label %if.end
95 if.end:                                           ; preds = %if.then, %entry
96 ; CHECK: jrc $ra
97   ret void
100 ; Function Attrs: nounwind
101 define void @l5()  {
102 entry:
103 ; PIC: jalrc $25
104   %call = tail call i32 @k()
105 ; PIC: jalrc $25
106   %cmp = icmp sgt i32 %call, 0
107 ; CHECK: blezc
108   br i1 %cmp, label %if.then, label %if.end
110 if.then:                                          ; preds = %entry:
111 ; STATIC: nop
112 ; STATIC: jal
113 ; PIC: jalrc $25
114   tail call void @f(i32 signext 2) 
115   br label %if.end
117 if.end:                                           ; preds = %if.then, %entry
118 ; CHECK: jrc  $ra
119   ret void
122 ; Function Attrs: nounwind
123 define void @l6()  {
124 entry:
125 ; PIC: jalrc $25
126   %call = tail call i32 @k()
127 ; PIC: jalrc $25
128   %cmp = icmp sgt i32 %call, -1
129 ; CHECK: bltzc
130   br i1 %cmp, label %if.then, label %if.end
132 if.then:                                          ; preds = %entry:
133 ; STATIC: nop
134 ; STATIC: jal
135 ; PIC: jalrc $25
136   tail call void @f(i32 signext 3)
137   br label %if.end
139 if.end:                                           ; preds = %if.then, %entry
140 ; CHECK: jrc $ra
141   ret void
144 ; Function Attrs: nounwind
145 define void @l7()  {
146 entry:
147 ; PIC: jalrc $25
148   %call = tail call i32 @k()
149   %cmp = icmp eq i32 %call, 0
150 ; CHECK: bnezc
151   br i1 %cmp, label %if.then, label %if.end
153 if.then:                                          ; preds = %entry:
154 ; STATIC: nop
155 ; STATIC: jal
156 ; PIC: jalrc $25
157   tail call void @f(i32 signext 4)
158   br label %if.end
160 if.end:                                           ; preds = %if.then, %entry
161 ; CHECK: jrc  $ra
162   ret void
165 ; Function Attrs: nounwind
166 define void @l8()  {
167 entry:
168 ; PIC: jalrc $25
169   %call = tail call i32 @k()
170   %cmp = icmp eq i32 %call, 0
171 ; CHECK: beqzc
172   br i1 %cmp, label %if.end, label %if.then
174 if.then:                                          ; preds = %entry:
175 ; STATIC: nop
176 ; STATIC: jal
177 ; PIC: jalrc $25
178   tail call void @f(i32 signext 5)
179   br label %if.end
181 if.end:                                           ; preds = %entry, %if.then
182 ; CHECK: jrc  $ra
183   ret void
186 define i32 @l9(i8* ()* %i) #0 {
187 entry:
188   %i.addr = alloca i8* ()*, align 4
189   store i8* ()* %i, i8* ()** %i.addr, align 4
190 ; STATIC32: jal
191 ; STATIC32: nop
192 ; PIC: jalrc $25
193   %call = call i32 @k()
194 ; PIC: jalrc $25
195   %cmp = icmp ne i32 %call, 0
196 ; CHECK: beqzc
197   br i1 %cmp, label %if.then, label %if.end
199 if.then:                                          ; preds = %entry
200   %0 = load i8* ()*, i8* ()** %i.addr, align 4
201 ; CHECK: jalrc $25
202   %call1 = call i8* %0()
203   br label %if.end
205 if.end:                                           ; preds = %if.then, %entry
206 ; CHECK: jrc $ra
207   ret i32 -1