1*9880d681SAndroid Build Coastguard Worker; Test f64 and v2f64 comparisons. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Worker; Test oeq. 6*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f1(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f1: 8*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb %v24, %v26, %v28 9*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 10*9880d681SAndroid Build Coastguard Worker %cmp = fcmp oeq <2 x double> %val1, %val2 11*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 12*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 13*9880d681SAndroid Build Coastguard Worker} 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker; Test one. 16*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f2(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 17*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f2: 18*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26 19*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v26, %v28 20*9880d681SAndroid Build Coastguard Worker; CHECK: vo %v24, [[REG1]], [[REG2]] 21*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 22*9880d681SAndroid Build Coastguard Worker %cmp = fcmp one <2 x double> %val1, %val2 23*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 24*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 25*9880d681SAndroid Build Coastguard Worker} 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker; Test ogt. 28*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f3(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 29*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f3: 30*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb %v24, %v26, %v28 31*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 32*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ogt <2 x double> %val1, %val2 33*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 34*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 35*9880d681SAndroid Build Coastguard Worker} 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Worker; Test oge. 38*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f4(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 39*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f4: 40*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb %v24, %v26, %v28 41*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 42*9880d681SAndroid Build Coastguard Worker %cmp = fcmp oge <2 x double> %val1, %val2 43*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 44*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Worker 47*9880d681SAndroid Build Coastguard Worker; Test ole. 48*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f5(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 49*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f5: 50*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb %v24, %v28, %v26 51*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 52*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ole <2 x double> %val1, %val2 53*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 54*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 55*9880d681SAndroid Build Coastguard Worker} 56*9880d681SAndroid Build Coastguard Worker 57*9880d681SAndroid Build Coastguard Worker; Test olt. 58*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f6(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f6: 60*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb %v24, %v28, %v26 61*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 62*9880d681SAndroid Build Coastguard Worker %cmp = fcmp olt <2 x double> %val1, %val2 63*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 64*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 65*9880d681SAndroid Build Coastguard Worker} 66*9880d681SAndroid Build Coastguard Worker 67*9880d681SAndroid Build Coastguard Worker; Test ueq. 68*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f7(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 69*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f7: 70*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26 71*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v26, %v28 72*9880d681SAndroid Build Coastguard Worker; CHECK: vno %v24, [[REG1]], [[REG2]] 73*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 74*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ueq <2 x double> %val1, %val2 75*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 76*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 77*9880d681SAndroid Build Coastguard Worker} 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; Test une. 80*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f8(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 81*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f8: 82*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb [[REG:%v[0-9]+]], %v26, %v28 83*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]] 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 85*9880d681SAndroid Build Coastguard Worker %cmp = fcmp une <2 x double> %val1, %val2 86*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 87*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; Test ugt. 91*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f9(<2 x i64> %dummy, <2 x double> %val1, <2 x double> %val2) { 92*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f9: 93*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v28, %v26 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]] 95*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 96*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ugt <2 x double> %val1, %val2 97*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 98*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 99*9880d681SAndroid Build Coastguard Worker} 100*9880d681SAndroid Build Coastguard Worker 101*9880d681SAndroid Build Coastguard Worker; Test uge. 102*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f10(<2 x i64> %dummy, <2 x double> %val1, 103*9880d681SAndroid Build Coastguard Worker <2 x double> %val2) { 104*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f10: 105*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v28, %v26 106*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]] 107*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 108*9880d681SAndroid Build Coastguard Worker %cmp = fcmp uge <2 x double> %val1, %val2 109*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 110*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 111*9880d681SAndroid Build Coastguard Worker} 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; Test ule. 114*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f11(<2 x i64> %dummy, <2 x double> %val1, 115*9880d681SAndroid Build Coastguard Worker <2 x double> %val2) { 116*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f11: 117*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v28 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]] 119*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 120*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ule <2 x double> %val1, %val2 121*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 122*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 123*9880d681SAndroid Build Coastguard Worker} 124*9880d681SAndroid Build Coastguard Worker 125*9880d681SAndroid Build Coastguard Worker; Test ult. 126*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f12(<2 x i64> %dummy, <2 x double> %val1, 127*9880d681SAndroid Build Coastguard Worker <2 x double> %val2) { 128*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f12: 129*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v28 130*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vno %v24, [[REG]], [[REG]] 131*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 132*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ult <2 x double> %val1, %val2 133*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 134*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 135*9880d681SAndroid Build Coastguard Worker} 136*9880d681SAndroid Build Coastguard Worker 137*9880d681SAndroid Build Coastguard Worker; Test ord. 138*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f13(<2 x i64> %dummy, <2 x double> %val1, 139*9880d681SAndroid Build Coastguard Worker <2 x double> %val2) { 140*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f13: 141*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26 142*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v26, %v28 143*9880d681SAndroid Build Coastguard Worker; CHECK: vo %v24, [[REG1]], [[REG2]] 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 145*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ord <2 x double> %val1, %val2 146*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 147*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 148*9880d681SAndroid Build Coastguard Worker} 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Worker; Test uno. 151*9880d681SAndroid Build Coastguard Workerdefine <2 x i64> @f14(<2 x i64> %dummy, <2 x double> %val1, 152*9880d681SAndroid Build Coastguard Worker <2 x double> %val2) { 153*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f14: 154*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v28, %v26 155*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v26, %v28 156*9880d681SAndroid Build Coastguard Worker; CHECK: vno %v24, [[REG1]], [[REG2]] 157*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 158*9880d681SAndroid Build Coastguard Worker %cmp = fcmp uno <2 x double> %val1, %val2 159*9880d681SAndroid Build Coastguard Worker %ret = sext <2 x i1> %cmp to <2 x i64> 160*9880d681SAndroid Build Coastguard Worker ret <2 x i64> %ret 161*9880d681SAndroid Build Coastguard Worker} 162*9880d681SAndroid Build Coastguard Worker 163*9880d681SAndroid Build Coastguard Worker; Test oeq selects. 164*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f15(<2 x double> %val1, <2 x double> %val2, 165*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 166*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f15: 167*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb [[REG:%v[0-9]+]], %v24, %v26 168*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 169*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 170*9880d681SAndroid Build Coastguard Worker %cmp = fcmp oeq <2 x double> %val1, %val2 171*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 172*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 173*9880d681SAndroid Build Coastguard Worker} 174*9880d681SAndroid Build Coastguard Worker 175*9880d681SAndroid Build Coastguard Worker; Test one selects. 176*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f16(<2 x double> %val1, <2 x double> %val2, 177*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 178*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f16: 179*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24 180*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v24, %v26 181*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]] 182*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 183*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 184*9880d681SAndroid Build Coastguard Worker %cmp = fcmp one <2 x double> %val1, %val2 185*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 186*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 187*9880d681SAndroid Build Coastguard Worker} 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Worker; Test ogt selects. 190*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f17(<2 x double> %val1, <2 x double> %val2, 191*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 192*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f17: 193*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v24, %v26 194*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 195*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 196*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ogt <2 x double> %val1, %val2 197*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 198*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 199*9880d681SAndroid Build Coastguard Worker} 200*9880d681SAndroid Build Coastguard Worker 201*9880d681SAndroid Build Coastguard Worker; Test oge selects. 202*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f18(<2 x double> %val1, <2 x double> %val2, 203*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 204*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f18: 205*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v24, %v26 206*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 207*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 208*9880d681SAndroid Build Coastguard Worker %cmp = fcmp oge <2 x double> %val1, %val2 209*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 210*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 211*9880d681SAndroid Build Coastguard Worker} 212*9880d681SAndroid Build Coastguard Worker 213*9880d681SAndroid Build Coastguard Worker; Test ole selects. 214*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f19(<2 x double> %val1, <2 x double> %val2, 215*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 216*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f19: 217*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v24 218*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 219*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 220*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ole <2 x double> %val1, %val2 221*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 222*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 223*9880d681SAndroid Build Coastguard Worker} 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker; Test olt selects. 226*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f20(<2 x double> %val1, <2 x double> %val2, 227*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 228*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f20: 229*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v24 230*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 231*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 232*9880d681SAndroid Build Coastguard Worker %cmp = fcmp olt <2 x double> %val1, %val2 233*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 234*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 235*9880d681SAndroid Build Coastguard Worker} 236*9880d681SAndroid Build Coastguard Worker 237*9880d681SAndroid Build Coastguard Worker; Test ueq selects. 238*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f21(<2 x double> %val1, <2 x double> %val2, 239*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 240*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f21: 241*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24 242*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG2:%v[0-9]+]], %v24, %v26 243*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]] 244*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 245*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 246*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ueq <2 x double> %val1, %val2 247*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 248*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 249*9880d681SAndroid Build Coastguard Worker} 250*9880d681SAndroid Build Coastguard Worker 251*9880d681SAndroid Build Coastguard Worker; Test une selects. 252*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f22(<2 x double> %val1, <2 x double> %val2, 253*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 254*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f22: 255*9880d681SAndroid Build Coastguard Worker; CHECK: vfcedb [[REG:%v[0-9]+]], %v24, %v26 256*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 257*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 258*9880d681SAndroid Build Coastguard Worker %cmp = fcmp une <2 x double> %val1, %val2 259*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 260*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 261*9880d681SAndroid Build Coastguard Worker} 262*9880d681SAndroid Build Coastguard Worker 263*9880d681SAndroid Build Coastguard Worker; Test ugt selects. 264*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f23(<2 x double> %val1, <2 x double> %val2, 265*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 266*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f23: 267*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v26, %v24 268*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 269*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 270*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ugt <2 x double> %val1, %val2 271*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 272*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 273*9880d681SAndroid Build Coastguard Worker} 274*9880d681SAndroid Build Coastguard Worker 275*9880d681SAndroid Build Coastguard Worker; Test uge selects. 276*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f24(<2 x double> %val1, <2 x double> %val2, 277*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 278*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f24: 279*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v26, %v24 280*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 281*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 282*9880d681SAndroid Build Coastguard Worker %cmp = fcmp uge <2 x double> %val1, %val2 283*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 284*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 285*9880d681SAndroid Build Coastguard Worker} 286*9880d681SAndroid Build Coastguard Worker 287*9880d681SAndroid Build Coastguard Worker; Test ule selects. 288*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f25(<2 x double> %val1, <2 x double> %val2, 289*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 290*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f25: 291*9880d681SAndroid Build Coastguard Worker; CHECK: vfchdb [[REG:%v[0-9]+]], %v24, %v26 292*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 293*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 294*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ule <2 x double> %val1, %val2 295*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 296*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Worker; Test ult selects. 300*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f26(<2 x double> %val1, <2 x double> %val2, 301*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 302*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f26: 303*9880d681SAndroid Build Coastguard Worker; CHECK: vfchedb [[REG:%v[0-9]+]], %v24, %v26 304*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 305*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 306*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ult <2 x double> %val1, %val2 307*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 308*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 309*9880d681SAndroid Build Coastguard Worker} 310*9880d681SAndroid Build Coastguard Worker 311*9880d681SAndroid Build Coastguard Worker; Test ord selects. 312*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f27(<2 x double> %val1, <2 x double> %val2, 313*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 314*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f27: 315*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24 316*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v24, %v26 317*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]] 318*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 319*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 320*9880d681SAndroid Build Coastguard Worker %cmp = fcmp ord <2 x double> %val1, %val2 321*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 322*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 323*9880d681SAndroid Build Coastguard Worker} 324*9880d681SAndroid Build Coastguard Worker 325*9880d681SAndroid Build Coastguard Worker; Test uno selects. 326*9880d681SAndroid Build Coastguard Workerdefine <2 x double> @f28(<2 x double> %val1, <2 x double> %val2, 327*9880d681SAndroid Build Coastguard Worker <2 x double> %val3, <2 x double> %val4) { 328*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f28: 329*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchdb [[REG1:%v[0-9]+]], %v26, %v24 330*9880d681SAndroid Build Coastguard Worker; CHECK-DAG: vfchedb [[REG2:%v[0-9]+]], %v24, %v26 331*9880d681SAndroid Build Coastguard Worker; CHECK: vo [[REG:%v[0-9]+]], [[REG1]], [[REG2]] 332*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 333*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br %r14 334*9880d681SAndroid Build Coastguard Worker %cmp = fcmp uno <2 x double> %val1, %val2 335*9880d681SAndroid Build Coastguard Worker %ret = select <2 x i1> %cmp, <2 x double> %val3, <2 x double> %val4 336*9880d681SAndroid Build Coastguard Worker ret <2 x double> %ret 337*9880d681SAndroid Build Coastguard Worker} 338*9880d681SAndroid Build Coastguard Worker 339*9880d681SAndroid Build Coastguard Worker; Test an f64 comparison that uses vector registers. 340*9880d681SAndroid Build Coastguard Workerdefine i64 @f29(i64 %a, i64 %b, double %f1, <2 x double> %vec) { 341*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: f29: 342*9880d681SAndroid Build Coastguard Worker; CHECK: wfcdb %f0, %v24 343*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: locgrne %r2, %r3 344*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 345*9880d681SAndroid Build Coastguard Worker %f2 = extractelement <2 x double> %vec, i32 0 346*9880d681SAndroid Build Coastguard Worker %cond = fcmp oeq double %f1, %f2 347*9880d681SAndroid Build Coastguard Worker %res = select i1 %cond, i64 %a, i64 %b 348*9880d681SAndroid Build Coastguard Worker ret i64 %res 349*9880d681SAndroid Build Coastguard Worker} 350