Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s | FileCheck %s
      2 
      3 define <8 x i8> @cmeq8xi8(<8 x i8> %A, <8 x i8> %B) {
      4 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
      5 	%tmp3 = icmp eq <8 x i8> %A, %B;
      6    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
      7 	ret <8 x i8> %tmp4
      8 }
      9 
     10 define <16 x i8> @cmeq16xi8(<16 x i8> %A, <16 x i8> %B) {
     11 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     12 	%tmp3 = icmp eq <16 x i8> %A, %B;
     13    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
     14 	ret <16 x i8> %tmp4
     15 }
     16 
     17 define <4 x i16> @cmeq4xi16(<4 x i16> %A, <4 x i16> %B) {
     18 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     19 	%tmp3 = icmp eq <4 x i16> %A, %B;
     20    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
     21 	ret <4 x i16> %tmp4
     22 }
     23 
     24 define <8 x i16> @cmeq8xi16(<8 x i16> %A, <8 x i16> %B) {
     25 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     26 	%tmp3 = icmp eq <8 x i16> %A, %B;
     27    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
     28 	ret <8 x i16> %tmp4
     29 }
     30 
     31 define <2 x i32> @cmeq2xi32(<2 x i32> %A, <2 x i32> %B) {
     32 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     33 	%tmp3 = icmp eq <2 x i32> %A, %B;
     34    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
     35 	ret <2 x i32> %tmp4
     36 }
     37 
     38 define <4 x i32> @cmeq4xi32(<4 x i32> %A, <4 x i32> %B) {
     39 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     40 	%tmp3 = icmp eq <4 x i32> %A, %B;
     41    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
     42 	ret <4 x i32> %tmp4
     43 }
     44 
     45 define <2 x i64> @cmeq2xi64(<2 x i64> %A, <2 x i64> %B) {
     46 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
     47 	%tmp3 = icmp eq <2 x i64> %A, %B;
     48    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
     49 	ret <2 x i64> %tmp4
     50 }
     51 
     52 define <8 x i8> @cmne8xi8(<8 x i8> %A, <8 x i8> %B) {
     53 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     54 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
     55 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     56 	%tmp3 = icmp ne <8 x i8> %A, %B;
     57    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
     58 	ret <8 x i8> %tmp4
     59 }
     60 
     61 define <16 x i8> @cmne16xi8(<16 x i8> %A, <16 x i8> %B) {
     62 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     63 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
     64 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     65 	%tmp3 = icmp ne <16 x i8> %A, %B;
     66    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
     67 	ret <16 x i8> %tmp4
     68 }
     69 
     70 define <4 x i16> @cmne4xi16(<4 x i16> %A, <4 x i16> %B) {
     71 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     72 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
     73 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     74 	%tmp3 = icmp ne <4 x i16> %A, %B;
     75    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
     76 	ret <4 x i16> %tmp4
     77 }
     78 
     79 define <8 x i16> @cmne8xi16(<8 x i16> %A, <8 x i16> %B) {
     80 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     81 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
     82 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     83 	%tmp3 = icmp ne <8 x i16> %A, %B;
     84    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
     85 	ret <8 x i16> %tmp4
     86 }
     87 
     88 define <2 x i32> @cmne2xi32(<2 x i32> %A, <2 x i32> %B) {
     89 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     90 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
     91 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     92 	%tmp3 = icmp ne <2 x i32> %A, %B;
     93    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
     94 	ret <2 x i32> %tmp4
     95 }
     96 
     97 define <4 x i32> @cmne4xi32(<4 x i32> %A, <4 x i32> %B) {
     98 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     99 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
    100 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    101 	%tmp3 = icmp ne <4 x i32> %A, %B;
    102    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    103 	ret <4 x i32> %tmp4
    104 }
    105 
    106 define <2 x i64> @cmne2xi64(<2 x i64> %A, <2 x i64> %B) {
    107 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    108 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
    109 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    110 	%tmp3 = icmp ne <2 x i64> %A, %B;
    111    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    112 	ret <2 x i64> %tmp4
    113 }
    114 
    115 define <8 x i8> @cmgt8xi8(<8 x i8> %A, <8 x i8> %B) {
    116 ;CHECK: cmgt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    117 	%tmp3 = icmp sgt <8 x i8> %A, %B;
    118    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    119 	ret <8 x i8> %tmp4
    120 }
    121 
    122 define <16 x i8> @cmgt16xi8(<16 x i8> %A, <16 x i8> %B) {
    123 ;CHECK: cmgt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    124 	%tmp3 = icmp sgt <16 x i8> %A, %B;
    125    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    126 	ret <16 x i8> %tmp4
    127 }
    128 
    129 define <4 x i16> @cmgt4xi16(<4 x i16> %A, <4 x i16> %B) {
    130 ;CHECK: cmgt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    131 	%tmp3 = icmp sgt <4 x i16> %A, %B;
    132    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    133 	ret <4 x i16> %tmp4
    134 }
    135 
    136 define <8 x i16> @cmgt8xi16(<8 x i16> %A, <8 x i16> %B) {
    137 ;CHECK: cmgt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    138 	%tmp3 = icmp sgt <8 x i16> %A, %B;
    139    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    140 	ret <8 x i16> %tmp4
    141 }
    142 
    143 define <2 x i32> @cmgt2xi32(<2 x i32> %A, <2 x i32> %B) {
    144 ;CHECK: cmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    145 	%tmp3 = icmp sgt <2 x i32> %A, %B;
    146    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    147 	ret <2 x i32> %tmp4
    148 }
    149 
    150 define <4 x i32> @cmgt4xi32(<4 x i32> %A, <4 x i32> %B) {
    151 ;CHECK: cmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    152 	%tmp3 = icmp sgt <4 x i32> %A, %B;
    153    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    154 	ret <4 x i32> %tmp4
    155 }
    156 
    157 define <2 x i64> @cmgt2xi64(<2 x i64> %A, <2 x i64> %B) {
    158 ;CHECK: cmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    159 	%tmp3 = icmp sgt <2 x i64> %A, %B;
    160    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    161 	ret <2 x i64> %tmp4
    162 }
    163 
    164 define <8 x i8> @cmlt8xi8(<8 x i8> %A, <8 x i8> %B) {
    165 ; Using registers other than v0, v1 are possible, but would be odd.
    166 ; LT implemented as GT, so check reversed operands.
    167 ;CHECK: cmgt {{v[0-9]+}}.8b, v1.8b, v0.8b
    168 	%tmp3 = icmp slt <8 x i8> %A, %B;
    169    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    170 	ret <8 x i8> %tmp4
    171 }
    172 
    173 define <16 x i8> @cmlt16xi8(<16 x i8> %A, <16 x i8> %B) {
    174 ; Using registers other than v0, v1 are possible, but would be odd.
    175 ; LT implemented as GT, so check reversed operands.
    176 ;CHECK: cmgt {{v[0-9]+}}.16b, v1.16b, v0.16b
    177 	%tmp3 = icmp slt <16 x i8> %A, %B;
    178    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    179 	ret <16 x i8> %tmp4
    180 }
    181 
    182 define <4 x i16> @cmlt4xi16(<4 x i16> %A, <4 x i16> %B) {
    183 ; Using registers other than v0, v1 are possible, but would be odd.
    184 ; LT implemented as GT, so check reversed operands.
    185 ;CHECK: cmgt {{v[0-9]+}}.4h, v1.4h, v0.4h
    186 	%tmp3 = icmp slt <4 x i16> %A, %B;
    187    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    188 	ret <4 x i16> %tmp4
    189 }
    190 
    191 define <8 x i16> @cmlt8xi16(<8 x i16> %A, <8 x i16> %B) {
    192 ; Using registers other than v0, v1 are possible, but would be odd.
    193 ; LT implemented as GT, so check reversed operands.
    194 ;CHECK: cmgt {{v[0-9]+}}.8h, v1.8h, v0.8h
    195 	%tmp3 = icmp slt <8 x i16> %A, %B;
    196    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    197 	ret <8 x i16> %tmp4
    198 }
    199 
    200 define <2 x i32> @cmlt2xi32(<2 x i32> %A, <2 x i32> %B) {
    201 ; Using registers other than v0, v1 are possible, but would be odd.
    202 ; LT implemented as GT, so check reversed operands.
    203 ;CHECK: cmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
    204 	%tmp3 = icmp slt <2 x i32> %A, %B;
    205    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    206 	ret <2 x i32> %tmp4
    207 }
    208 
    209 define <4 x i32> @cmlt4xi32(<4 x i32> %A, <4 x i32> %B) {
    210 ; Using registers other than v0, v1 are possible, but would be odd.
    211 ; LT implemented as GT, so check reversed operands.
    212 ;CHECK: cmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
    213 	%tmp3 = icmp slt <4 x i32> %A, %B;
    214    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    215 	ret <4 x i32> %tmp4
    216 }
    217 
    218 define <2 x i64> @cmlt2xi64(<2 x i64> %A, <2 x i64> %B) {
    219 ; Using registers other than v0, v1 are possible, but would be odd.
    220 ; LT implemented as GT, so check reversed operands.
    221 ;CHECK: cmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
    222 	%tmp3 = icmp slt <2 x i64> %A, %B;
    223    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    224 	ret <2 x i64> %tmp4
    225 }
    226 
    227 define <8 x i8> @cmge8xi8(<8 x i8> %A, <8 x i8> %B) {
    228 ;CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    229 	%tmp3 = icmp sge <8 x i8> %A, %B;
    230    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    231 	ret <8 x i8> %tmp4
    232 }
    233 
    234 define <16 x i8> @cmge16xi8(<16 x i8> %A, <16 x i8> %B) {
    235 ;CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    236 	%tmp3 = icmp sge <16 x i8> %A, %B;
    237    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    238 	ret <16 x i8> %tmp4
    239 }
    240 
    241 define <4 x i16> @cmge4xi16(<4 x i16> %A, <4 x i16> %B) {
    242 ;CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    243 	%tmp3 = icmp sge <4 x i16> %A, %B;
    244    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    245 	ret <4 x i16> %tmp4
    246 }
    247 
    248 define <8 x i16> @cmge8xi16(<8 x i16> %A, <8 x i16> %B) {
    249 ;CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    250 	%tmp3 = icmp sge <8 x i16> %A, %B;
    251    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    252 	ret <8 x i16> %tmp4
    253 }
    254 
    255 define <2 x i32> @cmge2xi32(<2 x i32> %A, <2 x i32> %B) {
    256 ;CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    257 	%tmp3 = icmp sge <2 x i32> %A, %B;
    258    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    259 	ret <2 x i32> %tmp4
    260 }
    261 
    262 define <4 x i32> @cmge4xi32(<4 x i32> %A, <4 x i32> %B) {
    263 ;CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    264 	%tmp3 = icmp sge <4 x i32> %A, %B;
    265    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    266 	ret <4 x i32> %tmp4
    267 }
    268 
    269 define <2 x i64> @cmge2xi64(<2 x i64> %A, <2 x i64> %B) {
    270 ;CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    271 	%tmp3 = icmp sge <2 x i64> %A, %B;
    272    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    273 	ret <2 x i64> %tmp4
    274 }
    275 
    276 define <8 x i8> @cmle8xi8(<8 x i8> %A, <8 x i8> %B) {
    277 ; Using registers other than v0, v1 are possible, but would be odd.
    278 ; LE implemented as GE, so check reversed operands.
    279 ;CHECK: cmge {{v[0-9]+}}.8b, v1.8b, v0.8b
    280 	%tmp3 = icmp sle <8 x i8> %A, %B;
    281    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    282 	ret <8 x i8> %tmp4
    283 }
    284 
    285 define <16 x i8> @cmle16xi8(<16 x i8> %A, <16 x i8> %B) {
    286 ; Using registers other than v0, v1 are possible, but would be odd.
    287 ; LE implemented as GE, so check reversed operands.
    288 ;CHECK: cmge {{v[0-9]+}}.16b, v1.16b, v0.16b
    289 	%tmp3 = icmp sle <16 x i8> %A, %B;
    290    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    291 	ret <16 x i8> %tmp4
    292 }
    293 
    294 define <4 x i16> @cmle4xi16(<4 x i16> %A, <4 x i16> %B) {
    295 ; Using registers other than v0, v1 are possible, but would be odd.
    296 ; LE implemented as GE, so check reversed operands.
    297 ;CHECK: cmge {{v[0-9]+}}.4h, v1.4h, v0.4h
    298 	%tmp3 = icmp sle <4 x i16> %A, %B;
    299    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    300 	ret <4 x i16> %tmp4
    301 }
    302 
    303 define <8 x i16> @cmle8xi16(<8 x i16> %A, <8 x i16> %B) {
    304 ; Using registers other than v0, v1 are possible, but would be odd.
    305 ; LE implemented as GE, so check reversed operands.
    306 ;CHECK: cmge {{v[0-9]+}}.8h, v1.8h, v0.8h
    307 	%tmp3 = icmp sle <8 x i16> %A, %B;
    308    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    309 	ret <8 x i16> %tmp4
    310 }
    311 
    312 define <2 x i32> @cmle2xi32(<2 x i32> %A, <2 x i32> %B) {
    313 ; Using registers other than v0, v1 are possible, but would be odd.
    314 ; LE implemented as GE, so check reversed operands.
    315 ;CHECK: cmge {{v[0-9]+}}.2s, v1.2s, v0.2s
    316 	%tmp3 = icmp sle <2 x i32> %A, %B;
    317    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    318 	ret <2 x i32> %tmp4
    319 }
    320 
    321 define <4 x i32> @cmle4xi32(<4 x i32> %A, <4 x i32> %B) {
    322 ; Using registers other than v0, v1 are possible, but would be odd.
    323 ; LE implemented as GE, so check reversed operands.
    324 ;CHECK: cmge {{v[0-9]+}}.4s, v1.4s, v0.4s
    325 	%tmp3 = icmp sle <4 x i32> %A, %B;
    326    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    327 	ret <4 x i32> %tmp4
    328 }
    329 
    330 define <2 x i64> @cmle2xi64(<2 x i64> %A, <2 x i64> %B) {
    331 ; Using registers other than v0, v1 are possible, but would be odd.
    332 ; LE implemented as GE, so check reversed operands.
    333 ;CHECK: cmge {{v[0-9]+}}.2d, v1.2d, v0.2d
    334 	%tmp3 = icmp sle <2 x i64> %A, %B;
    335    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    336 	ret <2 x i64> %tmp4
    337 }
    338 
    339 define <8 x i8> @cmhi8xi8(<8 x i8> %A, <8 x i8> %B) {
    340 ;CHECK: cmhi {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    341 	%tmp3 = icmp ugt <8 x i8> %A, %B;
    342    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    343 	ret <8 x i8> %tmp4
    344 }
    345 
    346 define <16 x i8> @cmhi16xi8(<16 x i8> %A, <16 x i8> %B) {
    347 ;CHECK: cmhi {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    348 	%tmp3 = icmp ugt <16 x i8> %A, %B;
    349    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    350 	ret <16 x i8> %tmp4
    351 }
    352 
    353 define <4 x i16> @cmhi4xi16(<4 x i16> %A, <4 x i16> %B) {
    354 ;CHECK: cmhi {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    355 	%tmp3 = icmp ugt <4 x i16> %A, %B;
    356    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    357 	ret <4 x i16> %tmp4
    358 }
    359 
    360 define <8 x i16> @cmhi8xi16(<8 x i16> %A, <8 x i16> %B) {
    361 ;CHECK: cmhi {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    362 	%tmp3 = icmp ugt <8 x i16> %A, %B;
    363    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    364 	ret <8 x i16> %tmp4
    365 }
    366 
    367 define <2 x i32> @cmhi2xi32(<2 x i32> %A, <2 x i32> %B) {
    368 ;CHECK: cmhi {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    369 	%tmp3 = icmp ugt <2 x i32> %A, %B;
    370    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    371 	ret <2 x i32> %tmp4
    372 }
    373 
    374 define <4 x i32> @cmhi4xi32(<4 x i32> %A, <4 x i32> %B) {
    375 ;CHECK: cmhi {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    376 	%tmp3 = icmp ugt <4 x i32> %A, %B;
    377    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    378 	ret <4 x i32> %tmp4
    379 }
    380 
    381 define <2 x i64> @cmhi2xi64(<2 x i64> %A, <2 x i64> %B) {
    382 ;CHECK: cmhi {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    383 	%tmp3 = icmp ugt <2 x i64> %A, %B;
    384    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    385 	ret <2 x i64> %tmp4
    386 }
    387 
    388 define <8 x i8> @cmlo8xi8(<8 x i8> %A, <8 x i8> %B) {
    389 ; Using registers other than v0, v1 are possible, but would be odd.
    390 ; LO implemented as HI, so check reversed operands.
    391 ;CHECK: cmhi {{v[0-9]+}}.8b, v1.8b, v0.8b
    392 	%tmp3 = icmp ult <8 x i8> %A, %B;
    393    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    394 	ret <8 x i8> %tmp4
    395 }
    396 
    397 define <16 x i8> @cmlo16xi8(<16 x i8> %A, <16 x i8> %B) {
    398 ; Using registers other than v0, v1 are possible, but would be odd.
    399 ; LO implemented as HI, so check reversed operands.
    400 ;CHECK: cmhi {{v[0-9]+}}.16b, v1.16b, v0.16b
    401 	%tmp3 = icmp ult <16 x i8> %A, %B;
    402    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    403 	ret <16 x i8> %tmp4
    404 }
    405 
    406 define <4 x i16> @cmlo4xi16(<4 x i16> %A, <4 x i16> %B) {
    407 ; Using registers other than v0, v1 are possible, but would be odd.
    408 ; LO implemented as HI, so check reversed operands.
    409 ;CHECK: cmhi {{v[0-9]+}}.4h, v1.4h, v0.4h
    410 	%tmp3 = icmp ult <4 x i16> %A, %B;
    411    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    412 	ret <4 x i16> %tmp4
    413 }
    414 
    415 define <8 x i16> @cmlo8xi16(<8 x i16> %A, <8 x i16> %B) {
    416 ; Using registers other than v0, v1 are possible, but would be odd.
    417 ; LO implemented as HI, so check reversed operands.
    418 ;CHECK: cmhi {{v[0-9]+}}.8h, v1.8h, v0.8h
    419 	%tmp3 = icmp ult <8 x i16> %A, %B;
    420    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    421 	ret <8 x i16> %tmp4
    422 }
    423 
    424 define <2 x i32> @cmlo2xi32(<2 x i32> %A, <2 x i32> %B) {
    425 ; Using registers other than v0, v1 are possible, but would be odd.
    426 ; LO implemented as HI, so check reversed operands.
    427 ;CHECK: cmhi {{v[0-9]+}}.2s, v1.2s, v0.2s
    428 	%tmp3 = icmp ult <2 x i32> %A, %B;
    429    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    430 	ret <2 x i32> %tmp4
    431 }
    432 
    433 define <4 x i32> @cmlo4xi32(<4 x i32> %A, <4 x i32> %B) {
    434 ; Using registers other than v0, v1 are possible, but would be odd.
    435 ; LO implemented as HI, so check reversed operands.
    436 ;CHECK: cmhi {{v[0-9]+}}.4s, v1.4s, v0.4s
    437 	%tmp3 = icmp ult <4 x i32> %A, %B;
    438    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    439 	ret <4 x i32> %tmp4
    440 }
    441 
    442 define <2 x i64> @cmlo2xi64(<2 x i64> %A, <2 x i64> %B) {
    443 ; Using registers other than v0, v1 are possible, but would be odd.
    444 ; LO implemented as HI, so check reversed operands.
    445 ;CHECK: cmhi {{v[0-9]+}}.2d, v1.2d, v0.2d
    446 	%tmp3 = icmp ult <2 x i64> %A, %B;
    447    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    448 	ret <2 x i64> %tmp4
    449 }
    450 
    451 define <8 x i8> @cmhs8xi8(<8 x i8> %A, <8 x i8> %B) {
    452 ;CHECK: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    453 	%tmp3 = icmp uge <8 x i8> %A, %B;
    454    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    455 	ret <8 x i8> %tmp4
    456 }
    457 
    458 define <16 x i8> @cmhs16xi8(<16 x i8> %A, <16 x i8> %B) {
    459 ;CHECK: cmhs {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    460 	%tmp3 = icmp uge <16 x i8> %A, %B;
    461    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    462 	ret <16 x i8> %tmp4
    463 }
    464 
    465 define <4 x i16> @cmhs4xi16(<4 x i16> %A, <4 x i16> %B) {
    466 ;CHECK: cmhs {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    467 	%tmp3 = icmp uge <4 x i16> %A, %B;
    468    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    469 	ret <4 x i16> %tmp4
    470 }
    471 
    472 define <8 x i16> @cmhs8xi16(<8 x i16> %A, <8 x i16> %B) {
    473 ;CHECK: cmhs {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    474 	%tmp3 = icmp uge <8 x i16> %A, %B;
    475    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    476 	ret <8 x i16> %tmp4
    477 }
    478 
    479 define <2 x i32> @cmhs2xi32(<2 x i32> %A, <2 x i32> %B) {
    480 ;CHECK: cmhs {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    481 	%tmp3 = icmp uge <2 x i32> %A, %B;
    482    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    483 	ret <2 x i32> %tmp4
    484 }
    485 
    486 define <4 x i32> @cmhs4xi32(<4 x i32> %A, <4 x i32> %B) {
    487 ;CHECK: cmhs {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    488 	%tmp3 = icmp uge <4 x i32> %A, %B;
    489    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    490 	ret <4 x i32> %tmp4
    491 }
    492 
    493 define <2 x i64> @cmhs2xi64(<2 x i64> %A, <2 x i64> %B) {
    494 ;CHECK: cmhs {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    495 	%tmp3 = icmp uge <2 x i64> %A, %B;
    496    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    497 	ret <2 x i64> %tmp4
    498 }
    499 
    500 define <8 x i8> @cmls8xi8(<8 x i8> %A, <8 x i8> %B) {
    501 ; Using registers other than v0, v1 are possible, but would be odd.
    502 ; LS implemented as HS, so check reversed operands.
    503 ;CHECK: cmhs {{v[0-9]+}}.8b, v1.8b, v0.8b
    504 	%tmp3 = icmp ule <8 x i8> %A, %B;
    505    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    506 	ret <8 x i8> %tmp4
    507 }
    508 
    509 define <16 x i8> @cmls16xi8(<16 x i8> %A, <16 x i8> %B) {
    510 ; Using registers other than v0, v1 are possible, but would be odd.
    511 ; LS implemented as HS, so check reversed operands.
    512 ;CHECK: cmhs {{v[0-9]+}}.16b, v1.16b, v0.16b
    513 	%tmp3 = icmp ule <16 x i8> %A, %B;
    514    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    515 	ret <16 x i8> %tmp4
    516 }
    517 
    518 define <4 x i16> @cmls4xi16(<4 x i16> %A, <4 x i16> %B) {
    519 ; Using registers other than v0, v1 are possible, but would be odd.
    520 ; LS implemented as HS, so check reversed operands.
    521 ;CHECK: cmhs {{v[0-9]+}}.4h, v1.4h, v0.4h
    522 	%tmp3 = icmp ule <4 x i16> %A, %B;
    523    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    524 	ret <4 x i16> %tmp4
    525 }
    526 
    527 define <8 x i16> @cmls8xi16(<8 x i16> %A, <8 x i16> %B) {
    528 ; Using registers other than v0, v1 are possible, but would be odd.
    529 ; LS implemented as HS, so check reversed operands.
    530 ;CHECK: cmhs {{v[0-9]+}}.8h, v1.8h, v0.8h
    531 	%tmp3 = icmp ule <8 x i16> %A, %B;
    532    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    533 	ret <8 x i16> %tmp4
    534 }
    535 
    536 define <2 x i32> @cmls2xi32(<2 x i32> %A, <2 x i32> %B) {
    537 ; Using registers other than v0, v1 are possible, but would be odd.
    538 ; LS implemented as HS, so check reversed operands.
    539 ;CHECK: cmhs {{v[0-9]+}}.2s, v1.2s, v0.2s
    540 	%tmp3 = icmp ule <2 x i32> %A, %B;
    541    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    542 	ret <2 x i32> %tmp4
    543 }
    544 
    545 define <4 x i32> @cmls4xi32(<4 x i32> %A, <4 x i32> %B) {
    546 ; Using registers other than v0, v1 are possible, but would be odd.
    547 ; LS implemented as HS, so check reversed operands.
    548 ;CHECK: cmhs {{v[0-9]+}}.4s, v1.4s, v0.4s
    549 	%tmp3 = icmp ule <4 x i32> %A, %B;
    550    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    551 	ret <4 x i32> %tmp4
    552 }
    553 
    554 define <2 x i64> @cmls2xi64(<2 x i64> %A, <2 x i64> %B) {
    555 ; Using registers other than v0, v1 are possible, but would be odd.
    556 ; LS implemented as HS, so check reversed operands.
    557 ;CHECK: cmhs {{v[0-9]+}}.2d, v1.2d, v0.2d
    558 	%tmp3 = icmp ule <2 x i64> %A, %B;
    559    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    560 	ret <2 x i64> %tmp4
    561 }
    562 
    563 define <8 x i8> @cmtst8xi8(<8 x i8> %A, <8 x i8> %B) {
    564 ;CHECK: cmtst {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    565 	%tmp3 = and <8 x i8> %A, %B
    566 	%tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
    567    %tmp5 = sext <8 x i1> %tmp4 to <8 x i8>
    568 	ret <8 x i8> %tmp5
    569 }
    570 
    571 define <16 x i8> @cmtst16xi8(<16 x i8> %A, <16 x i8> %B) {
    572 ;CHECK: cmtst {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    573 	%tmp3 = and <16 x i8> %A, %B
    574 	%tmp4 = icmp ne <16 x i8> %tmp3, zeroinitializer
    575    %tmp5 = sext <16 x i1> %tmp4 to <16 x i8>
    576 	ret <16 x i8> %tmp5
    577 }
    578 
    579 define <4 x i16> @cmtst4xi16(<4 x i16> %A, <4 x i16> %B) {
    580 ;CHECK: cmtst {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    581 	%tmp3 = and <4 x i16> %A, %B
    582 	%tmp4 = icmp ne <4 x i16> %tmp3, zeroinitializer
    583    %tmp5 = sext <4 x i1> %tmp4 to <4 x i16>
    584 	ret <4 x i16> %tmp5
    585 }
    586 
    587 define <8 x i16> @cmtst8xi16(<8 x i16> %A, <8 x i16> %B) {
    588 ;CHECK: cmtst {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    589 	%tmp3 = and <8 x i16> %A, %B
    590 	%tmp4 = icmp ne <8 x i16> %tmp3, zeroinitializer
    591    %tmp5 = sext <8 x i1> %tmp4 to <8 x i16>
    592 	ret <8 x i16> %tmp5
    593 }
    594 
    595 define <2 x i32> @cmtst2xi32(<2 x i32> %A, <2 x i32> %B) {
    596 ;CHECK: cmtst {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    597 	%tmp3 = and <2 x i32> %A, %B
    598 	%tmp4 = icmp ne <2 x i32> %tmp3, zeroinitializer
    599    %tmp5 = sext <2 x i1> %tmp4 to <2 x i32>
    600 	ret <2 x i32> %tmp5
    601 }
    602 
    603 define <4 x i32> @cmtst4xi32(<4 x i32> %A, <4 x i32> %B) {
    604 ;CHECK: cmtst {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    605 	%tmp3 = and <4 x i32> %A, %B
    606 	%tmp4 = icmp ne <4 x i32> %tmp3, zeroinitializer
    607    %tmp5 = sext <4 x i1> %tmp4 to <4 x i32>
    608 	ret <4 x i32> %tmp5
    609 }
    610 
    611 define <2 x i64> @cmtst2xi64(<2 x i64> %A, <2 x i64> %B) {
    612 ;CHECK: cmtst {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    613 	%tmp3 = and <2 x i64> %A, %B
    614 	%tmp4 = icmp ne <2 x i64> %tmp3, zeroinitializer
    615    %tmp5 = sext <2 x i1> %tmp4 to <2 x i64>
    616 	ret <2 x i64> %tmp5
    617 }
    618 
    619 
    620 
    621 define <8 x i8> @cmeqz8xi8(<8 x i8> %A) {
    622 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
    623 	%tmp3 = icmp eq <8 x i8> %A, zeroinitializer;
    624    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    625 	ret <8 x i8> %tmp4
    626 }
    627 
    628 define <16 x i8> @cmeqz16xi8(<16 x i8> %A) {
    629 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
    630 	%tmp3 = icmp eq <16 x i8> %A, zeroinitializer;
    631    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    632 	ret <16 x i8> %tmp4
    633 }
    634 
    635 define <4 x i16> @cmeqz4xi16(<4 x i16> %A) {
    636 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
    637 	%tmp3 = icmp eq <4 x i16> %A, zeroinitializer;
    638    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    639 	ret <4 x i16> %tmp4
    640 }
    641 
    642 define <8 x i16> @cmeqz8xi16(<8 x i16> %A) {
    643 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
    644 	%tmp3 = icmp eq <8 x i16> %A, zeroinitializer;
    645    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    646 	ret <8 x i16> %tmp4
    647 }
    648 
    649 define <2 x i32> @cmeqz2xi32(<2 x i32> %A) {
    650 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
    651 	%tmp3 = icmp eq <2 x i32> %A, zeroinitializer;
    652    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    653 	ret <2 x i32> %tmp4
    654 }
    655 
    656 define <4 x i32> @cmeqz4xi32(<4 x i32> %A) {
    657 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
    658 	%tmp3 = icmp eq <4 x i32> %A, zeroinitializer;
    659    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    660 	ret <4 x i32> %tmp4
    661 }
    662 
    663 define <2 x i64> @cmeqz2xi64(<2 x i64> %A) {
    664 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
    665 	%tmp3 = icmp eq <2 x i64> %A, zeroinitializer;
    666    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    667 	ret <2 x i64> %tmp4
    668 }
    669 
    670 
    671 define <8 x i8> @cmgez8xi8(<8 x i8> %A) {
    672 ;CHECK: cmge {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
    673 	%tmp3 = icmp sge <8 x i8> %A, zeroinitializer;
    674    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    675 	ret <8 x i8> %tmp4
    676 }
    677 
    678 define <16 x i8> @cmgez16xi8(<16 x i8> %A) {
    679 ;CHECK: cmge {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
    680 	%tmp3 = icmp sge <16 x i8> %A, zeroinitializer;
    681    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    682 	ret <16 x i8> %tmp4
    683 }
    684 
    685 define <4 x i16> @cmgez4xi16(<4 x i16> %A) {
    686 ;CHECK: cmge {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
    687 	%tmp3 = icmp sge <4 x i16> %A, zeroinitializer;
    688    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    689 	ret <4 x i16> %tmp4
    690 }
    691 
    692 define <8 x i16> @cmgez8xi16(<8 x i16> %A) {
    693 ;CHECK: cmge {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
    694 	%tmp3 = icmp sge <8 x i16> %A, zeroinitializer;
    695    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    696 	ret <8 x i16> %tmp4
    697 }
    698 
    699 define <2 x i32> @cmgez2xi32(<2 x i32> %A) {
    700 ;CHECK: cmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
    701 	%tmp3 = icmp sge <2 x i32> %A, zeroinitializer;
    702    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    703 	ret <2 x i32> %tmp4
    704 }
    705 
    706 define <4 x i32> @cmgez4xi32(<4 x i32> %A) {
    707 ;CHECK: cmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
    708 	%tmp3 = icmp sge <4 x i32> %A, zeroinitializer;
    709    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    710 	ret <4 x i32> %tmp4
    711 }
    712 
    713 define <2 x i64> @cmgez2xi64(<2 x i64> %A) {
    714 ;CHECK: cmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
    715 	%tmp3 = icmp sge <2 x i64> %A, zeroinitializer;
    716    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    717 	ret <2 x i64> %tmp4
    718 }
    719 
    720 
    721 define <8 x i8> @cmgtz8xi8(<8 x i8> %A) {
    722 ;CHECK: cmgt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
    723 	%tmp3 = icmp sgt <8 x i8> %A, zeroinitializer;
    724    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    725 	ret <8 x i8> %tmp4
    726 }
    727 
    728 define <16 x i8> @cmgtz16xi8(<16 x i8> %A) {
    729 ;CHECK: cmgt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
    730 	%tmp3 = icmp sgt <16 x i8> %A, zeroinitializer;
    731    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    732 	ret <16 x i8> %tmp4
    733 }
    734 
    735 define <4 x i16> @cmgtz4xi16(<4 x i16> %A) {
    736 ;CHECK: cmgt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
    737 	%tmp3 = icmp sgt <4 x i16> %A, zeroinitializer;
    738    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    739 	ret <4 x i16> %tmp4
    740 }
    741 
    742 define <8 x i16> @cmgtz8xi16(<8 x i16> %A) {
    743 ;CHECK: cmgt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
    744 	%tmp3 = icmp sgt <8 x i16> %A, zeroinitializer;
    745    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    746 	ret <8 x i16> %tmp4
    747 }
    748 
    749 define <2 x i32> @cmgtz2xi32(<2 x i32> %A) {
    750 ;CHECK: cmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
    751 	%tmp3 = icmp sgt <2 x i32> %A, zeroinitializer;
    752    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    753 	ret <2 x i32> %tmp4
    754 }
    755 
    756 define <4 x i32> @cmgtz4xi32(<4 x i32> %A) {
    757 ;CHECK: cmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
    758 	%tmp3 = icmp sgt <4 x i32> %A, zeroinitializer;
    759    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    760 	ret <4 x i32> %tmp4
    761 }
    762 
    763 define <2 x i64> @cmgtz2xi64(<2 x i64> %A) {
    764 ;CHECK: cmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
    765 	%tmp3 = icmp sgt <2 x i64> %A, zeroinitializer;
    766    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    767 	ret <2 x i64> %tmp4
    768 }
    769 
    770 define <8 x i8> @cmlez8xi8(<8 x i8> %A) {
    771 ;CHECK: cmle {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
    772 	%tmp3 = icmp sle <8 x i8> %A, zeroinitializer;
    773    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    774 	ret <8 x i8> %tmp4
    775 }
    776 
    777 define <16 x i8> @cmlez16xi8(<16 x i8> %A) {
    778 ;CHECK: cmle {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
    779 	%tmp3 = icmp sle <16 x i8> %A, zeroinitializer;
    780    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    781 	ret <16 x i8> %tmp4
    782 }
    783 
    784 define <4 x i16> @cmlez4xi16(<4 x i16> %A) {
    785 ;CHECK: cmle {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
    786 	%tmp3 = icmp sle <4 x i16> %A, zeroinitializer;
    787    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    788 	ret <4 x i16> %tmp4
    789 }
    790 
    791 define <8 x i16> @cmlez8xi16(<8 x i16> %A) {
    792 ;CHECK: cmle {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
    793 	%tmp3 = icmp sle <8 x i16> %A, zeroinitializer;
    794    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    795 	ret <8 x i16> %tmp4
    796 }
    797 
    798 define <2 x i32> @cmlez2xi32(<2 x i32> %A) {
    799 ;CHECK: cmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
    800 	%tmp3 = icmp sle <2 x i32> %A, zeroinitializer;
    801    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    802 	ret <2 x i32> %tmp4
    803 }
    804 
    805 define <4 x i32> @cmlez4xi32(<4 x i32> %A) {
    806 ;CHECK: cmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
    807 	%tmp3 = icmp sle <4 x i32> %A, zeroinitializer;
    808    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    809 	ret <4 x i32> %tmp4
    810 }
    811 
    812 define <2 x i64> @cmlez2xi64(<2 x i64> %A) {
    813 ;CHECK: cmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
    814 	%tmp3 = icmp sle <2 x i64> %A, zeroinitializer;
    815    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    816 	ret <2 x i64> %tmp4
    817 }
    818 
    819 define <8 x i8> @cmltz8xi8(<8 x i8> %A) {
    820 ;CHECK: cmlt {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
    821 	%tmp3 = icmp slt <8 x i8> %A, zeroinitializer;
    822    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    823 	ret <8 x i8> %tmp4
    824 }
    825 
    826 define <16 x i8> @cmltz16xi8(<16 x i8> %A) {
    827 ;CHECK: cmlt {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
    828 	%tmp3 = icmp slt <16 x i8> %A, zeroinitializer;
    829    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    830 	ret <16 x i8> %tmp4
    831 }
    832 
    833 define <4 x i16> @cmltz4xi16(<4 x i16> %A) {
    834 ;CHECK: cmlt {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
    835 	%tmp3 = icmp slt <4 x i16> %A, zeroinitializer;
    836    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    837 	ret <4 x i16> %tmp4
    838 }
    839 
    840 define <8 x i16> @cmltz8xi16(<8 x i16> %A) {
    841 ;CHECK: cmlt {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
    842 	%tmp3 = icmp slt <8 x i16> %A, zeroinitializer;
    843    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    844 	ret <8 x i16> %tmp4
    845 }
    846 
    847 define <2 x i32> @cmltz2xi32(<2 x i32> %A) {
    848 ;CHECK: cmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
    849 	%tmp3 = icmp slt <2 x i32> %A, zeroinitializer;
    850    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    851 	ret <2 x i32> %tmp4
    852 }
    853 
    854 define <4 x i32> @cmltz4xi32(<4 x i32> %A) {
    855 ;CHECK: cmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
    856 	%tmp3 = icmp slt <4 x i32> %A, zeroinitializer;
    857    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    858 	ret <4 x i32> %tmp4
    859 }
    860 
    861 define <2 x i64> @cmltz2xi64(<2 x i64> %A) {
    862 ;CHECK: cmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
    863 	%tmp3 = icmp slt <2 x i64> %A, zeroinitializer;
    864    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    865 	ret <2 x i64> %tmp4
    866 }
    867 
    868 define <8 x i8> @cmneqz8xi8(<8 x i8> %A) {
    869 ;CHECK: cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0x0
    870 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
    871 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    872 	%tmp3 = icmp ne <8 x i8> %A, zeroinitializer;
    873    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    874 	ret <8 x i8> %tmp4
    875 }
    876 
    877 define <16 x i8> @cmneqz16xi8(<16 x i8> %A) {
    878 ;CHECK: cmeq {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, #0x0
    879 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
    880 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    881 	%tmp3 = icmp ne <16 x i8> %A, zeroinitializer;
    882    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    883 	ret <16 x i8> %tmp4
    884 }
    885 
    886 define <4 x i16> @cmneqz4xi16(<4 x i16> %A) {
    887 ;CHECK: cmeq {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, #0x0
    888 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
    889 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    890 	%tmp3 = icmp ne <4 x i16> %A, zeroinitializer;
    891    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    892 	ret <4 x i16> %tmp4
    893 }
    894 
    895 define <8 x i16> @cmneqz8xi16(<8 x i16> %A) {
    896 ;CHECK: cmeq {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, #0x0
    897 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
    898 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    899 	%tmp3 = icmp ne <8 x i16> %A, zeroinitializer;
    900    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    901 	ret <8 x i16> %tmp4
    902 }
    903 
    904 define <2 x i32> @cmneqz2xi32(<2 x i32> %A) {
    905 ;CHECK: cmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0x0
    906 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
    907 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    908 	%tmp3 = icmp ne <2 x i32> %A, zeroinitializer;
    909    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    910 	ret <2 x i32> %tmp4
    911 }
    912 
    913 define <4 x i32> @cmneqz4xi32(<4 x i32> %A) {
    914 ;CHECK: cmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0x0
    915 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
    916 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    917 	%tmp3 = icmp ne <4 x i32> %A, zeroinitializer;
    918    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    919 	ret <4 x i32> %tmp4
    920 }
    921 
    922 define <2 x i64> @cmneqz2xi64(<2 x i64> %A) {
    923 ;CHECK: cmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0x0
    924 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
    925 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    926 	%tmp3 = icmp ne <2 x i64> %A, zeroinitializer;
    927    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    928 	ret <2 x i64> %tmp4
    929 }
    930 
    931 define <8 x i8> @cmhsz8xi8(<8 x i8> %A) {
    932 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
    933 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    934 	%tmp3 = icmp uge <8 x i8> %A, zeroinitializer;
    935    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    936 	ret <8 x i8> %tmp4
    937 }
    938 
    939 define <16 x i8> @cmhsz16xi8(<16 x i8> %A) {
    940 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
    941 ;CHECK-NEXT: cmhs {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    942 	%tmp3 = icmp uge <16 x i8> %A, zeroinitializer;
    943    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
    944 	ret <16 x i8> %tmp4
    945 }
    946 
    947 define <4 x i16> @cmhsz4xi16(<4 x i16> %A) {
    948 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
    949 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
    950 	%tmp3 = icmp uge <4 x i16> %A, zeroinitializer;
    951    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
    952 	ret <4 x i16> %tmp4
    953 }
    954 
    955 define <8 x i16> @cmhsz8xi16(<8 x i16> %A) {
    956 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
    957 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
    958 	%tmp3 = icmp uge <8 x i16> %A, zeroinitializer;
    959    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
    960 	ret <8 x i16> %tmp4
    961 }
    962 
    963 define <2 x i32> @cmhsz2xi32(<2 x i32> %A) {
    964 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
    965 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
    966 	%tmp3 = icmp uge <2 x i32> %A, zeroinitializer;
    967    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
    968 	ret <2 x i32> %tmp4
    969 }
    970 
    971 define <4 x i32> @cmhsz4xi32(<4 x i32> %A) {
    972 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
    973 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
    974 	%tmp3 = icmp uge <4 x i32> %A, zeroinitializer;
    975    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
    976 	ret <4 x i32> %tmp4
    977 }
    978 
    979 define <2 x i64> @cmhsz2xi64(<2 x i64> %A) {
    980 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
    981 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
    982 	%tmp3 = icmp uge <2 x i64> %A, zeroinitializer;
    983    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
    984 	ret <2 x i64> %tmp4
    985 }
    986 
    987 
    988 define <8 x i8> @cmhiz8xi8(<8 x i8> %A) {
    989 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
    990 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    991 	%tmp3 = icmp ugt <8 x i8> %A, zeroinitializer;
    992    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
    993 	ret <8 x i8> %tmp4
    994 }
    995 
    996 define <16 x i8> @cmhiz16xi8(<16 x i8> %A) {
    997 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
    998 ;CHECK-NEXT: cmhi {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    999 	%tmp3 = icmp ugt <16 x i8> %A, zeroinitializer;
   1000    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
   1001 	ret <16 x i8> %tmp4
   1002 }
   1003 
   1004 define <4 x i16> @cmhiz4xi16(<4 x i16> %A) {
   1005 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
   1006 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
   1007 	%tmp3 = icmp ugt <4 x i16> %A, zeroinitializer;
   1008    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
   1009 	ret <4 x i16> %tmp4
   1010 }
   1011 
   1012 define <8 x i16> @cmhiz8xi16(<8 x i16> %A) {
   1013 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
   1014 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
   1015 	%tmp3 = icmp ugt <8 x i16> %A, zeroinitializer;
   1016    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
   1017 	ret <8 x i16> %tmp4
   1018 }
   1019 
   1020 define <2 x i32> @cmhiz2xi32(<2 x i32> %A) {
   1021 ;CHECK: movi {{v[0-9]+}}.8b, #0x0
   1022 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   1023 	%tmp3 = icmp ugt <2 x i32> %A, zeroinitializer;
   1024    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1025 	ret <2 x i32> %tmp4
   1026 }
   1027 
   1028 define <4 x i32> @cmhiz4xi32(<4 x i32> %A) {
   1029 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
   1030 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1031 	%tmp3 = icmp ugt <4 x i32> %A, zeroinitializer;
   1032    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1033 	ret <4 x i32> %tmp4
   1034 }
   1035 
   1036 define <2 x i64> @cmhiz2xi64(<2 x i64> %A) {
   1037 ;CHECK: movi {{v[0-9]+}}.16b, #0x0
   1038 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
   1039 	%tmp3 = icmp ugt <2 x i64> %A, zeroinitializer;
   1040    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1041 	ret <2 x i64> %tmp4
   1042 }
   1043 
   1044 define <8 x i8> @cmlsz8xi8(<8 x i8> %A) {
   1045 ; Using registers other than v0, v1 are possible, but would be odd.
   1046 ; LS implemented as HS, so check reversed operands.
   1047 ;CHECK: movi v1.8b, #0x0
   1048 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8b, v1.8b, v0.8b
   1049 	%tmp3 = icmp ule <8 x i8> %A, zeroinitializer;
   1050    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
   1051 	ret <8 x i8> %tmp4
   1052 }
   1053 
   1054 define <16 x i8> @cmlsz16xi8(<16 x i8> %A) {
   1055 ; Using registers other than v0, v1 are possible, but would be odd.
   1056 ; LS implemented as HS, so check reversed operands.
   1057 ;CHECK: movi v1.16b, #0x0
   1058 ;CHECK-NEXT: cmhs {{v[0-9]+}}.16b, v1.16b, v0.16b
   1059 	%tmp3 = icmp ule <16 x i8> %A, zeroinitializer;
   1060    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
   1061 	ret <16 x i8> %tmp4
   1062 }
   1063 
   1064 define <4 x i16> @cmlsz4xi16(<4 x i16> %A) {
   1065 ; Using registers other than v0, v1 are possible, but would be odd.
   1066 ; LS implemented as HS, so check reversed operands.
   1067 ;CHECK: movi v1.8b, #0x0
   1068 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4h, v1.4h, v0.4h
   1069 	%tmp3 = icmp ule <4 x i16> %A, zeroinitializer;
   1070    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
   1071 	ret <4 x i16> %tmp4
   1072 }
   1073 
   1074 define <8 x i16> @cmlsz8xi16(<8 x i16> %A) {
   1075 ; Using registers other than v0, v1 are possible, but would be odd.
   1076 ; LS implemented as HS, so check reversed operands.
   1077 ;CHECK: movi v1.16b, #0x0
   1078 ;CHECK-NEXT: cmhs {{v[0-9]+}}.8h, v1.8h, v0.8h
   1079 	%tmp3 = icmp ule <8 x i16> %A, zeroinitializer;
   1080    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
   1081 	ret <8 x i16> %tmp4
   1082 }
   1083 
   1084 define <2 x i32> @cmlsz2xi32(<2 x i32> %A) {
   1085 ; Using registers other than v0, v1 are possible, but would be odd.
   1086 ; LS implemented as HS, so check reversed operands.
   1087 ;CHECK: movi v1.8b, #0x0
   1088 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2s, v1.2s, v0.2s
   1089 	%tmp3 = icmp ule <2 x i32> %A, zeroinitializer;
   1090    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1091 	ret <2 x i32> %tmp4
   1092 }
   1093 
   1094 define <4 x i32> @cmlsz4xi32(<4 x i32> %A) {
   1095 ; Using registers other than v0, v1 are possible, but would be odd.
   1096 ; LS implemented as HS, so check reversed operands.
   1097 ;CHECK: movi v1.16b, #0x0
   1098 ;CHECK-NEXT: cmhs {{v[0-9]+}}.4s, v1.4s, v0.4s
   1099 	%tmp3 = icmp ule <4 x i32> %A, zeroinitializer;
   1100    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1101 	ret <4 x i32> %tmp4
   1102 }
   1103 
   1104 define <2 x i64> @cmlsz2xi64(<2 x i64> %A) {
   1105 ; Using registers other than v0, v1 are possible, but would be odd.
   1106 ; LS implemented as HS, so check reversed operands.
   1107 ;CHECK: movi v1.16b, #0x0
   1108 ;CHECK-NEXT: cmhs {{v[0-9]+}}.2d, v1.2d, v0.2d
   1109 	%tmp3 = icmp ule <2 x i64> %A, zeroinitializer;
   1110    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1111 	ret <2 x i64> %tmp4
   1112 }
   1113 
   1114 define <8 x i8> @cmloz8xi8(<8 x i8> %A) {
   1115 ; Using registers other than v0, v1 are possible, but would be odd.
   1116 ; LO implemented as HI, so check reversed operands.
   1117 ;CHECK: movi v1.8b, #0x0
   1118 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8b, v1.8b, {{v[0-9]+}}.8b
   1119 	%tmp3 = icmp ult <8 x i8> %A, zeroinitializer;
   1120    %tmp4 = sext <8 x i1> %tmp3 to <8 x i8>
   1121 	ret <8 x i8> %tmp4
   1122 }
   1123 
   1124 define <16 x i8> @cmloz16xi8(<16 x i8> %A) {
   1125 ; Using registers other than v0, v1 are possible, but would be odd.
   1126 ; LO implemented as HI, so check reversed operands.
   1127 ;CHECK: movi v1.16b, #0x0
   1128 ;CHECK-NEXT: cmhi {{v[0-9]+}}.16b, v1.16b, v0.16b
   1129 	%tmp3 = icmp ult <16 x i8> %A, zeroinitializer;
   1130    %tmp4 = sext <16 x i1> %tmp3 to <16 x i8>
   1131 	ret <16 x i8> %tmp4
   1132 }
   1133 
   1134 define <4 x i16> @cmloz4xi16(<4 x i16> %A) {
   1135 ; Using registers other than v0, v1 are possible, but would be odd.
   1136 ; LO implemented as HI, so check reversed operands.
   1137 ;CHECK: movi v1.8b, #0x0
   1138 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4h, v1.4h, v0.4h
   1139 	%tmp3 = icmp ult <4 x i16> %A, zeroinitializer;
   1140    %tmp4 = sext <4 x i1> %tmp3 to <4 x i16>
   1141 	ret <4 x i16> %tmp4
   1142 }
   1143 
   1144 define <8 x i16> @cmloz8xi16(<8 x i16> %A) {
   1145 ; Using registers other than v0, v1 are possible, but would be odd.
   1146 ; LO implemented as HI, so check reversed operands.
   1147 ;CHECK: movi v1.16b, #0x0
   1148 ;CHECK-NEXT: cmhi {{v[0-9]+}}.8h, v1.8h, v0.8h
   1149 	%tmp3 = icmp ult <8 x i16> %A, zeroinitializer;
   1150    %tmp4 = sext <8 x i1> %tmp3 to <8 x i16>
   1151 	ret <8 x i16> %tmp4
   1152 }
   1153 
   1154 define <2 x i32> @cmloz2xi32(<2 x i32> %A) {
   1155 ; Using registers other than v0, v1 are possible, but would be odd.
   1156 ; LO implemented as HI, so check reversed operands.
   1157 ;CHECK: movi v1.8b, #0x0
   1158 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2s, v1.2s, v0.2s
   1159 	%tmp3 = icmp ult <2 x i32> %A, zeroinitializer;
   1160    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1161 	ret <2 x i32> %tmp4
   1162 }
   1163 
   1164 define <4 x i32> @cmloz4xi32(<4 x i32> %A) {
   1165 ; Using registers other than v0, v1 are possible, but would be odd.
   1166 ; LO implemented as HI, so check reversed operands.
   1167 ;CHECK: movi v1.16b, #0x0
   1168 ;CHECK-NEXT: cmhi {{v[0-9]+}}.4s, v1.4s, v0.4s
   1169 	%tmp3 = icmp ult <4 x i32> %A, zeroinitializer;
   1170    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1171 	ret <4 x i32> %tmp4
   1172 }
   1173 
   1174 define <2 x i64> @cmloz2xi64(<2 x i64> %A) {
   1175 ; Using registers other than v0, v1 are possible, but would be odd.
   1176 ; LO implemented as HI, so check reversed operands.
   1177 ;CHECK: movi v1.16b, #0x0
   1178 ;CHECK-NEXT: cmhi {{v[0-9]+}}.2d, v1.2d, v0.2d
   1179 	%tmp3 = icmp ult <2 x i64> %A, zeroinitializer;
   1180    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1181 	ret <2 x i64> %tmp4
   1182 }
   1183 
   1184 
   1185 define <2 x i32> @fcmoeq2xfloat(<2 x float> %A, <2 x float> %B) {
   1186 ;CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   1187    %tmp3 = fcmp oeq <2 x float> %A, %B
   1188    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1189 	ret <2 x i32> %tmp4
   1190 }
   1191 
   1192 define <4 x i32> @fcmoeq4xfloat(<4 x float> %A, <4 x float> %B) {
   1193 ;CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1194    %tmp3 = fcmp oeq <4 x float> %A, %B
   1195    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1196 	ret <4 x i32> %tmp4
   1197 }
   1198 define <2 x i64> @fcmoeq2xdouble(<2 x double> %A, <2 x double> %B) {
   1199 ;CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
   1200    %tmp3 = fcmp oeq <2 x double> %A, %B
   1201    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1202 	ret <2 x i64> %tmp4
   1203 }
   1204 
   1205 define <2 x i32> @fcmoge2xfloat(<2 x float> %A, <2 x float> %B) {
   1206 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   1207    %tmp3 = fcmp oge <2 x float> %A, %B
   1208    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1209 	ret <2 x i32> %tmp4
   1210 }
   1211 
   1212 define <4 x i32> @fcmoge4xfloat(<4 x float> %A, <4 x float> %B) {
   1213 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1214    %tmp3 = fcmp oge <4 x float> %A, %B
   1215    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1216 	ret <4 x i32> %tmp4
   1217 }
   1218 define <2 x i64> @fcmoge2xdouble(<2 x double> %A, <2 x double> %B) {
   1219 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
   1220    %tmp3 = fcmp oge <2 x double> %A, %B
   1221    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1222 	ret <2 x i64> %tmp4
   1223 }
   1224 
   1225 define <2 x i32> @fcmogt2xfloat(<2 x float> %A, <2 x float> %B) {
   1226 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
   1227    %tmp3 = fcmp ogt <2 x float> %A, %B
   1228    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1229 	ret <2 x i32> %tmp4
   1230 }
   1231 
   1232 define <4 x i32> @fcmogt4xfloat(<4 x float> %A, <4 x float> %B) {
   1233 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
   1234    %tmp3 = fcmp ogt <4 x float> %A, %B
   1235    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1236 	ret <4 x i32> %tmp4
   1237 }
   1238 define <2 x i64> @fcmogt2xdouble(<2 x double> %A, <2 x double> %B) {
   1239 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
   1240    %tmp3 = fcmp ogt <2 x double> %A, %B
   1241    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1242 	ret <2 x i64> %tmp4
   1243 }
   1244 
   1245 define <2 x i32> @fcmole2xfloat(<2 x float> %A, <2 x float> %B) {
   1246 ; Using registers other than v0, v1 are possible, but would be odd.
   1247 ; OLE implemented as OGE, so check reversed operands.
   1248 ;CHECK: fcmge {{v[0-9]+}}.2s, v1.2s, v0.2s
   1249    %tmp3 = fcmp ole <2 x float> %A, %B
   1250    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1251 	ret <2 x i32> %tmp4
   1252 }
   1253 
   1254 define <4 x i32> @fcmole4xfloat(<4 x float> %A, <4 x float> %B) {
   1255 ; Using registers other than v0, v1 are possible, but would be odd.
   1256 ; OLE implemented as OGE, so check reversed operands.
   1257 ;CHECK: fcmge {{v[0-9]+}}.4s, v1.4s, v0.4s
   1258    %tmp3 = fcmp ole <4 x float> %A, %B
   1259    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1260 	ret <4 x i32> %tmp4
   1261 }
   1262 define <2 x i64> @fcmole2xdouble(<2 x double> %A, <2 x double> %B) {
   1263 ; Using registers other than v0, v1 are possible, but would be odd.
   1264 ; OLE implemented as OGE, so check reversed operands.
   1265 ;CHECK: fcmge {{v[0-9]+}}.2d, v1.2d, v0.2d
   1266    %tmp3 = fcmp ole <2 x double> %A, %B
   1267    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1268 	ret <2 x i64> %tmp4
   1269 }
   1270 
   1271 define <2 x i32> @fcmolt2xfloat(<2 x float> %A, <2 x float> %B) {
   1272 ; Using registers other than v0, v1 are possible, but would be odd.
   1273 ; OLE implemented as OGE, so check reversed operands.
   1274 ;CHECK: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
   1275    %tmp3 = fcmp olt <2 x float> %A, %B
   1276    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1277 	ret <2 x i32> %tmp4
   1278 }
   1279 
   1280 define <4 x i32> @fcmolt4xfloat(<4 x float> %A, <4 x float> %B) {
   1281 ; Using registers other than v0, v1 are possible, but would be odd.
   1282 ; OLE implemented as OGE, so check reversed operands.
   1283 ;CHECK: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
   1284    %tmp3 = fcmp olt <4 x float> %A, %B
   1285    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1286 	ret <4 x i32> %tmp4
   1287 }
   1288 define <2 x i64> @fcmolt2xdouble(<2 x double> %A, <2 x double> %B) {
   1289 ; Using registers other than v0, v1 are possible, but would be odd.
   1290 ; OLE implemented as OGE, so check reversed operands.
   1291 ;CHECK: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
   1292    %tmp3 = fcmp olt <2 x double> %A, %B
   1293    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1294 	ret <2 x i64> %tmp4
   1295 }
   1296 
   1297 define <2 x i32> @fcmone2xfloat(<2 x float> %A, <2 x float> %B) {
   1298 ; Using registers other than v0, v1 are possible, but would be odd.
   1299 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
   1300 ;CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
   1301 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
   1302 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1303    %tmp3 = fcmp one <2 x float> %A, %B
   1304    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1305 	ret <2 x i32> %tmp4
   1306 }
   1307 
   1308 define <4 x i32> @fcmone4xfloat(<4 x float> %A, <4 x float> %B) {
   1309 ; Using registers other than v0, v1 are possible, but would be odd.
   1310 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
   1311 ;CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
   1312 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
   1313 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1314    %tmp3 = fcmp one <4 x float> %A, %B
   1315    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1316 	ret <4 x i32> %tmp4
   1317 }
   1318 define <2 x i64> @fcmone2xdouble(<2 x double> %A, <2 x double> %B) {
   1319 ; Using registers other than v0, v1 are possible, but would be odd.
   1320 ; ONE = OGT | OLT, OLT implemented as OGT so check reversed operands
   1321 ;CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
   1322 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
   1323 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1324 ; todo check reversed operands
   1325    %tmp3 = fcmp one <2 x double> %A, %B
   1326    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1327 	ret <2 x i64> %tmp4
   1328 }
   1329 
   1330 
   1331 define <2 x i32> @fcmord2xfloat(<2 x float> %A, <2 x float> %B) {
   1332 ; Using registers other than v0, v1 are possible, but would be odd.
   1333 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
   1334 ;CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
   1335 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
   1336 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1337    %tmp3 = fcmp ord <2 x float> %A, %B
   1338    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1339 	ret <2 x i32> %tmp4
   1340 }
   1341 
   1342 
   1343 define <4 x i32> @fcmord4xfloat(<4 x float> %A, <4 x float> %B) {
   1344 ; Using registers other than v0, v1 are possible, but would be odd.
   1345 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
   1346 ;CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
   1347 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
   1348 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1349    %tmp3 = fcmp ord <4 x float> %A, %B
   1350    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1351 	ret <4 x i32> %tmp4
   1352 }
   1353 
   1354 define <2 x i64> @fcmord2xdouble(<2 x double> %A, <2 x double> %B) {
   1355 ; Using registers other than v0, v1 are possible, but would be odd.
   1356 ; ORD = OGE | OLT, OLT implemented as OGT, so check reversed operands.
   1357 ;CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
   1358 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
   1359 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1360    %tmp3 = fcmp ord <2 x double> %A, %B
   1361    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1362 	ret <2 x i64> %tmp4
   1363 }
   1364 
   1365 
   1366 define <2 x i32> @fcmuno2xfloat(<2 x float> %A, <2 x float> %B) {
   1367 ; Using registers other than v0, v1 are possible, but would be odd.
   1368 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
   1369 ;CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
   1370 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
   1371 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1372 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1373 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1374    %tmp3 = fcmp uno <2 x float> %A, %B
   1375    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1376 	ret <2 x i32> %tmp4
   1377 }
   1378 
   1379 define <4 x i32> @fcmuno4xfloat(<4 x float> %A, <4 x float> %B) {
   1380 ; Using registers other than v0, v1 are possible, but would be odd.
   1381 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
   1382 ;CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
   1383 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
   1384 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1385 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1386 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1387    %tmp3 = fcmp uno <4 x float> %A, %B
   1388    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1389 	ret <4 x i32> %tmp4
   1390 }
   1391 
   1392 define <2 x i64> @fcmuno2xdouble(<2 x double> %A, <2 x double> %B) {
   1393 ; Using registers other than v0, v1 are possible, but would be odd.
   1394 ; UNO = !(OGE | OLT), OLT implemented as OGT, so check reversed operands.
   1395 ;CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
   1396 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
   1397 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1398 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1399 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1400    %tmp3 = fcmp uno <2 x double> %A, %B
   1401    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1402 	ret <2 x i64> %tmp4
   1403 }
   1404 
   1405 define <2 x i32> @fcmueq2xfloat(<2 x float> %A, <2 x float> %B) {
   1406 ; Using registers other than v0, v1 are possible, but would be odd.
   1407 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
   1408 ;CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
   1409 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
   1410 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1411 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1412 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1413    %tmp3 = fcmp ueq <2 x float> %A, %B
   1414    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1415 	ret <2 x i32> %tmp4
   1416 }
   1417 
   1418 define <4 x i32> @fcmueq4xfloat(<4 x float> %A, <4 x float> %B) {
   1419 ; Using registers other than v0, v1 are possible, but would be odd.
   1420 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
   1421 ;CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
   1422 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
   1423 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1424 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1425 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1426    %tmp3 = fcmp ueq <4 x float> %A, %B
   1427    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1428 	ret <4 x i32> %tmp4
   1429 }
   1430 
   1431 define <2 x i64> @fcmueq2xdouble(<2 x double> %A, <2 x double> %B) {
   1432 ; Using registers other than v0, v1 are possible, but would be odd.
   1433 ; UEQ = !ONE = !(OGT | OLT), OLT implemented as OGT so check reversed operands
   1434 ;CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
   1435 ;CHECK-NEXT: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
   1436 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1437 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1438 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1439    %tmp3 = fcmp ueq <2 x double> %A, %B
   1440    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1441 	ret <2 x i64> %tmp4
   1442 }
   1443 
   1444 define <2 x i32> @fcmuge2xfloat(<2 x float> %A, <2 x float> %B) {
   1445 ; Using registers other than v0, v1 are possible, but would be odd.
   1446 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
   1447 ;CHECK: fcmgt {{v[0-9]+}}.2s, v1.2s, v0.2s
   1448 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1449 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1450    %tmp3 = fcmp uge <2 x float> %A, %B
   1451    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1452 	ret <2 x i32> %tmp4
   1453 }
   1454 
   1455 define <4 x i32> @fcmuge4xfloat(<4 x float> %A, <4 x float> %B) {
   1456 ; Using registers other than v0, v1 are possible, but would be odd.
   1457 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
   1458 ;CHECK: fcmgt {{v[0-9]+}}.4s, v1.4s, v0.4s
   1459 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1460 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1461    %tmp3 = fcmp uge <4 x float> %A, %B
   1462    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1463 	ret <4 x i32> %tmp4
   1464 }
   1465 
   1466 define <2 x i64> @fcmuge2xdouble(<2 x double> %A, <2 x double> %B) {
   1467 ; Using registers other than v0, v1 are possible, but would be odd.
   1468 ; UGE = ULE with swapped operands, ULE implemented as !OGT.
   1469 ;CHECK: fcmgt {{v[0-9]+}}.2d, v1.2d, v0.2d
   1470 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1471 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1472    %tmp3 = fcmp uge <2 x double> %A, %B
   1473    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1474 	ret <2 x i64> %tmp4
   1475 }
   1476 
   1477 define <2 x i32> @fcmugt2xfloat(<2 x float> %A, <2 x float> %B) {
   1478 ; Using registers other than v0, v1 are possible, but would be odd.
   1479 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
   1480 ;CHECK: fcmge {{v[0-9]+}}.2s, v1.2s, v0.2s
   1481 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1482 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1483    %tmp3 = fcmp ugt <2 x float> %A, %B
   1484    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1485 	ret <2 x i32> %tmp4
   1486 }
   1487 
   1488 define <4 x i32> @fcmugt4xfloat(<4 x float> %A, <4 x float> %B) {
   1489 ; Using registers other than v0, v1 are possible, but would be odd.
   1490 ; UGT = ULT with swapped operands, ULT implemented as !OGE.
   1491 ;CHECK: fcmge {{v[0-9]+}}.4s, v1.4s, v0.4s
   1492 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1493 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1494    %tmp3 = fcmp ugt <4 x float> %A, %B
   1495    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1496 	ret <4 x i32> %tmp4
   1497 }
   1498 define <2 x i64> @fcmugt2xdouble(<2 x double> %A, <2 x double> %B) {
   1499 ;CHECK: fcmge {{v[0-9]+}}.2d, v1.2d, v0.2d
   1500 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1501 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1502    %tmp3 = fcmp ugt <2 x double> %A, %B
   1503    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1504 	ret <2 x i64> %tmp4
   1505 }
   1506 
   1507 define <2 x i32> @fcmule2xfloat(<2 x float> %A, <2 x float> %B) {
   1508 ; Using registers other than v0, v1 are possible, but would be odd.
   1509 ; ULE implemented as !OGT.
   1510 ;CHECK: fcmgt {{v[0-9]+}}.2s, v0.2s, v1.2s
   1511 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1512 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1513    %tmp3 = fcmp ule <2 x float> %A, %B
   1514    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1515 	ret <2 x i32> %tmp4
   1516 }
   1517 
   1518 define <4 x i32> @fcmule4xfloat(<4 x float> %A, <4 x float> %B) {
   1519 ; Using registers other than v0, v1 are possible, but would be odd.
   1520 ; ULE implemented as !OGT.
   1521 ;CHECK: fcmgt {{v[0-9]+}}.4s, v0.4s, v1.4s
   1522 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1523 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1524    %tmp3 = fcmp ule <4 x float> %A, %B
   1525    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1526 	ret <4 x i32> %tmp4
   1527 }
   1528 define <2 x i64> @fcmule2xdouble(<2 x double> %A, <2 x double> %B) {
   1529 ; Using registers other than v0, v1 are possible, but would be odd.
   1530 ; ULE implemented as !OGT.
   1531 ;CHECK: fcmgt {{v[0-9]+}}.2d, v0.2d, v1.2d
   1532 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1533 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1534    %tmp3 = fcmp ule <2 x double> %A, %B
   1535    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1536 	ret <2 x i64> %tmp4
   1537 }
   1538 
   1539 define <2 x i32> @fcmult2xfloat(<2 x float> %A, <2 x float> %B) {
   1540 ; Using registers other than v0, v1 are possible, but would be odd.
   1541 ; ULT implemented as !OGE.
   1542 ;CHECK: fcmge {{v[0-9]+}}.2s, v0.2s, v1.2s
   1543 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1544 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1545    %tmp3 = fcmp ult <2 x float> %A, %B
   1546    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1547 	ret <2 x i32> %tmp4
   1548 }
   1549 
   1550 define <4 x i32> @fcmult4xfloat(<4 x float> %A, <4 x float> %B) {
   1551 ; Using registers other than v0, v1 are possible, but would be odd.
   1552 ; ULT implemented as !OGE.
   1553 ;CHECK: fcmge {{v[0-9]+}}.4s, v0.4s, v1.4s
   1554 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1555 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1556    %tmp3 = fcmp ult <4 x float> %A, %B
   1557    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1558 	ret <4 x i32> %tmp4
   1559 }
   1560 define <2 x i64> @fcmult2xdouble(<2 x double> %A, <2 x double> %B) {
   1561 ; Using registers other than v0, v1 are possible, but would be odd.
   1562 ; ULT implemented as !OGE.
   1563 ;CHECK: fcmge {{v[0-9]+}}.2d, v0.2d, v1.2d
   1564 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1565 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1566    %tmp3 = fcmp ult <2 x double> %A, %B
   1567    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1568 	ret <2 x i64> %tmp4
   1569 }
   1570 
   1571 define <2 x i32> @fcmune2xfloat(<2 x float> %A, <2 x float> %B) {
   1572 ; Using registers other than v0, v1 are possible, but would be odd.
   1573 ; UNE = !OEQ.
   1574 ;CHECK: fcmeq {{v[0-9]+}}.2s, v0.2s, v1.2s
   1575 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1576 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1577    %tmp3 = fcmp une <2 x float> %A, %B
   1578    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1579 	ret <2 x i32> %tmp4
   1580 }
   1581 
   1582 define <4 x i32> @fcmune4xfloat(<4 x float> %A, <4 x float> %B) {
   1583 ; Using registers other than v0, v1 are possible, but would be odd.
   1584 ; UNE = !OEQ.
   1585 ;CHECK: fcmeq {{v[0-9]+}}.4s, v0.4s, v1.4s
   1586 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1587 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1588    %tmp3 = fcmp une <4 x float> %A, %B
   1589    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1590 	ret <4 x i32> %tmp4
   1591 }
   1592 define <2 x i64> @fcmune2xdouble(<2 x double> %A, <2 x double> %B) {
   1593 ; Using registers other than v0, v1 are possible, but would be odd.
   1594 ; UNE = !OEQ.
   1595 ;CHECK: fcmeq {{v[0-9]+}}.2d, v0.2d, v1.2d
   1596 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1597 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1598    %tmp3 = fcmp une <2 x double> %A, %B
   1599    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1600 	ret <2 x i64> %tmp4
   1601 }
   1602 
   1603 define <2 x i32> @fcmoeqz2xfloat(<2 x float> %A) {
   1604 ;CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1605    %tmp3 = fcmp oeq <2 x float> %A, zeroinitializer
   1606    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1607 	ret <2 x i32> %tmp4
   1608 }
   1609 
   1610 define <4 x i32> @fcmoeqz4xfloat(<4 x float> %A) {
   1611 ;CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1612    %tmp3 = fcmp oeq <4 x float> %A, zeroinitializer
   1613    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1614 	ret <4 x i32> %tmp4
   1615 }
   1616 define <2 x i64> @fcmoeqz2xdouble(<2 x double> %A) {
   1617 ;CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1618    %tmp3 = fcmp oeq <2 x double> %A, zeroinitializer
   1619    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1620 	ret <2 x i64> %tmp4
   1621 }
   1622 
   1623 
   1624 define <2 x i32> @fcmogez2xfloat(<2 x float> %A) {
   1625 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1626    %tmp3 = fcmp oge <2 x float> %A, zeroinitializer
   1627    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1628 	ret <2 x i32> %tmp4
   1629 }
   1630 
   1631 define <4 x i32> @fcmogez4xfloat(<4 x float> %A) {
   1632 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1633    %tmp3 = fcmp oge <4 x float> %A, zeroinitializer
   1634    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1635 	ret <4 x i32> %tmp4
   1636 }
   1637 define <2 x i64> @fcmogez2xdouble(<2 x double> %A) {
   1638 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1639    %tmp3 = fcmp oge <2 x double> %A, zeroinitializer
   1640    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1641 	ret <2 x i64> %tmp4
   1642 }
   1643 
   1644 define <2 x i32> @fcmogtz2xfloat(<2 x float> %A) {
   1645 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1646    %tmp3 = fcmp ogt <2 x float> %A, zeroinitializer
   1647    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1648 	ret <2 x i32> %tmp4
   1649 }
   1650 
   1651 define <4 x i32> @fcmogtz4xfloat(<4 x float> %A) {
   1652 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1653    %tmp3 = fcmp ogt <4 x float> %A, zeroinitializer
   1654    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1655 	ret <4 x i32> %tmp4
   1656 }
   1657 define <2 x i64> @fcmogtz2xdouble(<2 x double> %A) {
   1658 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1659    %tmp3 = fcmp ogt <2 x double> %A, zeroinitializer
   1660    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1661 	ret <2 x i64> %tmp4
   1662 }
   1663 
   1664 define <2 x i32> @fcmoltz2xfloat(<2 x float> %A) {
   1665 ;CHECK: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1666    %tmp3 = fcmp olt <2 x float> %A, zeroinitializer
   1667    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1668 	ret <2 x i32> %tmp4
   1669 }
   1670 
   1671 define <4 x i32> @fcmoltz4xfloat(<4 x float> %A) {
   1672 ;CHECK: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1673    %tmp3 = fcmp olt <4 x float> %A, zeroinitializer
   1674    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1675 	ret <4 x i32> %tmp4
   1676 }
   1677 
   1678 define <2 x i64> @fcmoltz2xdouble(<2 x double> %A) {
   1679 ;CHECK: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1680    %tmp3 = fcmp olt <2 x double> %A, zeroinitializer
   1681    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1682 	ret <2 x i64> %tmp4
   1683 }
   1684 
   1685 define <2 x i32> @fcmolez2xfloat(<2 x float> %A) {
   1686 ;CHECK: fcmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1687    %tmp3 = fcmp ole <2 x float> %A, zeroinitializer
   1688    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1689 	ret <2 x i32> %tmp4
   1690 }
   1691 
   1692 define <4 x i32> @fcmolez4xfloat(<4 x float> %A) {
   1693 ;CHECK: fcmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1694    %tmp3 = fcmp ole <4 x float> %A, zeroinitializer
   1695    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1696 	ret <4 x i32> %tmp4
   1697 }
   1698 
   1699 define <2 x i64> @fcmolez2xdouble(<2 x double> %A) {
   1700 ;CHECK: fcmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1701    %tmp3 = fcmp ole <2 x double> %A, zeroinitializer
   1702    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1703 	ret <2 x i64> %tmp4
   1704 }
   1705 
   1706 define <2 x i32> @fcmonez2xfloat(<2 x float> %A) {
   1707 ; ONE with zero = OLT | OGT
   1708 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1709 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1710 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1711    %tmp3 = fcmp one <2 x float> %A, zeroinitializer
   1712    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1713 	ret <2 x i32> %tmp4
   1714 }
   1715 
   1716 define <4 x i32> @fcmonez4xfloat(<4 x float> %A) {
   1717 ; ONE with zero = OLT | OGT
   1718 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1719 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1720 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1721    %tmp3 = fcmp one <4 x float> %A, zeroinitializer
   1722    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1723 	ret <4 x i32> %tmp4
   1724 }
   1725 define <2 x i64> @fcmonez2xdouble(<2 x double> %A) {
   1726 ; ONE with zero = OLT | OGT
   1727 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1728 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1729 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1730    %tmp3 = fcmp one <2 x double> %A, zeroinitializer
   1731    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1732 	ret <2 x i64> %tmp4
   1733 }
   1734 
   1735 define <2 x i32> @fcmordz2xfloat(<2 x float> %A) {
   1736 ; ORD with zero = OLT | OGE
   1737 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1738 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1739 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1740    %tmp3 = fcmp ord <2 x float> %A, zeroinitializer
   1741    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1742 	ret <2 x i32> %tmp4
   1743 }
   1744 
   1745 define <4 x i32> @fcmordz4xfloat(<4 x float> %A) {
   1746 ; ORD with zero = OLT | OGE
   1747 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1748 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1749 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1750    %tmp3 = fcmp ord <4 x float> %A, zeroinitializer
   1751    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1752 	ret <4 x i32> %tmp4
   1753 }
   1754 define <2 x i64> @fcmordz2xdouble(<2 x double> %A) {
   1755 ; ORD with zero = OLT | OGE
   1756 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1757 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1758 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1759    %tmp3 = fcmp ord <2 x double> %A, zeroinitializer
   1760    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1761 	ret <2 x i64> %tmp4
   1762 }
   1763 
   1764 define <2 x i32> @fcmueqz2xfloat(<2 x float> %A) {
   1765 ; UEQ with zero = !ONE = !(OLT |OGT)
   1766 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1767 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1768 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1769 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1770 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1771    %tmp3 = fcmp ueq <2 x float> %A, zeroinitializer
   1772    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1773 	ret <2 x i32> %tmp4
   1774 }
   1775 
   1776 define <4 x i32> @fcmueqz4xfloat(<4 x float> %A) {
   1777 ; UEQ with zero = !ONE = !(OLT |OGT)
   1778 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1779 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1780 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1781 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1782 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1783    %tmp3 = fcmp ueq <4 x float> %A, zeroinitializer
   1784    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1785 	ret <4 x i32> %tmp4
   1786 }
   1787 
   1788 define <2 x i64> @fcmueqz2xdouble(<2 x double> %A) {
   1789 ; UEQ with zero = !ONE = !(OLT |OGT)
   1790 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1791 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1792 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1793 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1794 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1795    %tmp3 = fcmp ueq <2 x double> %A, zeroinitializer
   1796    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1797 	ret <2 x i64> %tmp4
   1798 }
   1799 
   1800 define <2 x i32> @fcmugez2xfloat(<2 x float> %A) {
   1801 ; UGE with zero = !OLT
   1802 ;CHECK: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1803 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1804 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1805    %tmp3 = fcmp uge <2 x float> %A, zeroinitializer
   1806    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1807 	ret <2 x i32> %tmp4
   1808 }
   1809 
   1810 define <4 x i32> @fcmugez4xfloat(<4 x float> %A) {
   1811 ; UGE with zero = !OLT
   1812 ;CHECK: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1813 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1814 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1815    %tmp3 = fcmp uge <4 x float> %A, zeroinitializer
   1816    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1817 	ret <4 x i32> %tmp4
   1818 }
   1819 define <2 x i64> @fcmugez2xdouble(<2 x double> %A) {
   1820 ; UGE with zero = !OLT
   1821 ;CHECK: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1822 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1823 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1824    %tmp3 = fcmp uge <2 x double> %A, zeroinitializer
   1825    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1826 	ret <2 x i64> %tmp4
   1827 }
   1828 
   1829 define <2 x i32> @fcmugtz2xfloat(<2 x float> %A) {
   1830 ; UGT with zero = !OLE
   1831 ;CHECK: fcmle {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1832 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1833 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1834    %tmp3 = fcmp ugt <2 x float> %A, zeroinitializer
   1835    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1836 	ret <2 x i32> %tmp4
   1837 }
   1838 
   1839 define <4 x i32> @fcmugtz4xfloat(<4 x float> %A) {
   1840 ; UGT with zero = !OLE
   1841 ;CHECK: fcmle {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1842 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1843 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1844    %tmp3 = fcmp ugt <4 x float> %A, zeroinitializer
   1845    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1846 	ret <4 x i32> %tmp4
   1847 }
   1848 define <2 x i64> @fcmugtz2xdouble(<2 x double> %A) {
   1849 ; UGT with zero = !OLE
   1850 ;CHECK: fcmle {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1851 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1852 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1853    %tmp3 = fcmp ugt <2 x double> %A, zeroinitializer
   1854    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1855 	ret <2 x i64> %tmp4
   1856 }
   1857 
   1858 define <2 x i32> @fcmultz2xfloat(<2 x float> %A) {
   1859 ; ULT with zero = !OGE
   1860 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1861 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1862 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1863    %tmp3 = fcmp ult <2 x float> %A, zeroinitializer
   1864    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1865 	ret <2 x i32> %tmp4
   1866 }
   1867 
   1868 define <4 x i32> @fcmultz4xfloat(<4 x float> %A) {
   1869 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1870 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1871 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1872    %tmp3 = fcmp ult <4 x float> %A, zeroinitializer
   1873    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1874 	ret <4 x i32> %tmp4
   1875 }
   1876 
   1877 define <2 x i64> @fcmultz2xdouble(<2 x double> %A) {
   1878 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1879 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1880 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1881    %tmp3 = fcmp ult <2 x double> %A, zeroinitializer
   1882    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1883 	ret <2 x i64> %tmp4
   1884 }
   1885 
   1886 
   1887 define <2 x i32> @fcmulez2xfloat(<2 x float> %A) {
   1888 ; ULE with zero = !OGT
   1889 ;CHECK: fcmgt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1890 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1891 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1892    %tmp3 = fcmp ule <2 x float> %A, zeroinitializer
   1893    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1894 	ret <2 x i32> %tmp4
   1895 }
   1896 
   1897 define <4 x i32> @fcmulez4xfloat(<4 x float> %A) {
   1898 ; ULE with zero = !OGT
   1899 ;CHECK: fcmgt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1900 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1901 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1902    %tmp3 = fcmp ule <4 x float> %A, zeroinitializer
   1903    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1904 	ret <4 x i32> %tmp4
   1905 }
   1906 
   1907 define <2 x i64> @fcmulez2xdouble(<2 x double> %A) {
   1908 ; ULE with zero = !OGT
   1909 ;CHECK: fcmgt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1910 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1911 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1912    %tmp3 = fcmp ule <2 x double> %A, zeroinitializer
   1913    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1914 	ret <2 x i64> %tmp4
   1915 }
   1916 
   1917 define <2 x i32> @fcmunez2xfloat(<2 x float> %A) {
   1918 ; UNE with zero = !OEQ with zero
   1919 ;CHECK: fcmeq {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1920 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1921 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1922    %tmp3 = fcmp une <2 x float> %A, zeroinitializer
   1923    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1924 	ret <2 x i32> %tmp4
   1925 }
   1926 
   1927 define <4 x i32> @fcmunez4xfloat(<4 x float> %A) {
   1928 ; UNE with zero = !OEQ with zero
   1929 ;CHECK: fcmeq {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1930 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1931 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1932    %tmp3 = fcmp une <4 x float> %A, zeroinitializer
   1933    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1934 	ret <4 x i32> %tmp4
   1935 }
   1936 define <2 x i64> @fcmunez2xdouble(<2 x double> %A) {
   1937 ; UNE with zero = !OEQ with zero
   1938 ;CHECK: fcmeq {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1939 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1940 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1941    %tmp3 = fcmp une <2 x double> %A, zeroinitializer
   1942    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1943 	ret <2 x i64> %tmp4
   1944 }
   1945 
   1946 
   1947 define <2 x i32> @fcmunoz2xfloat(<2 x float> %A) {
   1948 ; UNO with zero = !ORD = !(OLT | OGE)
   1949 ;CHECK: fcmge {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1950 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, #0.0
   1951 ;CHECK-NEXT: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1952 ;CHECK-NEXT: movi {{v[0-9]+}}.8b, #0xff
   1953 ;CHECK-NEXT: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
   1954    %tmp3 = fcmp uno <2 x float> %A, zeroinitializer
   1955    %tmp4 = sext <2 x i1> %tmp3 to <2 x i32>
   1956 	ret <2 x i32> %tmp4
   1957 }
   1958 
   1959 define <4 x i32> @fcmunoz4xfloat(<4 x float> %A) {
   1960 ; UNO with zero = !ORD = !(OLT | OGE)
   1961 ;CHECK: fcmge {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1962 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, #0.0
   1963 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1964 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1965 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1966    %tmp3 = fcmp uno <4 x float> %A, zeroinitializer
   1967    %tmp4 = sext <4 x i1> %tmp3 to <4 x i32>
   1968 	ret <4 x i32> %tmp4
   1969 }
   1970 
   1971 define <2 x i64> @fcmunoz2xdouble(<2 x double> %A) {
   1972 ; UNO with zero = !ORD = !(OLT | OGE)
   1973 ;CHECK: fcmge {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1974 ;CHECK-NEXT: fcmlt {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, #0.0
   1975 ;CHECK-NEXT: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1976 ;CHECK-NEXT: movi {{v[0-9]+}}.16b, #0xff
   1977 ;CHECK-NEXT: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
   1978    %tmp3 = fcmp uno <2 x double> %A, zeroinitializer
   1979    %tmp4 = sext <2 x i1> %tmp3 to <2 x i64>
   1980 	ret <2 x i64> %tmp4
   1981 
   1982 }
   1983