xref: /aosp_15_r20/external/llvm/test/CodeGen/Mips/fpbr.ll (revision 9880d6810fe72a1726cb53787c6711e909410d58)
1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32   -relocation-model=pic  | FileCheck %s -check-prefixes=ALL,FCC,32-FCC
2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r2 -relocation-model=pic  | FileCheck %s -check-prefixes=ALL,FCC,32-FCC
3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mipsel -mcpu=mips32r6 -relocation-model=pic  | FileCheck %s -check-prefixes=ALL,GPR,32-GPR
4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64   | FileCheck %s -check-prefixes=ALL,FCC,64-FCC
5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r2 | FileCheck %s -check-prefixes=ALL,FCC,64-FCC
6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=mips64el -mcpu=mips64r6 | FileCheck %s -check-prefixes=ALL,GPR,64-GPR
7*9880d681SAndroid Build Coastguard Worker
8*9880d681SAndroid Build Coastguard Workerdefine void @func0(float %f2, float %f3) nounwind {
9*9880d681SAndroid Build Coastguard Workerentry:
10*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func0:
11*9880d681SAndroid Build Coastguard Worker
12*9880d681SAndroid Build Coastguard Worker; 32-FCC:        c.eq.s $f12, $f14
13*9880d681SAndroid Build Coastguard Worker; 64-FCC:        c.eq.s $f12, $f13
14*9880d681SAndroid Build Coastguard Worker; FCC:           bc1f   $BB0_2
15*9880d681SAndroid Build Coastguard Worker
16*9880d681SAndroid Build Coastguard Worker; 32-GPR:        cmp.eq.s $[[FGRCC:f[0-9]+]], $f12, $f14
17*9880d681SAndroid Build Coastguard Worker; 64-GPR:        cmp.eq.s $[[FGRCC:f[0-9]+]], $f12, $f13
18*9880d681SAndroid Build Coastguard Worker; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
19*9880d681SAndroid Build Coastguard Worker; FIXME: We ought to be able to transform not+bnez -> beqz
20*9880d681SAndroid Build Coastguard Worker; GPR:           not      $[[GPRCC]], $[[GPRCC]]
21*9880d681SAndroid Build Coastguard Worker; 32-GPR:        bnez     $[[GPRCC]], $BB0_2
22*9880d681SAndroid Build Coastguard Worker; 64-GPR:        bnezc    $[[GPRCC]], $BB0_2
23*9880d681SAndroid Build Coastguard Worker
24*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq float %f2, %f3
25*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
26*9880d681SAndroid Build Coastguard Worker
27*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
28*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g0() nounwind
29*9880d681SAndroid Build Coastguard Worker  br label %if.end
30*9880d681SAndroid Build Coastguard Worker
31*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
32*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g1() nounwind
33*9880d681SAndroid Build Coastguard Worker  br label %if.end
34*9880d681SAndroid Build Coastguard Worker
35*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
36*9880d681SAndroid Build Coastguard Worker  ret void
37*9880d681SAndroid Build Coastguard Worker}
38*9880d681SAndroid Build Coastguard Worker
39*9880d681SAndroid Build Coastguard Workerdeclare void @g0(...)
40*9880d681SAndroid Build Coastguard Worker
41*9880d681SAndroid Build Coastguard Workerdeclare void @g1(...)
42*9880d681SAndroid Build Coastguard Worker
43*9880d681SAndroid Build Coastguard Workerdefine void @func1(float %f2, float %f3) nounwind {
44*9880d681SAndroid Build Coastguard Workerentry:
45*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func1:
46*9880d681SAndroid Build Coastguard Worker
47*9880d681SAndroid Build Coastguard Worker; 32-FCC:        c.olt.s $f12, $f14
48*9880d681SAndroid Build Coastguard Worker; 64-FCC:        c.olt.s $f12, $f13
49*9880d681SAndroid Build Coastguard Worker; FCC:           bc1f    $BB1_2
50*9880d681SAndroid Build Coastguard Worker
51*9880d681SAndroid Build Coastguard Worker; 32-GPR:        cmp.ule.s $[[FGRCC:f[0-9]+]], $f14, $f12
52*9880d681SAndroid Build Coastguard Worker; 64-GPR:        cmp.ule.s $[[FGRCC:f[0-9]+]], $f13, $f12
53*9880d681SAndroid Build Coastguard Worker; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
54*9880d681SAndroid Build Coastguard Worker; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
55*9880d681SAndroid Build Coastguard Worker; 32-GPR:        bnez     $[[GPRCC]], $BB1_2
56*9880d681SAndroid Build Coastguard Worker; 64-GPR:        bnezc    $[[GPRCC]], $BB1_2
57*9880d681SAndroid Build Coastguard Worker
58*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt float %f2, %f3
59*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
60*9880d681SAndroid Build Coastguard Worker
61*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
62*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g0() nounwind
63*9880d681SAndroid Build Coastguard Worker  br label %if.end
64*9880d681SAndroid Build Coastguard Worker
65*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
66*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g1() nounwind
67*9880d681SAndroid Build Coastguard Worker  br label %if.end
68*9880d681SAndroid Build Coastguard Worker
69*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
70*9880d681SAndroid Build Coastguard Worker  ret void
71*9880d681SAndroid Build Coastguard Worker}
72*9880d681SAndroid Build Coastguard Worker
73*9880d681SAndroid Build Coastguard Workerdefine void @func2(float %f2, float %f3) nounwind {
74*9880d681SAndroid Build Coastguard Workerentry:
75*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func2:
76*9880d681SAndroid Build Coastguard Worker
77*9880d681SAndroid Build Coastguard Worker; 32-FCC:        c.ole.s $f12, $f14
78*9880d681SAndroid Build Coastguard Worker; 64-FCC:        c.ole.s $f12, $f13
79*9880d681SAndroid Build Coastguard Worker; FCC:           bc1t    $BB2_2
80*9880d681SAndroid Build Coastguard Worker
81*9880d681SAndroid Build Coastguard Worker; 32-GPR:        cmp.ult.s $[[FGRCC:f[0-9]+]], $f14, $f12
82*9880d681SAndroid Build Coastguard Worker; 64-GPR:        cmp.ult.s $[[FGRCC:f[0-9]+]], $f13, $f12
83*9880d681SAndroid Build Coastguard Worker; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
84*9880d681SAndroid Build Coastguard Worker; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
85*9880d681SAndroid Build Coastguard Worker; 32-GPR:        beqz     $[[GPRCC]], $BB2_2
86*9880d681SAndroid Build Coastguard Worker; 64-GPR:        beqzc    $[[GPRCC]], $BB2_2
87*9880d681SAndroid Build Coastguard Worker
88*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ugt float %f2, %f3
89*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.else, label %if.then
90*9880d681SAndroid Build Coastguard Worker
91*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
92*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g0() nounwind
93*9880d681SAndroid Build Coastguard Worker  br label %if.end
94*9880d681SAndroid Build Coastguard Worker
95*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
96*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g1() nounwind
97*9880d681SAndroid Build Coastguard Worker  br label %if.end
98*9880d681SAndroid Build Coastguard Worker
99*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
100*9880d681SAndroid Build Coastguard Worker  ret void
101*9880d681SAndroid Build Coastguard Worker}
102*9880d681SAndroid Build Coastguard Worker
103*9880d681SAndroid Build Coastguard Workerdefine void @func3(double %f2, double %f3) nounwind {
104*9880d681SAndroid Build Coastguard Workerentry:
105*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func3:
106*9880d681SAndroid Build Coastguard Worker
107*9880d681SAndroid Build Coastguard Worker; 32-FCC:        c.eq.d $f12, $f14
108*9880d681SAndroid Build Coastguard Worker; 64-FCC:        c.eq.d $f12, $f13
109*9880d681SAndroid Build Coastguard Worker; FCC:           bc1f $BB3_2
110*9880d681SAndroid Build Coastguard Worker
111*9880d681SAndroid Build Coastguard Worker; 32-GPR:        cmp.eq.d $[[FGRCC:f[0-9]+]], $f12, $f14
112*9880d681SAndroid Build Coastguard Worker; 64-GPR:        cmp.eq.d $[[FGRCC:f[0-9]+]], $f12, $f13
113*9880d681SAndroid Build Coastguard Worker; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
114*9880d681SAndroid Build Coastguard Worker; FIXME: We ought to be able to transform not+bnez -> beqz
115*9880d681SAndroid Build Coastguard Worker; GPR:           not      $[[GPRCC]], $[[GPRCC]]
116*9880d681SAndroid Build Coastguard Worker; 32-GPR:        bnez     $[[GPRCC]], $BB3_2
117*9880d681SAndroid Build Coastguard Worker; 64-GPR:        bnezc    $[[GPRCC]], $BB3_2
118*9880d681SAndroid Build Coastguard Worker
119*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp oeq double %f2, %f3
120*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
121*9880d681SAndroid Build Coastguard Worker
122*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
123*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g0() nounwind
124*9880d681SAndroid Build Coastguard Worker  br label %if.end
125*9880d681SAndroid Build Coastguard Worker
126*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
127*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g1() nounwind
128*9880d681SAndroid Build Coastguard Worker  br label %if.end
129*9880d681SAndroid Build Coastguard Worker
130*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
131*9880d681SAndroid Build Coastguard Worker  ret void
132*9880d681SAndroid Build Coastguard Worker}
133*9880d681SAndroid Build Coastguard Worker
134*9880d681SAndroid Build Coastguard Workerdefine void @func4(double %f2, double %f3) nounwind {
135*9880d681SAndroid Build Coastguard Workerentry:
136*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func4:
137*9880d681SAndroid Build Coastguard Worker
138*9880d681SAndroid Build Coastguard Worker; 32-FCC:        c.olt.d $f12, $f14
139*9880d681SAndroid Build Coastguard Worker; 64-FCC:        c.olt.d $f12, $f13
140*9880d681SAndroid Build Coastguard Worker; FCC:           bc1f $BB4_2
141*9880d681SAndroid Build Coastguard Worker
142*9880d681SAndroid Build Coastguard Worker; 32-GPR:        cmp.ule.d $[[FGRCC:f[0-9]+]], $f14, $f12
143*9880d681SAndroid Build Coastguard Worker; 64-GPR:        cmp.ule.d $[[FGRCC:f[0-9]+]], $f13, $f12
144*9880d681SAndroid Build Coastguard Worker; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
145*9880d681SAndroid Build Coastguard Worker; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
146*9880d681SAndroid Build Coastguard Worker; 32-GPR:        bnez     $[[GPRCC]], $BB4_2
147*9880d681SAndroid Build Coastguard Worker; 64-GPR:        bnezc    $[[GPRCC]], $BB4_2
148*9880d681SAndroid Build Coastguard Worker
149*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp olt double %f2, %f3
150*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.then, label %if.else
151*9880d681SAndroid Build Coastguard Worker
152*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
153*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g0() nounwind
154*9880d681SAndroid Build Coastguard Worker  br label %if.end
155*9880d681SAndroid Build Coastguard Worker
156*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
157*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g1() nounwind
158*9880d681SAndroid Build Coastguard Worker  br label %if.end
159*9880d681SAndroid Build Coastguard Worker
160*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
161*9880d681SAndroid Build Coastguard Worker  ret void
162*9880d681SAndroid Build Coastguard Worker}
163*9880d681SAndroid Build Coastguard Worker
164*9880d681SAndroid Build Coastguard Workerdefine void @func5(double %f2, double %f3) nounwind {
165*9880d681SAndroid Build Coastguard Workerentry:
166*9880d681SAndroid Build Coastguard Worker; ALL-LABEL: func5:
167*9880d681SAndroid Build Coastguard Worker
168*9880d681SAndroid Build Coastguard Worker; 32-FCC:        c.ole.d $f12, $f14
169*9880d681SAndroid Build Coastguard Worker; 64-FCC:        c.ole.d $f12, $f13
170*9880d681SAndroid Build Coastguard Worker; FCC:           bc1t $BB5_2
171*9880d681SAndroid Build Coastguard Worker
172*9880d681SAndroid Build Coastguard Worker; 32-GPR:        cmp.ult.d $[[FGRCC:f[0-9]+]], $f14, $f12
173*9880d681SAndroid Build Coastguard Worker; 64-GPR:        cmp.ult.d $[[FGRCC:f[0-9]+]], $f13, $f12
174*9880d681SAndroid Build Coastguard Worker; GPR:           mfc1     $[[GPRCC:[0-9]+]], $[[FGRCC:f[0-9]+]]
175*9880d681SAndroid Build Coastguard Worker; GPR-NOT:       not      $[[GPRCC]], $[[GPRCC]]
176*9880d681SAndroid Build Coastguard Worker; 32-GPR:        beqz     $[[GPRCC]], $BB5_2
177*9880d681SAndroid Build Coastguard Worker; 64-GPR:        beqzc    $[[GPRCC]], $BB5_2
178*9880d681SAndroid Build Coastguard Worker
179*9880d681SAndroid Build Coastguard Worker  %cmp = fcmp ugt double %f2, %f3
180*9880d681SAndroid Build Coastguard Worker  br i1 %cmp, label %if.else, label %if.then
181*9880d681SAndroid Build Coastguard Worker
182*9880d681SAndroid Build Coastguard Workerif.then:                                          ; preds = %entry
183*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g0() nounwind
184*9880d681SAndroid Build Coastguard Worker  br label %if.end
185*9880d681SAndroid Build Coastguard Worker
186*9880d681SAndroid Build Coastguard Workerif.else:                                          ; preds = %entry
187*9880d681SAndroid Build Coastguard Worker  tail call void (...) @g1() nounwind
188*9880d681SAndroid Build Coastguard Worker  br label %if.end
189*9880d681SAndroid Build Coastguard Worker
190*9880d681SAndroid Build Coastguard Workerif.end:                                           ; preds = %if.else, %if.then
191*9880d681SAndroid Build Coastguard Worker  ret void
192*9880d681SAndroid Build Coastguard Worker}
193