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