• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc < %s -mtriple=ve-unknown-unknown | FileCheck %s
2
3define double @minf64(double, double) {
4; CHECK-LABEL: minf64:
5; CHECK:       # %bb.0:
6; CHECK-NEXT:    fmin.d %s0, %s0, %s1
7; CHECK-NEXT:    b.l.t (, %s10)
8  %3 = fcmp olt double %0, %1
9  %4 = select i1 %3, double %0, double %1
10  ret double %4
11}
12
13define double @min2f64(double, double) {
14; CHECK-LABEL: min2f64:
15; CHECK:       # %bb.0:
16; CHECK-NEXT:    fmin.d %s0, %s0, %s1
17; CHECK-NEXT:    b.l.t (, %s10)
18  %3 = fcmp ole double %0, %1
19  %4 = select i1 %3, double %0, double %1
20  ret double %4
21}
22
23define double @minuf64(double, double) {
24; CHECK-LABEL: minuf64:
25; CHECK:       # %bb.0:
26; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
27; CHECK-NEXT:    cmov.d.ltnan %s1, %s0, %s2
28; CHECK-NEXT:    or %s0, 0, %s1
29; CHECK-NEXT:    b.l.t (, %s10)
30  %3 = fcmp ult double %0, %1
31  %4 = select i1 %3, double %0, double %1
32  ret double %4
33}
34
35define double @min2uf64(double, double) {
36; CHECK-LABEL: min2uf64:
37; CHECK:       # %bb.0:
38; CHECK-NEXT:    fcmp.d %s2, %s0, %s1
39; CHECK-NEXT:    cmov.d.lenan %s1, %s0, %s2
40; CHECK-NEXT:    or %s0, 0, %s1
41; CHECK-NEXT:    b.l.t (, %s10)
42  %3 = fcmp ule double %0, %1
43  %4 = select i1 %3, double %0, double %1
44  ret double %4
45}
46
47define float @minf32(float, float) {
48; CHECK-LABEL: minf32:
49; CHECK:       # %bb.0:
50; CHECK-NEXT:    fmin.s %s0, %s0, %s1
51; CHECK-NEXT:    b.l.t (, %s10)
52  %3 = fcmp olt float %0, %1
53  %4 = select i1 %3, float %0, float %1
54  ret float %4
55}
56
57define float @min2f32(float, float) {
58; CHECK-LABEL: min2f32:
59; CHECK:       # %bb.0:
60; CHECK-NEXT:    fmin.s %s0, %s0, %s1
61; CHECK-NEXT:    b.l.t (, %s10)
62  %3 = fcmp ole float %0, %1
63  %4 = select i1 %3, float %0, float %1
64  ret float %4
65}
66
67define float @minuf32(float, float) {
68; CHECK-LABEL: minuf32:
69; CHECK:       # %bb.0:
70; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
71; CHECK-NEXT:    cmov.s.ltnan %s1, %s0, %s2
72; CHECK-NEXT:    or %s0, 0, %s1
73; CHECK-NEXT:    b.l.t (, %s10)
74  %3 = fcmp ult float %0, %1
75  %4 = select i1 %3, float %0, float %1
76  ret float %4
77}
78
79define float @min2uf32(float, float) {
80; CHECK-LABEL: min2uf32:
81; CHECK:       # %bb.0:
82; CHECK-NEXT:    fcmp.s %s2, %s0, %s1
83; CHECK-NEXT:    cmov.s.lenan %s1, %s0, %s2
84; CHECK-NEXT:    or %s0, 0, %s1
85; CHECK-NEXT:    b.l.t (, %s10)
86  %3 = fcmp ule float %0, %1
87  %4 = select i1 %3, float %0, float %1
88  ret float %4
89}
90
91define i64 @mini64(i64, i64) {
92; CHECK-LABEL: mini64:
93; CHECK:       # %bb.0:
94; CHECK-NEXT:    mins.l %s0, %s0, %s1
95; CHECK-NEXT:    b.l.t (, %s10)
96  %3 = icmp slt i64 %0, %1
97  %4 = select i1 %3, i64 %0, i64 %1
98  ret i64 %4
99}
100
101define i64 @min2i64(i64, i64) {
102; CHECK-LABEL: min2i64:
103; CHECK:       # %bb.0:
104; CHECK-NEXT:    mins.l %s0, %s0, %s1
105; CHECK-NEXT:    b.l.t (, %s10)
106  %3 = icmp sle i64 %0, %1
107  %4 = select i1 %3, i64 %0, i64 %1
108  ret i64 %4
109}
110
111define i64 @minu64(i64, i64) {
112; CHECK-LABEL: minu64:
113; CHECK:       # %bb.0:
114; CHECK-NEXT:    cmpu.l %s2, %s0, %s1
115; CHECK-NEXT:    cmov.l.lt %s1, %s0, %s2
116; CHECK-NEXT:    or %s0, 0, %s1
117; CHECK-NEXT:    b.l.t (, %s10)
118  %3 = icmp ult i64 %0, %1
119  %4 = select i1 %3, i64 %0, i64 %1
120  ret i64 %4
121}
122
123define i64 @min2u64(i64, i64) {
124; CHECK-LABEL: min2u64:
125; CHECK:       # %bb.0:
126; CHECK-NEXT:    cmpu.l %s2, %s0, %s1
127; CHECK-NEXT:    cmov.l.le %s1, %s0, %s2
128; CHECK-NEXT:    or %s0, 0, %s1
129; CHECK-NEXT:    b.l.t (, %s10)
130  %3 = icmp ule i64 %0, %1
131  %4 = select i1 %3, i64 %0, i64 %1
132  ret i64 %4
133}
134
135define i32 @mini32(i32, i32) {
136; CHECK-LABEL: mini32:
137; CHECK:       # %bb.0:
138; CHECK-NEXT:    mins.w.sx %s0, %s0, %s1
139; CHECK-NEXT:    b.l.t (, %s10)
140  %3 = icmp slt i32 %0, %1
141  %4 = select i1 %3, i32 %0, i32 %1
142  ret i32 %4
143}
144
145define i32 @min2i32(i32, i32) {
146; CHECK-LABEL: min2i32:
147; CHECK:       # %bb.0:
148; CHECK-NEXT:    mins.w.sx %s0, %s0, %s1
149; CHECK-NEXT:    b.l.t (, %s10)
150  %3 = icmp sle i32 %0, %1
151  %4 = select i1 %3, i32 %0, i32 %1
152  ret i32 %4
153}
154
155define i32 @minu32(i32, i32) {
156; CHECK-LABEL: minu32:
157; CHECK:       # %bb.0:
158; CHECK-NEXT:    cmpu.w %s2, %s0, %s1
159; CHECK-NEXT:    cmov.w.lt %s1, %s0, %s2
160; CHECK-NEXT:    or %s0, 0, %s1
161; CHECK-NEXT:    b.l.t (, %s10)
162  %3 = icmp ult i32 %0, %1
163  %4 = select i1 %3, i32 %0, i32 %1
164  ret i32 %4
165}
166
167define i32 @min2u32(i32, i32) {
168; CHECK-LABEL: min2u32:
169; CHECK:       # %bb.0:
170; CHECK-NEXT:    cmpu.w %s2, %s0, %s1
171; CHECK-NEXT:    cmov.w.le %s1, %s0, %s2
172; CHECK-NEXT:    or %s0, 0, %s1
173; CHECK-NEXT:    b.l.t (, %s10)
174  %3 = icmp ule i32 %0, %1
175  %4 = select i1 %3, i32 %0, i32 %1
176  ret i32 %4
177}
178
179define zeroext i1 @mini1(i1 zeroext, i1 zeroext) {
180; CHECK-LABEL: mini1:
181; CHECK:       # %bb.0:
182; CHECK-NEXT:    and %s2, %s1, %s0
183; CHECK-NEXT:    cmov.w.ne %s2, %s1, %s0
184; CHECK-NEXT:    adds.w.zx %s0, %s2, (0)1
185; CHECK-NEXT:    b.l.t (, %s10)
186  %3 = xor i1 %0, true
187  %4 = and i1 %3, %1
188  %5 = select i1 %4, i1 %0, i1 %1
189  ret i1 %5
190}
191