1 ; Test v4f32 comparisons. 2 ; 3 ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s 4 5 ; Test oeq. 6 define <4 x i32> @f1(<4 x float> %val1, <4 x float> %val2) { 7 ; CHECK-LABEL: f1: 8 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 9 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 10 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 11 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 12 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 13 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 14 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 15 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 16 ; CHECK-DAG: vfcedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 17 ; CHECK-DAG: vfcedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 18 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]] 19 ; CHECK-NEXT: br %r14 20 %cmp = fcmp oeq <4 x float> %val1, %val2 21 %ret = sext <4 x i1> %cmp to <4 x i32> 22 ret <4 x i32> %ret 23 } 24 25 ; Test one. 26 define <4 x i32> @f2(<4 x float> %val1, <4 x float> %val2) { 27 ; CHECK-LABEL: f2: 28 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 29 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 30 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 31 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 32 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 33 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 34 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 35 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 36 ; CHECK-DAG: vfchdb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 37 ; CHECK-DAG: vfchdb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 38 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 39 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 40 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]] 41 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]] 42 ; CHECK: vo %v24, [[RES1]], [[RES0]] 43 ; CHECK-NEXT: br %r14 44 %cmp = fcmp one <4 x float> %val1, %val2 45 %ret = sext <4 x i1> %cmp to <4 x i32> 46 ret <4 x i32> %ret 47 } 48 49 ; Test ogt. 50 define <4 x i32> @f3(<4 x float> %val1, <4 x float> %val2) { 51 ; CHECK-LABEL: f3: 52 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 53 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 54 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 55 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 56 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 57 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 58 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 59 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 60 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 61 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 62 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]] 63 ; CHECK-NEXT: br %r14 64 %cmp = fcmp ogt <4 x float> %val1, %val2 65 %ret = sext <4 x i1> %cmp to <4 x i32> 66 ret <4 x i32> %ret 67 } 68 69 ; Test oge. 70 define <4 x i32> @f4(<4 x float> %val1, <4 x float> %val2) { 71 ; CHECK-LABEL: f4: 72 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 73 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 74 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 75 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 76 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 77 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 78 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 79 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 80 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 81 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 82 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]] 83 ; CHECK-NEXT: br %r14 84 %cmp = fcmp oge <4 x float> %val1, %val2 85 %ret = sext <4 x i1> %cmp to <4 x i32> 86 ret <4 x i32> %ret 87 } 88 89 ; Test ole. 90 define <4 x i32> @f5(<4 x float> %val1, <4 x float> %val2) { 91 ; CHECK-LABEL: f5: 92 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 93 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 94 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 95 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 96 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 97 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 98 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 99 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 100 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 101 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 102 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]] 103 ; CHECK-NEXT: br %r14 104 %cmp = fcmp ole <4 x float> %val1, %val2 105 %ret = sext <4 x i1> %cmp to <4 x i32> 106 ret <4 x i32> %ret 107 } 108 109 ; Test olt. 110 define <4 x i32> @f6(<4 x float> %val1, <4 x float> %val2) { 111 ; CHECK-LABEL: f6: 112 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 113 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 114 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 115 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 116 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 117 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 118 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 119 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 120 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 121 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 122 ; CHECK: vpkg %v24, [[HIGHRES]], [[LOWRES]] 123 ; CHECK-NEXT: br %r14 124 %cmp = fcmp olt <4 x float> %val1, %val2 125 %ret = sext <4 x i1> %cmp to <4 x i32> 126 ret <4 x i32> %ret 127 } 128 129 ; Test ueq. 130 define <4 x i32> @f7(<4 x float> %val1, <4 x float> %val2) { 131 ; CHECK-LABEL: f7: 132 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 133 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 134 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 135 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 136 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 137 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 138 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 139 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 140 ; CHECK-DAG: vfchdb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 141 ; CHECK-DAG: vfchdb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 142 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 143 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 144 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]] 145 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]] 146 ; CHECK: vno %v24, [[RES1]], [[RES0]] 147 ; CHECK-NEXT: br %r14 148 %cmp = fcmp ueq <4 x float> %val1, %val2 149 %ret = sext <4 x i1> %cmp to <4 x i32> 150 ret <4 x i32> %ret 151 } 152 153 ; Test une. 154 define <4 x i32> @f8(<4 x float> %val1, <4 x float> %val2) { 155 ; CHECK-LABEL: f8: 156 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 157 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 158 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 159 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 160 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 161 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 162 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 163 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 164 ; CHECK-DAG: vfcedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 165 ; CHECK-DAG: vfcedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 166 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]] 167 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]] 168 ; CHECK-NEXT: br %r14 169 %cmp = fcmp une <4 x float> %val1, %val2 170 %ret = sext <4 x i1> %cmp to <4 x i32> 171 ret <4 x i32> %ret 172 } 173 174 ; Test ugt. 175 define <4 x i32> @f9(<4 x float> %val1, <4 x float> %val2) { 176 ; CHECK-LABEL: f9: 177 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 178 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 179 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 180 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 181 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 182 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 183 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 184 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 185 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 186 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 187 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]] 188 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]] 189 ; CHECK-NEXT: br %r14 190 %cmp = fcmp ugt <4 x float> %val1, %val2 191 %ret = sext <4 x i1> %cmp to <4 x i32> 192 ret <4 x i32> %ret 193 } 194 195 ; Test uge. 196 define <4 x i32> @f10(<4 x float> %val1, <4 x float> %val2) { 197 ; CHECK-LABEL: f10: 198 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 199 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 200 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 201 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 202 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 203 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 204 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 205 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 206 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 207 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 208 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]] 209 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]] 210 ; CHECK-NEXT: br %r14 211 %cmp = fcmp uge <4 x float> %val1, %val2 212 %ret = sext <4 x i1> %cmp to <4 x i32> 213 ret <4 x i32> %ret 214 } 215 216 ; Test ule. 217 define <4 x i32> @f11(<4 x float> %val1, <4 x float> %val2) { 218 ; CHECK-LABEL: f11: 219 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 220 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 221 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 222 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 223 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 224 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 225 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 226 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 227 ; CHECK-DAG: vfchdb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 228 ; CHECK-DAG: vfchdb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 229 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]] 230 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]] 231 ; CHECK-NEXT: br %r14 232 %cmp = fcmp ule <4 x float> %val1, %val2 233 %ret = sext <4 x i1> %cmp to <4 x i32> 234 ret <4 x i32> %ret 235 } 236 237 ; Test ult. 238 define <4 x i32> @f12(<4 x float> %val1, <4 x float> %val2) { 239 ; CHECK-LABEL: f12: 240 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 241 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 242 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 243 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 244 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 245 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 246 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 247 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 248 ; CHECK-DAG: vfchedb [[HIGHRES:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 249 ; CHECK-DAG: vfchedb [[LOWRES:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 250 ; CHECK: vpkg [[RES:%v[0-9]+]], [[HIGHRES]], [[LOWRES]] 251 ; CHECK-NEXT: vno %v24, [[RES]], [[RES]] 252 ; CHECK-NEXT: br %r14 253 %cmp = fcmp ult <4 x float> %val1, %val2 254 %ret = sext <4 x i1> %cmp to <4 x i32> 255 ret <4 x i32> %ret 256 } 257 258 ; Test ord. 259 define <4 x i32> @f13(<4 x float> %val1, <4 x float> %val2) { 260 ; CHECK-LABEL: f13: 261 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 262 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 263 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 264 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 265 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 266 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 267 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 268 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 269 ; CHECK-DAG: vfchedb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 270 ; CHECK-DAG: vfchedb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 271 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 272 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 273 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]] 274 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]] 275 ; CHECK: vo %v24, [[RES1]], [[RES0]] 276 ; CHECK-NEXT: br %r14 277 %cmp = fcmp ord <4 x float> %val1, %val2 278 %ret = sext <4 x i1> %cmp to <4 x i32> 279 ret <4 x i32> %ret 280 } 281 282 ; Test uno. 283 define <4 x i32> @f14(<4 x float> %val1, <4 x float> %val2) { 284 ; CHECK-LABEL: f14: 285 ; CHECK-DAG: vmrhf [[HIGH0E:%v[0-9]+]], %v24, %v24 286 ; CHECK-DAG: vmrlf [[LOW0E:%v[0-9]+]], %v24, %v24 287 ; CHECK-DAG: vmrhf [[HIGH1E:%v[0-9]+]], %v26, %v26 288 ; CHECK-DAG: vmrlf [[LOW1E:%v[0-9]+]], %v26, %v26 289 ; CHECK-DAG: vldeb [[HIGH0D:%v[0-9]+]], [[HIGH0E]] 290 ; CHECK-DAG: vldeb [[HIGH1D:%v[0-9]+]], [[HIGH1E]] 291 ; CHECK-DAG: vldeb [[LOW0D:%v[0-9]+]], [[LOW0E]] 292 ; CHECK-DAG: vldeb [[LOW1D:%v[0-9]+]], [[LOW1E]] 293 ; CHECK-DAG: vfchedb [[HIGHRES0:%v[0-9]+]], [[HIGH0D]], [[HIGH1D]] 294 ; CHECK-DAG: vfchedb [[LOWRES0:%v[0-9]+]], [[LOW0D]], [[LOW1D]] 295 ; CHECK-DAG: vfchdb [[HIGHRES1:%v[0-9]+]], [[HIGH1D]], [[HIGH0D]] 296 ; CHECK-DAG: vfchdb [[LOWRES1:%v[0-9]+]], [[LOW1D]], [[LOW0D]] 297 ; CHECK-DAG: vpkg [[RES0:%v[0-9]+]], [[HIGHRES0]], [[LOWRES0]] 298 ; CHECK-DAG: vpkg [[RES1:%v[0-9]+]], [[HIGHRES1]], [[LOWRES1]] 299 ; CHECK: vno %v24, [[RES1]], [[RES0]] 300 ; CHECK-NEXT: br %r14 301 %cmp = fcmp uno <4 x float> %val1, %val2 302 %ret = sext <4 x i1> %cmp to <4 x i32> 303 ret <4 x i32> %ret 304 } 305 306 ; Test oeq selects. 307 define <4 x float> @f15(<4 x float> %val1, <4 x float> %val2, 308 <4 x float> %val3, <4 x float> %val4) { 309 ; CHECK-LABEL: f15: 310 ; CHECK: vpkg [[REG:%v[0-9]+]], 311 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 312 ; CHECK-NEXT: br %r14 313 %cmp = fcmp oeq <4 x float> %val1, %val2 314 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 315 ret <4 x float> %ret 316 } 317 318 ; Test one selects. 319 define <4 x float> @f16(<4 x float> %val1, <4 x float> %val2, 320 <4 x float> %val3, <4 x float> %val4) { 321 ; CHECK-LABEL: f16: 322 ; CHECK: vo [[REG:%v[0-9]+]], 323 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 324 ; CHECK-NEXT: br %r14 325 %cmp = fcmp one <4 x float> %val1, %val2 326 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 327 ret <4 x float> %ret 328 } 329 330 ; Test ogt selects. 331 define <4 x float> @f17(<4 x float> %val1, <4 x float> %val2, 332 <4 x float> %val3, <4 x float> %val4) { 333 ; CHECK-LABEL: f17: 334 ; CHECK: vpkg [[REG:%v[0-9]+]], 335 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 336 ; CHECK-NEXT: br %r14 337 %cmp = fcmp ogt <4 x float> %val1, %val2 338 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 339 ret <4 x float> %ret 340 } 341 342 ; Test oge selects. 343 define <4 x float> @f18(<4 x float> %val1, <4 x float> %val2, 344 <4 x float> %val3, <4 x float> %val4) { 345 ; CHECK-LABEL: f18: 346 ; CHECK: vpkg [[REG:%v[0-9]+]], 347 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 348 ; CHECK-NEXT: br %r14 349 %cmp = fcmp oge <4 x float> %val1, %val2 350 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 351 ret <4 x float> %ret 352 } 353 354 ; Test ole selects. 355 define <4 x float> @f19(<4 x float> %val1, <4 x float> %val2, 356 <4 x float> %val3, <4 x float> %val4) { 357 ; CHECK-LABEL: f19: 358 ; CHECK: vpkg [[REG:%v[0-9]+]], 359 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 360 ; CHECK-NEXT: br %r14 361 %cmp = fcmp ole <4 x float> %val1, %val2 362 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 363 ret <4 x float> %ret 364 } 365 366 ; Test olt selects. 367 define <4 x float> @f20(<4 x float> %val1, <4 x float> %val2, 368 <4 x float> %val3, <4 x float> %val4) { 369 ; CHECK-LABEL: f20: 370 ; CHECK: vpkg [[REG:%v[0-9]+]], 371 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 372 ; CHECK-NEXT: br %r14 373 %cmp = fcmp olt <4 x float> %val1, %val2 374 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 375 ret <4 x float> %ret 376 } 377 378 ; Test ueq selects. 379 define <4 x float> @f21(<4 x float> %val1, <4 x float> %val2, 380 <4 x float> %val3, <4 x float> %val4) { 381 ; CHECK-LABEL: f21: 382 ; CHECK: vo [[REG:%v[0-9]+]], 383 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 384 ; CHECK-NEXT: br %r14 385 %cmp = fcmp ueq <4 x float> %val1, %val2 386 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 387 ret <4 x float> %ret 388 } 389 390 ; Test une selects. 391 define <4 x float> @f22(<4 x float> %val1, <4 x float> %val2, 392 <4 x float> %val3, <4 x float> %val4) { 393 ; CHECK-LABEL: f22: 394 ; CHECK: vpkg [[REG:%v[0-9]+]], 395 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 396 ; CHECK-NEXT: br %r14 397 %cmp = fcmp une <4 x float> %val1, %val2 398 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 399 ret <4 x float> %ret 400 } 401 402 ; Test ugt selects. 403 define <4 x float> @f23(<4 x float> %val1, <4 x float> %val2, 404 <4 x float> %val3, <4 x float> %val4) { 405 ; CHECK-LABEL: f23: 406 ; CHECK: vpkg [[REG:%v[0-9]+]], 407 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 408 ; CHECK-NEXT: br %r14 409 %cmp = fcmp ugt <4 x float> %val1, %val2 410 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 411 ret <4 x float> %ret 412 } 413 414 ; Test uge selects. 415 define <4 x float> @f24(<4 x float> %val1, <4 x float> %val2, 416 <4 x float> %val3, <4 x float> %val4) { 417 ; CHECK-LABEL: f24: 418 ; CHECK: vpkg [[REG:%v[0-9]+]], 419 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 420 ; CHECK-NEXT: br %r14 421 %cmp = fcmp uge <4 x float> %val1, %val2 422 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 423 ret <4 x float> %ret 424 } 425 426 ; Test ule selects. 427 define <4 x float> @f25(<4 x float> %val1, <4 x float> %val2, 428 <4 x float> %val3, <4 x float> %val4) { 429 ; CHECK-LABEL: f25: 430 ; CHECK: vpkg [[REG:%v[0-9]+]], 431 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 432 ; CHECK-NEXT: br %r14 433 %cmp = fcmp ule <4 x float> %val1, %val2 434 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 435 ret <4 x float> %ret 436 } 437 438 ; Test ult selects. 439 define <4 x float> @f26(<4 x float> %val1, <4 x float> %val2, 440 <4 x float> %val3, <4 x float> %val4) { 441 ; CHECK-LABEL: f26: 442 ; CHECK: vpkg [[REG:%v[0-9]+]], 443 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 444 ; CHECK-NEXT: br %r14 445 %cmp = fcmp ult <4 x float> %val1, %val2 446 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 447 ret <4 x float> %ret 448 } 449 450 ; Test ord selects. 451 define <4 x float> @f27(<4 x float> %val1, <4 x float> %val2, 452 <4 x float> %val3, <4 x float> %val4) { 453 ; CHECK-LABEL: f27: 454 ; CHECK: vo [[REG:%v[0-9]+]], 455 ; CHECK-NEXT: vsel %v24, %v28, %v30, [[REG]] 456 ; CHECK-NEXT: br %r14 457 %cmp = fcmp ord <4 x float> %val1, %val2 458 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 459 ret <4 x float> %ret 460 } 461 462 ; Test uno selects. 463 define <4 x float> @f28(<4 x float> %val1, <4 x float> %val2, 464 <4 x float> %val3, <4 x float> %val4) { 465 ; CHECK-LABEL: f28: 466 ; CHECK: vo [[REG:%v[0-9]+]], 467 ; CHECK-NEXT: vsel %v24, %v30, %v28, [[REG]] 468 ; CHECK-NEXT: br %r14 469 %cmp = fcmp uno <4 x float> %val1, %val2 470 %ret = select <4 x i1> %cmp, <4 x float> %val3, <4 x float> %val4 471 ret <4 x float> %ret 472 } 473