1 ; RUN: llc < %s -march=mipsel -mcpu=4ke | FileCheck %s -check-prefix=CHECK-MIPS32R2
3 @d2 = external global double
4 @d3 = external global double
6 define i32 @sel1(i32 %s, i32 %f0, i32 %f1) nounwind readnone {
9 %tobool = icmp ne i32 %s, 0
10 %cond = select i1 %tobool, i32 %f1, i32 %f0
14 define float @sel2(i32 %s, float %f0, float %f1) nounwind readnone {
16 ; CHECK-MIPS32R2: movn.s
17 %tobool = icmp ne i32 %s, 0
18 %cond = select i1 %tobool, float %f0, float %f1
22 define double @sel2_1(i32 %s, double %f0, double %f1) nounwind readnone {
24 ; CHECK-MIPS32R2: movn.d
25 %tobool = icmp ne i32 %s, 0
26 %cond = select i1 %tobool, double %f0, double %f1
30 define float @sel3(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
32 ; CHECK-MIPS32R2: c.eq.s
33 ; CHECK-MIPS32R2: movt.s
34 %cmp = fcmp oeq float %f2, %f3
35 %cond = select i1 %cmp, float %f0, float %f1
39 define float @sel4(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
41 ; CHECK-MIPS32R2: c.olt.s
42 ; CHECK-MIPS32R2: movt.s
43 %cmp = fcmp olt float %f2, %f3
44 %cond = select i1 %cmp, float %f0, float %f1
48 define float @sel5(float %f0, float %f1, float %f2, float %f3) nounwind readnone {
50 ; CHECK-MIPS32R2: c.ule.s
51 ; CHECK-MIPS32R2: movf.s
52 %cmp = fcmp ogt float %f2, %f3
53 %cond = select i1 %cmp, float %f0, float %f1
57 define double @sel5_1(double %f0, double %f1, float %f2, float %f3) nounwind readnone {
59 ; CHECK-MIPS32R2: c.ule.s
60 ; CHECK-MIPS32R2: movf.d
61 %cmp = fcmp ogt float %f2, %f3
62 %cond = select i1 %cmp, double %f0, double %f1
66 define double @sel6(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
68 ; CHECK-MIPS32R2: c.eq.d
69 ; CHECK-MIPS32R2: movt.d
70 %cmp = fcmp oeq double %f2, %f3
71 %cond = select i1 %cmp, double %f0, double %f1
75 define double @sel7(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
77 ; CHECK-MIPS32R2: c.olt.d
78 ; CHECK-MIPS32R2: movt.d
79 %cmp = fcmp olt double %f2, %f3
80 %cond = select i1 %cmp, double %f0, double %f1
84 define double @sel8(double %f0, double %f1, double %f2, double %f3) nounwind readnone {
86 ; CHECK-MIPS32R2: c.ule.d
87 ; CHECK-MIPS32R2: movf.d
88 %cmp = fcmp ogt double %f2, %f3
89 %cond = select i1 %cmp, double %f0, double %f1
93 define float @sel8_1(float %f0, float %f1, double %f2, double %f3) nounwind readnone {
95 ; CHECK-MIPS32R2: c.ule.d
96 ; CHECK-MIPS32R2: movf.s
97 %cmp = fcmp ogt double %f2, %f3
98 %cond = select i1 %cmp, float %f0, float %f1
102 define i32 @sel9(i32 %f0, i32 %f1, float %f2, float %f3) nounwind readnone {
104 ; CHECK-MIPS32R2: c.eq.s
105 ; CHECK-MIPS32R2: movt
106 %cmp = fcmp oeq float %f2, %f3
107 %cond = select i1 %cmp, i32 %f0, i32 %f1
111 define i32 @sel10(i32 %f0, i32 %f1, float %f2, float %f3) nounwind readnone {
113 ; CHECK-MIPS32R2: c.olt.s
114 ; CHECK-MIPS32R2: movt
115 %cmp = fcmp olt float %f2, %f3
116 %cond = select i1 %cmp, i32 %f0, i32 %f1
120 define i32 @sel11(i32 %f0, i32 %f1, float %f2, float %f3) nounwind readnone {
122 ; CHECK-MIPS32R2: c.ule.s
123 ; CHECK-MIPS32R2: movf
124 %cmp = fcmp ogt float %f2, %f3
125 %cond = select i1 %cmp, i32 %f0, i32 %f1
129 define i32 @sel12(i32 %f0, i32 %f1) nounwind readonly {
131 ; CHECK-MIPS32R2: c.eq.d
132 ; CHECK-MIPS32R2: movt
133 %tmp = load double* @d2, align 8, !tbaa !0
134 %tmp1 = load double* @d3, align 8, !tbaa !0
135 %cmp = fcmp oeq double %tmp, %tmp1
136 %cond = select i1 %cmp, i32 %f0, i32 %f1
140 define i32 @sel13(i32 %f0, i32 %f1) nounwind readonly {
142 ; CHECK-MIPS32R2: c.olt.d
143 ; CHECK-MIPS32R2: movt
144 %tmp = load double* @d2, align 8, !tbaa !0
145 %tmp1 = load double* @d3, align 8, !tbaa !0
146 %cmp = fcmp olt double %tmp, %tmp1
147 %cond = select i1 %cmp, i32 %f0, i32 %f1
151 define i32 @sel14(i32 %f0, i32 %f1) nounwind readonly {
153 ; CHECK-MIPS32R2: c.ule.d
154 ; CHECK-MIPS32R2: movf
155 %tmp = load double* @d2, align 8, !tbaa !0
156 %tmp1 = load double* @d3, align 8, !tbaa !0
157 %cmp = fcmp ogt double %tmp, %tmp1
158 %cond = select i1 %cmp, i32 %f0, i32 %f1
162 !0 = metadata !{metadata !"double", metadata !1}
163 !1 = metadata !{metadata !"omnipotent char", metadata !2}
164 !2 = metadata !{metadata !"Simple C/C++ TBAA", null}