Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -verify-machineinstrs -mtriple=aarch64-none-linux-gnu -mattr=+neon | FileCheck %s
      2 
      3 define <8 x i8> @and8xi8(<8 x i8> %a, <8 x i8> %b) {
      4 ; CHECK-LABEL: and8xi8:
      5 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
      6 	%tmp1 = and <8 x i8> %a, %b;
      7 	ret <8 x i8> %tmp1
      8 }
      9 
     10 define <16 x i8> @and16xi8(<16 x i8> %a, <16 x i8> %b) {
     11 ; CHECK-LABEL: and16xi8:
     12 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     13 	%tmp1 = and <16 x i8> %a, %b;
     14 	ret <16 x i8> %tmp1
     15 }
     16 
     17 
     18 define <8 x i8> @orr8xi8(<8 x i8> %a, <8 x i8> %b) {
     19 ; CHECK-LABEL: orr8xi8:
     20 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     21 	%tmp1 = or <8 x i8> %a, %b;
     22 	ret <8 x i8> %tmp1
     23 }
     24 
     25 define <16 x i8> @orr16xi8(<16 x i8> %a, <16 x i8> %b) {
     26 ; CHECK-LABEL: orr16xi8:
     27 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     28 	%tmp1 = or <16 x i8> %a, %b;
     29 	ret <16 x i8> %tmp1
     30 }
     31 
     32 
     33 define <8 x i8> @xor8xi8(<8 x i8> %a, <8 x i8> %b) {
     34 ; CHECK-LABEL: xor8xi8:
     35 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     36 	%tmp1 = xor <8 x i8> %a, %b;
     37 	ret <8 x i8> %tmp1
     38 }
     39 
     40 define <16 x i8> @xor16xi8(<16 x i8> %a, <16 x i8> %b) {
     41 ; CHECK-LABEL: xor16xi8:
     42 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     43 	%tmp1 = xor <16 x i8> %a, %b;
     44 	ret <16 x i8> %tmp1
     45 }
     46 
     47 define <8 x i8> @bsl8xi8_const(<8 x i8> %a, <8 x i8> %b)  {
     48 ; CHECK-LABEL: bsl8xi8_const:
     49 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     50 	%tmp1 = and <8 x i8> %a, < i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0 >
     51 	%tmp2 = and <8 x i8> %b, < i8 0, i8 0, i8 -1, i8 -1, i8 0, i8 0, i8 -1, i8 -1 >
     52 	%tmp3 = or <8 x i8> %tmp1, %tmp2
     53 	ret <8 x i8> %tmp3
     54 }
     55 
     56 define <16 x i8> @bsl16xi8_const(<16 x i8> %a, <16 x i8> %b) {
     57 ; CHECK-LABEL: bsl16xi8_const:
     58 ; CHECK: bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     59 	%tmp1 = and <16 x i8> %a, < i8 -1, i8 -1, i8 -1, i8 -1, i8 0, i8 0, i8 0, i8 0, i8 -1, i8 -1, i8 -1, i8 -1, i8 0, i8 0, i8 0, i8 0 >
     60 	%tmp2 = and <16 x i8> %b, < i8 0, i8 0, i8 0, i8 0, i8 -1, i8 -1, i8 -1, i8 -1, i8 0, i8 0, i8 0, i8 0, i8 -1, i8 -1, i8 -1, i8 -1 >
     61 	%tmp3 = or <16 x i8> %tmp1, %tmp2
     62 	ret <16 x i8> %tmp3
     63 }
     64 
     65 define <8 x i8> @orn8xi8(<8 x i8> %a, <8 x i8> %b)  {
     66 ; CHECK-LABEL: orn8xi8:
     67 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     68   %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
     69   %tmp2 = or <8 x i8> %a, %tmp1
     70   ret <8 x i8> %tmp2
     71 }
     72 
     73 define <16 x i8> @orn16xi8(<16 x i8> %a, <16 x i8> %b) {
     74 ; CHECK-LABEL: orn16xi8:
     75 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     76   %tmp1 = xor <16 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
     77   %tmp2 = or <16 x i8> %a, %tmp1
     78   ret <16 x i8> %tmp2
     79 }
     80 
     81 define <8 x i8> @bic8xi8(<8 x i8> %a, <8 x i8> %b)  {
     82 ; CHECK-LABEL: bic8xi8:
     83 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
     84   %tmp1 = xor <8 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
     85   %tmp2 = and <8 x i8> %a, %tmp1
     86   ret <8 x i8> %tmp2
     87 }
     88 
     89 define <16 x i8> @bic16xi8(<16 x i8> %a, <16 x i8> %b) {
     90 ; CHECK-LABEL: bic16xi8:
     91 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     92   %tmp1 = xor <16 x i8> %b, < i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1 >
     93   %tmp2 = and <16 x i8> %a, %tmp1
     94   ret <16 x i8> %tmp2
     95 }
     96 
     97 define <2 x i32> @orrimm2s_lsl0(<2 x i32> %a) {
     98 ; CHECK-LABEL: orrimm2s_lsl0:
     99 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
    100 	%tmp1 = or <2 x i32> %a, < i32 255, i32 255>
    101 	ret <2 x i32> %tmp1
    102 }
    103 
    104 define <2 x i32> @orrimm2s_lsl8(<2 x i32> %a) {
    105 ; CHECK-LABEL: orrimm2s_lsl8:
    106 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
    107 	%tmp1 = or <2 x i32> %a, < i32 65280, i32 65280>
    108 	ret <2 x i32> %tmp1
    109 }
    110 
    111 define <2 x i32> @orrimm2s_lsl16(<2 x i32> %a) {
    112 ; CHECK-LABEL: orrimm2s_lsl16:
    113 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
    114 	%tmp1 = or <2 x i32> %a, < i32 16711680, i32 16711680>
    115 	ret <2 x i32> %tmp1
    116 }
    117 
    118 define <2 x i32> @orrimm2s_lsl24(<2 x i32> %a) {
    119 ; CHECK-LABEL: orrimm2s_lsl24:
    120 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
    121 	%tmp1 = or <2 x i32> %a, < i32 4278190080, i32 4278190080>
    122 	ret <2 x i32> %tmp1
    123 }
    124 
    125 define <4 x i32> @orrimm4s_lsl0(<4 x i32> %a) {
    126 ; CHECK-LABEL: orrimm4s_lsl0:
    127 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
    128 	%tmp1 = or <4 x i32> %a, < i32 255, i32 255, i32 255, i32 255>
    129 	ret <4 x i32> %tmp1
    130 }
    131 
    132 define <4 x i32> @orrimm4s_lsl8(<4 x i32> %a) {
    133 ; CHECK-LABEL: orrimm4s_lsl8:
    134 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
    135 	%tmp1 = or <4 x i32> %a, < i32 65280, i32 65280, i32 65280, i32 65280>
    136 	ret <4 x i32> %tmp1
    137 }
    138 
    139 define <4 x i32> @orrimm4s_lsl16(<4 x i32> %a) {
    140 ; CHECK-LABEL: orrimm4s_lsl16:
    141 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
    142 	%tmp1 = or <4 x i32> %a, < i32 16711680, i32 16711680, i32 16711680, i32 16711680>
    143 	ret <4 x i32> %tmp1
    144 }
    145 
    146 define <4 x i32> @orrimm4s_lsl24(<4 x i32> %a) {
    147 ; CHECK-LABEL: orrimm4s_lsl24:
    148 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
    149 	%tmp1 = or <4 x i32> %a, < i32 4278190080, i32 4278190080, i32 4278190080, i32 4278190080>
    150 	ret <4 x i32> %tmp1
    151 }
    152 
    153 define <4 x i16> @orrimm4h_lsl0(<4 x i16> %a) {
    154 ; CHECK-LABEL: orrimm4h_lsl0:
    155 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
    156 	%tmp1 = or <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255 >
    157 	ret <4 x i16> %tmp1
    158 }
    159 
    160 define <4 x i16> @orrimm4h_lsl8(<4 x i16> %a) {
    161 ; CHECK-LABEL: orrimm4h_lsl8:
    162 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
    163 	%tmp1 = or <4 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280 >
    164 	ret <4 x i16> %tmp1
    165 }
    166 
    167 define <8 x i16> @orrimm8h_lsl0(<8 x i16> %a) {
    168 ; CHECK-LABEL: orrimm8h_lsl0:
    169 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
    170 	%tmp1 = or <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255 >
    171 	ret <8 x i16> %tmp1
    172 }
    173 
    174 define <8 x i16> @orrimm8h_lsl8(<8 x i16> %a) {
    175 ; CHECK-LABEL: orrimm8h_lsl8:
    176 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
    177 	%tmp1 = or <8 x i16> %a, < i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280, i16 65280 >
    178 	ret <8 x i16> %tmp1
    179 }
    180 
    181 define <2 x i32> @bicimm2s_lsl0(<2 x i32> %a) {
    182 ; CHECK-LABEL: bicimm2s_lsl0:
    183 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}
    184 	%tmp1 = and <2 x i32> %a, < i32 4294967279, i32 4294967279 >
    185 	ret <2 x i32> %tmp1
    186 }
    187 
    188 define <2 x i32> @bicimm2s_lsl8(<2 x i32> %a) {
    189 ; CHECK-LABEL: bicimm2s_lsl8:
    190 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #8
    191 	%tmp1 = and <2 x i32> %a, < i32 4294963199, i32  4294963199 >
    192 	ret <2 x i32> %tmp1
    193 }
    194 
    195 define <2 x i32> @bicimm2s_lsl16(<2 x i32> %a) {
    196 ; CHECK-LABEL: bicimm2s_lsl16:
    197 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #16
    198 	%tmp1 = and <2 x i32> %a, < i32 4293918719, i32 4293918719 >
    199 	ret <2 x i32> %tmp1
    200 }
    201 
    202 define <2 x i32> @bicimm2s_lsl124(<2 x i32> %a) {
    203 ; CHECK-LABEL: bicimm2s_lsl124:
    204 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0x10|16}}, lsl #24
    205 	%tmp1 = and <2 x i32> %a, < i32 4026531839, i32  4026531839>
    206 	ret <2 x i32> %tmp1
    207 }
    208 
    209 define <4 x i32> @bicimm4s_lsl0(<4 x i32> %a) {
    210 ; CHECK-LABEL: bicimm4s_lsl0:
    211 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}
    212 	%tmp1 = and <4 x i32> %a, < i32 4294967279, i32 4294967279, i32 4294967279, i32 4294967279 >
    213 	ret <4 x i32> %tmp1
    214 }
    215 
    216 define <4 x i32> @bicimm4s_lsl8(<4 x i32> %a) {
    217 ; CHECK-LABEL: bicimm4s_lsl8:
    218 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #8
    219 	%tmp1 = and <4 x i32> %a, < i32 4294963199, i32  4294963199, i32  4294963199, i32  4294963199 >
    220 	ret <4 x i32> %tmp1
    221 }
    222 
    223 define <4 x i32> @bicimm4s_lsl16(<4 x i32> %a) {
    224 ; CHECK-LABEL: bicimm4s_lsl16:
    225 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #16
    226 	%tmp1 = and <4 x i32> %a, < i32 4293918719, i32 4293918719, i32 4293918719, i32 4293918719 >
    227 	ret <4 x i32> %tmp1
    228 }
    229 
    230 define <4 x i32> @bicimm4s_lsl124(<4 x i32> %a) {
    231 ; CHECK-LABEL: bicimm4s_lsl124:
    232 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0x10|16}}, lsl #24
    233 	%tmp1 = and <4 x i32> %a, < i32 4026531839, i32  4026531839, i32  4026531839, i32  4026531839>
    234 	ret <4 x i32> %tmp1
    235 }
    236 
    237 define <4 x i16> @bicimm4h_lsl0_a(<4 x i16> %a) {
    238 ; CHECK-LABEL: bicimm4h_lsl0_a:
    239 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0x10|16}}
    240 	%tmp1 = and <4 x i16> %a, < i16 4294967279, i16  4294967279, i16  4294967279, i16  4294967279 >
    241 	ret <4 x i16> %tmp1
    242 }
    243 
    244 define <4 x i16> @bicimm4h_lsl0_b(<4 x i16> %a) {
    245 ; CHECK-LABEL: bicimm4h_lsl0_b:
    246 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
    247 	%tmp1 = and <4 x i16> %a, < i16 65280, i16  65280, i16  65280, i16 65280 >
    248 	ret <4 x i16> %tmp1
    249 }
    250 
    251 define <4 x i16> @bicimm4h_lsl8_a(<4 x i16> %a) {
    252 ; CHECK-LABEL: bicimm4h_lsl8_a:
    253 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0x10|16}}, lsl #8
    254 	%tmp1 = and <4 x i16> %a, < i16 4294963199, i16  4294963199, i16  4294963199, i16  4294963199>
    255 	ret <4 x i16> %tmp1
    256 }
    257 
    258 define <4 x i16> @bicimm4h_lsl8_b(<4 x i16> %a) {
    259 ; CHECK-LABEL: bicimm4h_lsl8_b:
    260 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
    261 	%tmp1 = and <4 x i16> %a, < i16 255, i16 255, i16 255, i16 255>
    262 	ret <4 x i16> %tmp1
    263 }
    264 
    265 define <8 x i16> @bicimm8h_lsl0_a(<8 x i16> %a) {
    266 ; CHECK-LABEL: bicimm8h_lsl0_a:
    267 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0x10|16}}
    268 	%tmp1 = and <8 x i16> %a, < i16 4294967279, i16  4294967279, i16  4294967279, i16  4294967279,
    269    i16  4294967279, i16  4294967279, i16  4294967279, i16  4294967279 >
    270 	ret <8 x i16> %tmp1
    271 }
    272 
    273 define <8 x i16> @bicimm8h_lsl0_b(<8 x i16> %a) {
    274 ; CHECK-LABEL: bicimm8h_lsl0_b:
    275 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
    276 	%tmp1 = and <8 x i16> %a, < i16 65280, i16  65280, i16  65280, i16 65280, i16 65280, i16  65280, i16  65280, i16 65280 >
    277 	ret <8 x i16> %tmp1
    278 }
    279 
    280 define <8 x i16> @bicimm8h_lsl8_a(<8 x i16> %a) {
    281 ; CHECK-LABEL: bicimm8h_lsl8_a:
    282 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0x10|16}}, lsl #8
    283 	%tmp1 = and <8 x i16> %a, < i16 4294963199, i16  4294963199, i16  4294963199, i16  4294963199,
    284    i16  4294963199, i16  4294963199, i16  4294963199, i16  4294963199>
    285 	ret <8 x i16> %tmp1
    286 }
    287 
    288 define <8 x i16> @bicimm8h_lsl8_b(<8 x i16> %a) {
    289 ; CHECK-LABEL: bicimm8h_lsl8_b:
    290 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
    291 	%tmp1 = and <8 x i16> %a, < i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255, i16 255>
    292 	ret <8 x i16> %tmp1
    293 }
    294 
    295 define <2 x i32> @and2xi32(<2 x i32> %a, <2 x i32> %b) {
    296 ; CHECK-LABEL: and2xi32:
    297 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    298 	%tmp1 = and <2 x i32> %a, %b;
    299 	ret <2 x i32> %tmp1
    300 }
    301 
    302 define <4 x i16> @and4xi16(<4 x i16> %a, <4 x i16> %b) {
    303 ; CHECK-LABEL: and4xi16:
    304 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    305 	%tmp1 = and <4 x i16> %a, %b;
    306 	ret <4 x i16> %tmp1
    307 }
    308 
    309 define <1 x i64> @and1xi64(<1 x i64> %a, <1 x i64> %b) {
    310 ; CHECK-LABEL: and1xi64:
    311 ; CHECK: and {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    312 	%tmp1 = and <1 x i64> %a, %b;
    313 	ret <1 x i64> %tmp1
    314 }
    315 
    316 define <4 x i32> @and4xi32(<4 x i32> %a, <4 x i32> %b) {
    317 ; CHECK-LABEL: and4xi32:
    318 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    319 	%tmp1 = and <4 x i32> %a, %b;
    320 	ret <4 x i32> %tmp1
    321 }
    322 
    323 define <8 x i16> @and8xi16(<8 x i16> %a, <8 x i16> %b) {
    324 ; CHECK-LABEL: and8xi16:
    325 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    326 	%tmp1 = and <8 x i16> %a, %b;
    327 	ret <8 x i16> %tmp1
    328 }
    329 
    330 define <2 x i64> @and2xi64(<2 x i64> %a, <2 x i64> %b) {
    331 ; CHECK-LABEL: and2xi64:
    332 ; CHECK: and {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    333 	%tmp1 = and <2 x i64> %a, %b;
    334 	ret <2 x i64> %tmp1
    335 }
    336 
    337 define <2 x i32> @orr2xi32(<2 x i32> %a, <2 x i32> %b) {
    338 ; CHECK-LABEL: orr2xi32:
    339 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    340 	%tmp1 = or <2 x i32> %a, %b;
    341 	ret <2 x i32> %tmp1
    342 }
    343 
    344 define <4 x i16> @orr4xi16(<4 x i16> %a, <4 x i16> %b) {
    345 ; CHECK-LABEL: orr4xi16:
    346 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    347 	%tmp1 = or <4 x i16> %a, %b;
    348 	ret <4 x i16> %tmp1
    349 }
    350 
    351 define <1 x i64> @orr1xi64(<1 x i64> %a, <1 x i64> %b) {
    352 ; CHECK-LABEL: orr1xi64:
    353 ; CHECK: orr {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    354 	%tmp1 = or <1 x i64> %a, %b;
    355 	ret <1 x i64> %tmp1
    356 }
    357 
    358 define <4 x i32> @orr4xi32(<4 x i32> %a, <4 x i32> %b) {
    359 ; CHECK-LABEL: orr4xi32:
    360 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    361 	%tmp1 = or <4 x i32> %a, %b;
    362 	ret <4 x i32> %tmp1
    363 }
    364 
    365 define <8 x i16> @orr8xi16(<8 x i16> %a, <8 x i16> %b) {
    366 ; CHECK-LABEL: orr8xi16:
    367 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    368 	%tmp1 = or <8 x i16> %a, %b;
    369 	ret <8 x i16> %tmp1
    370 }
    371 
    372 define <2 x i64> @orr2xi64(<2 x i64> %a, <2 x i64> %b) {
    373 ; CHECK-LABEL: orr2xi64:
    374 ; CHECK: orr {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    375 	%tmp1 = or <2 x i64> %a, %b;
    376 	ret <2 x i64> %tmp1
    377 }
    378 
    379 define <2 x i32> @eor2xi32(<2 x i32> %a, <2 x i32> %b) {
    380 ; CHECK-LABEL: eor2xi32:
    381 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    382 	%tmp1 = xor <2 x i32> %a, %b;
    383 	ret <2 x i32> %tmp1
    384 }
    385 
    386 define <4 x i16> @eor4xi16(<4 x i16> %a, <4 x i16> %b) {
    387 ; CHECK-LABEL: eor4xi16:
    388 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    389 	%tmp1 = xor <4 x i16> %a, %b;
    390 	ret <4 x i16> %tmp1
    391 }
    392 
    393 define <1 x i64> @eor1xi64(<1 x i64> %a, <1 x i64> %b) {
    394 ; CHECK-LABEL: eor1xi64:
    395 ; CHECK: eor {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    396 	%tmp1 = xor <1 x i64> %a, %b;
    397 	ret <1 x i64> %tmp1
    398 }
    399 
    400 define <4 x i32> @eor4xi32(<4 x i32> %a, <4 x i32> %b) {
    401 ; CHECK-LABEL: eor4xi32:
    402 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    403 	%tmp1 = xor <4 x i32> %a, %b;
    404 	ret <4 x i32> %tmp1
    405 }
    406 
    407 define <8 x i16> @eor8xi16(<8 x i16> %a, <8 x i16> %b) {
    408 ; CHECK-LABEL: eor8xi16:
    409 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    410 	%tmp1 = xor <8 x i16> %a, %b;
    411 	ret <8 x i16> %tmp1
    412 }
    413 
    414 define <2 x i64> @eor2xi64(<2 x i64> %a, <2 x i64> %b) {
    415 ; CHECK-LABEL: eor2xi64:
    416 ; CHECK: eor {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    417 	%tmp1 = xor <2 x i64> %a, %b;
    418 	ret <2 x i64> %tmp1
    419 }
    420 
    421 
    422 define <2 x i32> @bic2xi32(<2 x i32> %a, <2 x i32> %b)  {
    423 ; CHECK-LABEL: bic2xi32:
    424 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    425   %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
    426   %tmp2 = and <2 x i32> %a, %tmp1
    427   ret <2 x i32> %tmp2
    428 }
    429 
    430 define <4 x i16> @bic4xi16(<4 x i16> %a, <4 x i16> %b)  {
    431 ; CHECK-LABEL: bic4xi16:
    432 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    433   %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
    434   %tmp2 = and <4 x i16> %a, %tmp1
    435   ret <4 x i16> %tmp2
    436 }
    437 
    438 define <1 x i64> @bic1xi64(<1 x i64> %a, <1 x i64> %b)  {
    439 ; CHECK-LABEL: bic1xi64:
    440 ; CHECK:  bic {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    441   %tmp1 = xor <1 x i64> %b, < i64 -1>
    442   %tmp2 = and <1 x i64> %a, %tmp1
    443   ret <1 x i64> %tmp2
    444 }
    445 
    446 define <4 x i32> @bic4xi32(<4 x i32> %a, <4 x i32> %b)  {
    447 ; CHECK-LABEL: bic4xi32:
    448 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    449   %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
    450   %tmp2 = and <4 x i32> %a, %tmp1
    451   ret <4 x i32> %tmp2
    452 }
    453 
    454 define <8 x i16> @bic8xi16(<8 x i16> %a, <8 x i16> %b)  {
    455 ; CHECK-LABEL: bic8xi16:
    456 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    457   %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
    458   %tmp2 = and <8 x i16> %a, %tmp1
    459   ret <8 x i16> %tmp2
    460 }
    461 
    462 define <2 x i64> @bic2xi64(<2 x i64> %a, <2 x i64> %b)  {
    463 ; CHECK-LABEL: bic2xi64:
    464 ; CHECK:  bic {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    465   %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
    466   %tmp2 = and <2 x i64> %a, %tmp1
    467   ret <2 x i64> %tmp2
    468 }
    469 
    470 define <2 x i32> @orn2xi32(<2 x i32> %a, <2 x i32> %b)  {
    471 ; CHECK-LABEL: orn2xi32:
    472 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    473   %tmp1 = xor <2 x i32> %b, < i32 -1, i32 -1 >
    474   %tmp2 = or <2 x i32> %a, %tmp1
    475   ret <2 x i32> %tmp2
    476 }
    477 
    478 define <4 x i16> @orn4xi16(<4 x i16> %a, <4 x i16> %b)  {
    479 ; CHECK-LABEL: orn4xi16:
    480 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    481   %tmp1 = xor <4 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1 >
    482   %tmp2 = or <4 x i16> %a, %tmp1
    483   ret <4 x i16> %tmp2
    484 }
    485 
    486 define <1 x i64> @orn1xi64(<1 x i64> %a, <1 x i64> %b)  {
    487 ; CHECK-LABEL: orn1xi64:
    488 ; CHECK:  orn {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    489   %tmp1 = xor <1 x i64> %b, < i64 -1>
    490   %tmp2 = or <1 x i64> %a, %tmp1
    491   ret <1 x i64> %tmp2
    492 }
    493 
    494 define <4 x i32> @orn4xi32(<4 x i32> %a, <4 x i32> %b)  {
    495 ; CHECK-LABEL: orn4xi32:
    496 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    497   %tmp1 = xor <4 x i32> %b, < i32 -1, i32 -1, i32 -1, i32 -1>
    498   %tmp2 = or <4 x i32> %a, %tmp1
    499   ret <4 x i32> %tmp2
    500 }
    501 
    502 define <8 x i16> @orn8xi16(<8 x i16> %a, <8 x i16> %b)  {
    503 ; CHECK-LABEL: orn8xi16:
    504 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    505   %tmp1 = xor <8 x i16> %b, < i16 -1, i16 -1, i16 -1, i16-1, i16 -1, i16 -1, i16 -1, i16 -1 >
    506   %tmp2 = or <8 x i16> %a, %tmp1
    507   ret <8 x i16> %tmp2
    508 }
    509 
    510 define <2 x i64> @orn2xi64(<2 x i64> %a, <2 x i64> %b)  {
    511 ; CHECK-LABEL: orn2xi64:
    512 ; CHECK:  orn {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    513   %tmp1 = xor <2 x i64> %b, < i64 -1, i64 -1>
    514   %tmp2 = or <2 x i64> %a, %tmp1
    515   ret <2 x i64> %tmp2
    516 }
    517 
    518 define <2 x i32> @bsl2xi32_const(<2 x i32> %a, <2 x i32> %b)  {
    519 ; CHECK-LABEL: bsl2xi32_const:
    520 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    521 	%tmp1 = and <2 x i32> %a, < i32 -1, i32 0 >
    522 	%tmp2 = and <2 x i32> %b, < i32 0, i32 -1 >
    523 	%tmp3 = or <2 x i32> %tmp1, %tmp2
    524 	ret <2 x i32> %tmp3
    525 }
    526 
    527 
    528 define <4 x i16> @bsl4xi16_const(<4 x i16> %a, <4 x i16> %b)  {
    529 ; CHECK-LABEL: bsl4xi16_const:
    530 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    531 	%tmp1 = and <4 x i16> %a, < i16 -1, i16 0, i16 -1,i16 0 >
    532 	%tmp2 = and <4 x i16> %b, < i16 0, i16 -1,i16 0, i16 -1 >
    533 	%tmp3 = or <4 x i16> %tmp1, %tmp2
    534 	ret <4 x i16> %tmp3
    535 }
    536 
    537 define <1 x i64> @bsl1xi64_const(<1 x i64> %a, <1 x i64> %b)  {
    538 ; CHECK-LABEL: bsl1xi64_const:
    539 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    540 	%tmp1 = and <1 x i64> %a, < i64 -16 >
    541 	%tmp2 = and <1 x i64> %b, < i64 15 >
    542 	%tmp3 = or <1 x i64> %tmp1, %tmp2
    543 	ret <1 x i64> %tmp3
    544 }
    545 
    546 define <4 x i32> @bsl4xi32_const(<4 x i32> %a, <4 x i32> %b)  {
    547 ; CHECK-LABEL: bsl4xi32_const:
    548 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    549 	%tmp1 = and <4 x i32> %a, < i32 -1, i32 0, i32 -1, i32 0 >
    550 	%tmp2 = and <4 x i32> %b, < i32 0, i32 -1, i32 0, i32 -1 >
    551 	%tmp3 = or <4 x i32> %tmp1, %tmp2
    552 	ret <4 x i32> %tmp3
    553 }
    554 
    555 define <8 x i16> @bsl8xi16_const(<8 x i16> %a, <8 x i16> %b)  {
    556 ; CHECK-LABEL: bsl8xi16_const:
    557 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    558 	%tmp1 = and <8 x i16> %a, < i16 -1, i16 -1, i16 0,i16 0, i16 -1, i16 -1, i16 0,i16 0 >
    559 	%tmp2 = and <8 x i16> %b, < i16 0, i16 0, i16 -1, i16 -1, i16 0, i16 0, i16 -1, i16 -1 >
    560 	%tmp3 = or <8 x i16> %tmp1, %tmp2
    561 	ret <8 x i16> %tmp3
    562 }
    563 
    564 define <2 x i64> @bsl2xi64_const(<2 x i64> %a, <2 x i64> %b)  {
    565 ; CHECK-LABEL: bsl2xi64_const:
    566 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    567 	%tmp1 = and <2 x i64> %a, < i64 -1, i64 0 >
    568 	%tmp2 = and <2 x i64> %b, < i64 0, i64 -1 >
    569 	%tmp3 = or <2 x i64> %tmp1, %tmp2
    570 	ret <2 x i64> %tmp3
    571 }
    572 
    573 
    574 define <8 x i8> @bsl8xi8(<8 x i8> %v1, <8 x i8> %v2, <8 x i8> %v3) {
    575 ; CHECK-LABEL: bsl8xi8:
    576 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    577   %1 = and <8 x i8> %v1, %v2
    578   %2 = xor <8 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    579   %3 = and <8 x i8> %2, %v3
    580   %4 = or <8 x i8> %1, %3
    581   ret <8 x i8> %4
    582 }
    583 
    584 define <4 x i16> @bsl4xi16(<4 x i16> %v1, <4 x i16> %v2, <4 x i16> %v3) {
    585 ; CHECK-LABEL: bsl4xi16:
    586 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    587   %1 = and <4 x i16> %v1, %v2
    588   %2 = xor <4 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1>
    589   %3 = and <4 x i16> %2, %v3
    590   %4 = or <4 x i16> %1, %3
    591   ret <4 x i16> %4
    592 }
    593 
    594 define <2 x i32> @bsl2xi32(<2 x i32> %v1, <2 x i32> %v2, <2 x i32> %v3) {
    595 ; CHECK-LABEL: bsl2xi32:
    596 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    597   %1 = and <2 x i32> %v1, %v2
    598   %2 = xor <2 x i32> %v1, <i32 -1, i32 -1>
    599   %3 = and <2 x i32> %2, %v3
    600   %4 = or <2 x i32> %1, %3
    601   ret <2 x i32> %4
    602 }
    603 
    604 define <1 x i64> @bsl1xi64(<1 x i64> %v1, <1 x i64> %v2, <1 x i64> %v3) {
    605 ; CHECK-LABEL: bsl1xi64:
    606 ; CHECK:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    607   %1 = and <1 x i64> %v1, %v2
    608   %2 = xor <1 x i64> %v1, <i64 -1>
    609   %3 = and <1 x i64> %2, %v3
    610   %4 = or <1 x i64> %1, %3
    611   ret <1 x i64> %4
    612 }
    613 
    614 define <16 x i8> @bsl16xi8(<16 x i8> %v1, <16 x i8> %v2, <16 x i8> %v3) {
    615 ; CHECK-LABEL: bsl16xi8:
    616 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    617   %1 = and <16 x i8> %v1, %v2
    618   %2 = xor <16 x i8> %v1, <i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>
    619   %3 = and <16 x i8> %2, %v3
    620   %4 = or <16 x i8> %1, %3
    621   ret <16 x i8> %4
    622 }
    623 
    624 define <8 x i16> @bsl8xi16(<8 x i16> %v1, <8 x i16> %v2, <8 x i16> %v3) {
    625 ; CHECK-LABEL: bsl8xi16:
    626 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    627   %1 = and <8 x i16> %v1, %v2
    628   %2 = xor <8 x i16> %v1, <i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1, i16 -1>
    629   %3 = and <8 x i16> %2, %v3
    630   %4 = or <8 x i16> %1, %3
    631   ret <8 x i16> %4
    632 }
    633 
    634 define <4 x i32> @bsl4xi32(<4 x i32> %v1, <4 x i32> %v2, <4 x i32> %v3) {
    635 ; CHECK-LABEL: bsl4xi32:
    636 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    637   %1 = and <4 x i32> %v1, %v2
    638   %2 = xor <4 x i32> %v1, <i32 -1, i32 -1, i32 -1, i32 -1>
    639   %3 = and <4 x i32> %2, %v3
    640   %4 = or <4 x i32> %1, %3
    641   ret <4 x i32> %4
    642 }
    643 
    644 define <8 x i8> @vselect_v8i8(<8 x i8> %a) {
    645 ; CHECK-LABEL: vselect_v8i8:
    646 ; CHECK:  movi {{d[0-9]+}}, #0x{{0*}}ffff
    647 ; CHECK-NEXT:  {{bsl v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b|and v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b}}
    648   %b = select <8 x i1> <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <8 x i8> %a, <8 x i8> <i8 undef, i8 undef, i8 0, i8 0, i8 0, i8 0, i8 0, i8 0>
    649   ret <8 x i8> %b
    650 }
    651 
    652 define <4 x i16> @vselect_v4i16(<4 x i16> %a) {
    653 ; CHECK-LABEL: vselect_v4i16:
    654 ; CHECK:  movi {{d[0-9]+}}, #0x{{0*}}ffff
    655 ; CHECK-NEXT:  {{bsl v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b|and v[0-9]+.8b, v[0-9]+.8b, v[0-9]+.8b}}
    656   %b = select <4 x i1> <i1 true, i1 false, i1 false, i1 false>, <4 x i16> %a, <4 x i16> <i16 undef, i16 0, i16 0, i16 0>
    657   ret <4 x i16> %b
    658 }
    659 
    660 define <8 x i8> @vselect_cmp_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
    661 ; CHECK-LABEL: vselect_cmp_ne:
    662 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    663 ; CHECK-NEXT:  {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    664 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    665   %cmp = icmp ne <8 x i8> %a, %b
    666   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
    667   ret <8 x i8> %d
    668 }
    669 
    670 define <8 x i8> @vselect_cmp_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
    671 ; CHECK-LABEL: vselect_cmp_eq:
    672 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    673 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    674   %cmp = icmp eq <8 x i8> %a, %b
    675   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
    676   ret <8 x i8> %d
    677 }
    678 
    679 define <8 x i8> @vselect_cmpz_ne(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
    680 ; CHECK-LABEL: vselect_cmpz_ne:
    681 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0
    682 ; CHECK-NEXT:  {{mvn|not}} {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    683 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    684   %cmp = icmp ne <8 x i8> %a, zeroinitializer
    685   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
    686   ret <8 x i8> %d
    687 }
    688 
    689 define <8 x i8> @vselect_cmpz_eq(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
    690 ; CHECK-LABEL: vselect_cmpz_eq:
    691 ; CHECK:  cmeq {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, #0
    692 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    693   %cmp = icmp eq <8 x i8> %a, zeroinitializer
    694   %d = select <8 x i1> %cmp, <8 x i8> %b, <8 x i8> %c
    695   ret <8 x i8> %d
    696 }
    697 
    698 define <8 x i8> @vselect_tst(<8 x i8> %a, <8 x i8> %b, <8 x i8> %c) {
    699 ; CHECK-LABEL: vselect_tst:
    700 ; CHECK:  cmtst {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    701 ; CHECK-NEXT:  bsl {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
    702 	%tmp3 = and <8 x i8> %a, %b
    703 	%tmp4 = icmp ne <8 x i8> %tmp3, zeroinitializer
    704   %d = select <8 x i1> %tmp4, <8 x i8> %b, <8 x i8> %c
    705   ret <8 x i8> %d
    706 }
    707 
    708 define <2 x i64> @bsl2xi64(<2 x i64> %v1, <2 x i64> %v2, <2 x i64> %v3) {
    709 ; CHECK-LABEL: bsl2xi64:
    710 ; CHECK:  bsl {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
    711   %1 = and <2 x i64> %v1, %v2
    712   %2 = xor <2 x i64> %v1, <i64 -1, i64 -1>
    713   %3 = and <2 x i64> %2, %v3
    714   %4 = or <2 x i64> %1, %3
    715   ret <2 x i64> %4
    716 }
    717 
    718 define <8 x i8> @orrimm8b_as_orrimm4h_lsl0(<8 x i8> %a) {
    719 ; CHECK-LABEL: orrimm8b_as_orrimm4h_lsl0:
    720 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
    721   %val = or <8 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
    722   ret <8 x i8> %val
    723 }
    724 
    725 define <8 x i8> @orrimm8b_as_orimm4h_lsl8(<8 x i8> %a) {
    726 ; CHECK-LABEL: orrimm8b_as_orimm4h_lsl8:
    727 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
    728   %val = or <8 x i8> %a, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
    729   ret <8 x i8> %val
    730 }
    731 
    732 define <16 x i8> @orimm16b_as_orrimm8h_lsl0(<16 x i8> %a) {
    733 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl0:
    734 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
    735   %val = or <16 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
    736   ret <16 x i8> %val
    737 }
    738 
    739 define <16 x i8> @orimm16b_as_orrimm8h_lsl8(<16 x i8> %a) {
    740 ; CHECK-LABEL: orimm16b_as_orrimm8h_lsl8:
    741 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
    742   %val = or <16 x i8> %a, <i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
    743   ret <16 x i8> %val
    744 }
    745 
    746 define <8 x i8> @and8imm2s_lsl0(<8 x i8> %a) {
    747 ; CHECK-LABEL: and8imm2s_lsl0:
    748 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}
    749 	%tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255>
    750 	ret <8 x i8> %tmp1
    751 }
    752 
    753 define <8 x i8> @and8imm2s_lsl8(<8 x i8> %a) {
    754 ; CHECK-LABEL: and8imm2s_lsl8:
    755 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
    756 	%tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255>
    757 	ret <8 x i8> %tmp1
    758 }
    759 
    760 define <8 x i8> @and8imm2s_lsl16(<8 x i8> %a) {
    761 ; CHECK-LABEL: and8imm2s_lsl16:
    762 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
    763 	%tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255>
    764 	ret <8 x i8> %tmp1
    765 }
    766 
    767 define <8 x i8> @and8imm2s_lsl24(<8 x i8> %a) {
    768 ; CHECK-LABEL: and8imm2s_lsl24:
    769 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
    770 	%tmp1 = and <8 x i8> %a, < i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1>
    771 	ret <8 x i8> %tmp1
    772 }
    773 
    774 define <4 x i16> @and16imm2s_lsl0(<4 x i16> %a) {
    775 ; CHECK-LABEL: and16imm2s_lsl0:
    776 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}
    777 	%tmp1 = and <4 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535>
    778 	ret <4 x i16> %tmp1
    779 }
    780 
    781 define <4 x i16> @and16imm2s_lsl8(<4 x i16> %a) {
    782 ; CHECK-LABEL: and16imm2s_lsl8:
    783 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
    784 	%tmp1 = and <4 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535>
    785 	ret <4 x i16> %tmp1
    786 }
    787 
    788 define <4 x i16> @and16imm2s_lsl16(<4 x i16> %a) {
    789 ; CHECK-LABEL: and16imm2s_lsl16:
    790 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
    791 	%tmp1 = and <4 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280>
    792 	ret <4 x i16> %tmp1
    793 }
    794 
    795 define <4 x i16> @and16imm2s_lsl24(<4 x i16> %a) {
    796 ; CHECK-LABEL: and16imm2s_lsl24:
    797 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
    798 	%tmp1 = and <4 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511>
    799 	ret <4 x i16> %tmp1
    800 }
    801 
    802 
    803 define <1 x i64> @and64imm2s_lsl0(<1 x i64> %a) {
    804 ; CHECK-LABEL: and64imm2s_lsl0:
    805 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}
    806 	%tmp1 = and <1 x i64> %a, < i64 -1095216660736>
    807 	ret <1 x i64> %tmp1
    808 }
    809 
    810 define <1 x i64> @and64imm2s_lsl8(<1 x i64> %a) {
    811 ; CHECK-LABEL: and64imm2s_lsl8:
    812 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
    813 	%tmp1 = and <1 x i64> %a, < i64 -280375465148161>
    814 	ret <1 x i64> %tmp1
    815 }
    816 
    817 define <1 x i64> @and64imm2s_lsl16(<1 x i64> %a) {
    818 ; CHECK-LABEL: and64imm2s_lsl16:
    819 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
    820 	%tmp1 = and <1 x i64> %a, < i64 -71776119077928961>
    821 	ret <1 x i64> %tmp1
    822 }
    823 
    824 define <1 x i64> @and64imm2s_lsl24(<1 x i64> %a) {
    825 ; CHECK-LABEL: and64imm2s_lsl24:
    826 ; CHECK:  bic {{v[0-9]+}}.2s, #{{0xfe|254}}, lsl #24
    827 	%tmp1 = and <1 x i64> %a, < i64 144115183814443007>
    828 	ret <1 x i64> %tmp1
    829 }
    830 
    831 define <16 x i8> @and8imm4s_lsl0(<16 x i8> %a) {
    832 ; CHECK-LABEL: and8imm4s_lsl0:
    833 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}
    834 	%tmp1 = and <16 x i8> %a, < i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255>
    835 	ret <16 x i8> %tmp1
    836 }
    837 
    838 define <16 x i8> @and8imm4s_lsl8(<16 x i8> %a) {
    839 ; CHECK-LABEL: and8imm4s_lsl8:
    840 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
    841 	%tmp1 = and <16 x i8> %a, < i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255>
    842 	ret <16 x i8> %tmp1
    843 }
    844 
    845 define <16 x i8> @and8imm4s_lsl16(<16 x i8> %a) {
    846 ; CHECK-LABEL: and8imm4s_lsl16:
    847 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
    848 	%tmp1 = and <16 x i8> %a, < i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255, i8 255, i8 255, i8 0, i8 255>
    849 	ret <16 x i8> %tmp1
    850 }
    851 
    852 define <16 x i8> @and8imm4s_lsl24(<16 x i8> %a) {
    853 ; CHECK-LABEL: and8imm4s_lsl24:
    854 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
    855 	%tmp1 = and <16 x i8> %a, < i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1, i8 255, i8 255, i8 255, i8 1>
    856 	ret <16 x i8> %tmp1
    857 }
    858 
    859 define <8 x i16> @and16imm4s_lsl0(<8 x i16> %a) {
    860 ; CHECK-LABEL: and16imm4s_lsl0:
    861 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}
    862 	%tmp1 = and <8 x i16> %a, < i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535>
    863 	ret <8 x i16> %tmp1
    864 }
    865 
    866 define <8 x i16> @and16imm4s_lsl8(<8 x i16> %a) {
    867 ; CHECK-LABEL: and16imm4s_lsl8:
    868 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
    869 	%tmp1 = and <8 x i16> %a, < i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535, i16 255, i16 65535>
    870 	ret <8 x i16> %tmp1
    871 }
    872 
    873 define <8 x i16> @and16imm4s_lsl16(<8 x i16> %a) {
    874 ; CHECK-LABEL: and16imm4s_lsl16:
    875 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
    876 	%tmp1 = and <8 x i16> %a, < i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280, i16 65535, i16 65280>
    877 	ret <8 x i16> %tmp1
    878 }
    879 
    880 define <8 x i16> @and16imm4s_lsl24(<8 x i16> %a) {
    881 ; CHECK-LABEL: and16imm4s_lsl24:
    882 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
    883 	%tmp1 = and <8 x i16> %a, < i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511, i16 65535, i16 511>
    884 	ret <8 x i16> %tmp1
    885 }
    886 
    887 define <2 x i64> @and64imm4s_lsl0(<2 x i64> %a) {
    888 ; CHECK-LABEL: and64imm4s_lsl0:
    889 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}
    890 	%tmp1 = and <2 x i64> %a, < i64 -1095216660736, i64 -1095216660736>
    891 	ret <2 x i64> %tmp1
    892 }
    893 
    894 define <2 x i64> @and64imm4s_lsl8(<2 x i64> %a) {
    895 ; CHECK-LABEL: and64imm4s_lsl8:
    896 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
    897 	%tmp1 = and <2 x i64> %a, < i64 -280375465148161, i64 -280375465148161>
    898 	ret <2 x i64> %tmp1
    899 }
    900 
    901 define <2 x i64> @and64imm4s_lsl16(<2 x i64> %a) {
    902 ; CHECK-LABEL: and64imm4s_lsl16:
    903 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
    904 	%tmp1 = and <2 x i64> %a, < i64 -71776119077928961, i64 -71776119077928961>
    905 	ret <2 x i64> %tmp1
    906 }
    907 
    908 define <2 x i64> @and64imm4s_lsl24(<2 x i64> %a) {
    909 ; CHECK-LABEL: and64imm4s_lsl24:
    910 ; CHECK:  bic {{v[0-9]+}}.4s, #{{0xfe|254}}, lsl #24
    911 	%tmp1 = and <2 x i64> %a, < i64 144115183814443007, i64 144115183814443007>
    912 	ret <2 x i64> %tmp1
    913 }
    914 
    915 define <8 x i8> @and8imm4h_lsl0(<8 x i8> %a) {
    916 ; CHECK-LABEL: and8imm4h_lsl0:
    917 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
    918 	%tmp1 = and <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
    919 	ret <8 x i8> %tmp1
    920 }
    921 
    922 define <8 x i8> @and8imm4h_lsl8(<8 x i8> %a) {
    923 ; CHECK-LABEL: and8imm4h_lsl8:
    924 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
    925 	%tmp1 = and <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
    926 	ret <8 x i8> %tmp1
    927 }
    928 
    929 define <2 x i32> @and16imm4h_lsl0(<2 x i32> %a) {
    930 ; CHECK-LABEL: and16imm4h_lsl0:
    931 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
    932 	%tmp1 = and <2 x i32> %a, < i32 4278255360, i32 4278255360>
    933 	ret <2 x i32> %tmp1
    934 }
    935 
    936 define <2 x i32> @and16imm4h_lsl8(<2 x i32> %a) {
    937 ; CHECK-LABEL: and16imm4h_lsl8:
    938 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
    939 	%tmp1 = and <2 x i32> %a, < i32 16711935, i32 16711935>
    940 	ret <2 x i32> %tmp1
    941 }
    942 
    943 define <1 x i64> @and64imm4h_lsl0(<1 x i64> %a) {
    944 ; CHECK-LABEL: and64imm4h_lsl0:
    945 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}
    946 	%tmp1 = and <1 x i64> %a, < i64 -71777214294589696>
    947 	ret <1 x i64> %tmp1
    948 }
    949 
    950 define <1 x i64> @and64imm4h_lsl8(<1 x i64> %a) {
    951 ; CHECK-LABEL: and64imm4h_lsl8:
    952 ; CHECK:  bic {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
    953 	%tmp1 = and <1 x i64> %a, < i64 71777214294589695>
    954 	ret <1 x i64> %tmp1
    955 }
    956 
    957 define <16 x i8> @and8imm8h_lsl0(<16 x i8> %a) {
    958 ; CHECK-LABEL: and8imm8h_lsl0:
    959 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
    960 	%tmp1 = and <16 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255 >
    961 	ret <16 x i8> %tmp1
    962 }
    963 
    964 define <16 x i8> @and8imm8h_lsl8(<16 x i8> %a) {
    965 ; CHECK-LABEL: and8imm8h_lsl8:
    966 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
    967 	%tmp1 = and <16 x i8> %a, <i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0 >
    968 	ret <16 x i8> %tmp1
    969 }
    970 
    971 define <4 x i32> @and16imm8h_lsl0(<4 x i32> %a) {
    972 ; CHECK-LABEL: and16imm8h_lsl0:
    973 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
    974 	%tmp1 = and <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
    975 	ret <4 x i32> %tmp1
    976 }
    977 
    978 define <4 x i32> @and16imm8h_lsl8(<4 x i32> %a) {
    979 ; CHECK-LABEL: and16imm8h_lsl8:
    980 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
    981 	%tmp1 = and <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
    982 	ret <4 x i32> %tmp1
    983 }
    984 
    985 define <2 x i64> @and64imm8h_lsl0(<2 x i64> %a) {
    986 ; CHECK-LABEL: and64imm8h_lsl0:
    987 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}
    988 	%tmp1 = and <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
    989 	ret <2 x i64> %tmp1
    990 }
    991 
    992 define <2 x i64> @and64imm8h_lsl8(<2 x i64> %a) {
    993 ; CHECK-LABEL: and64imm8h_lsl8:
    994 ; CHECK:  bic {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
    995 	%tmp1 = and <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
    996 	ret <2 x i64> %tmp1
    997 }
    998 
    999 define <8 x i8> @orr8imm2s_lsl0(<8 x i8> %a) {
   1000 ; CHECK-LABEL: orr8imm2s_lsl0:
   1001 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
   1002 	%tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0>
   1003 	ret <8 x i8> %tmp1
   1004 }
   1005 
   1006 define <8 x i8> @orr8imm2s_lsl8(<8 x i8> %a) {
   1007 ; CHECK-LABEL: orr8imm2s_lsl8:
   1008 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
   1009 	%tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0>
   1010 	ret <8 x i8> %tmp1
   1011 }
   1012 
   1013 define <8 x i8> @orr8imm2s_lsl16(<8 x i8> %a) {
   1014 ; CHECK-LABEL: orr8imm2s_lsl16:
   1015 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
   1016 	%tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0>
   1017 	ret <8 x i8> %tmp1
   1018 }
   1019 
   1020 define <8 x i8> @orr8imm2s_lsl24(<8 x i8> %a) {
   1021 ; CHECK-LABEL: orr8imm2s_lsl24:
   1022 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
   1023 	%tmp1 = or <8 x i8> %a, < i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255>
   1024 	ret <8 x i8> %tmp1
   1025 }
   1026 
   1027 define <4 x i16> @orr16imm2s_lsl0(<4 x i16> %a) {
   1028 ; CHECK-LABEL: orr16imm2s_lsl0:
   1029 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
   1030 	%tmp1 = or <4 x i16> %a, < i16 255, i16 0, i16 255, i16 0>
   1031 	ret <4 x i16> %tmp1
   1032 }
   1033 
   1034 define <4 x i16> @orr16imm2s_lsl8(<4 x i16> %a) {
   1035 ; CHECK-LABEL: orr16imm2s_lsl8:
   1036 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
   1037 	%tmp1 = or <4 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0>
   1038 	ret <4 x i16> %tmp1
   1039 }
   1040 
   1041 define <4 x i16> @orr16imm2s_lsl16(<4 x i16> %a) {
   1042 ; CHECK-LABEL: orr16imm2s_lsl16:
   1043 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
   1044 	%tmp1 = or <4 x i16> %a, < i16 0, i16 255, i16 0, i16 255>
   1045 	ret <4 x i16> %tmp1
   1046 }
   1047 
   1048 define <4 x i16> @orr16imm2s_lsl24(<4 x i16> %a) {
   1049 ; CHECK-LABEL: orr16imm2s_lsl24:
   1050 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
   1051 	%tmp1 = or <4 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280>
   1052 	ret <4 x i16> %tmp1
   1053 }
   1054 
   1055 define <1 x i64> @orr64imm2s_lsl0(<1 x i64> %a) {
   1056 ; CHECK-LABEL: orr64imm2s_lsl0:
   1057 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}
   1058 	%tmp1 = or <1 x i64> %a, < i64 1095216660735>
   1059 	ret <1 x i64> %tmp1
   1060 }
   1061 
   1062 define <1 x i64> @orr64imm2s_lsl8(<1 x i64> %a) {
   1063 ; CHECK-LABEL: orr64imm2s_lsl8:
   1064 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #8
   1065 	%tmp1 = or <1 x i64> %a, < i64 280375465148160>
   1066 	ret <1 x i64> %tmp1
   1067 }
   1068 
   1069 define <1 x i64> @orr64imm2s_lsl16(<1 x i64> %a) {
   1070 ; CHECK-LABEL: orr64imm2s_lsl16:
   1071 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #16
   1072 	%tmp1 = or <1 x i64> %a, < i64 71776119077928960>
   1073 	ret <1 x i64> %tmp1
   1074 }
   1075 
   1076 define <1 x i64> @orr64imm2s_lsl24(<1 x i64> %a) {
   1077 ; CHECK-LABEL: orr64imm2s_lsl24:
   1078 ; CHECK:  orr {{v[0-9]+}}.2s, #{{0xff|255}}, lsl #24
   1079 	%tmp1 = or <1 x i64> %a, < i64 -72057589759737856>
   1080 	ret <1 x i64> %tmp1
   1081 }
   1082 
   1083 define <16 x i8> @orr8imm4s_lsl0(<16 x i8> %a) {
   1084 ; CHECK-LABEL: orr8imm4s_lsl0:
   1085 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
   1086 	%tmp1 = or <16 x i8> %a, < i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0>
   1087 	ret <16 x i8> %tmp1
   1088 }
   1089 
   1090 define <16 x i8> @orr8imm4s_lsl8(<16 x i8> %a) {
   1091 ; CHECK-LABEL: orr8imm4s_lsl8:
   1092 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
   1093 	%tmp1 = or <16 x i8> %a, < i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0>
   1094 	ret <16 x i8> %tmp1
   1095 }
   1096 
   1097 define <16 x i8> @orr8imm4s_lsl16(<16 x i8> %a) {
   1098 ; CHECK-LABEL: orr8imm4s_lsl16:
   1099 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
   1100 	%tmp1 = or <16 x i8> %a, < i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0>
   1101 	ret <16 x i8> %tmp1
   1102 }
   1103 
   1104 define <16 x i8> @orr8imm4s_lsl24(<16 x i8> %a) {
   1105 ; CHECK-LABEL: orr8imm4s_lsl24:
   1106 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
   1107 	%tmp1 = or <16 x i8> %a, < i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255, i8 0, i8 0, i8 0, i8 255>
   1108 	ret <16 x i8> %tmp1
   1109 }
   1110 
   1111 define <8 x i16> @orr16imm4s_lsl0(<8 x i16> %a) {
   1112 ; CHECK-LABEL: orr16imm4s_lsl0:
   1113 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
   1114 	%tmp1 = or <8 x i16> %a, < i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0>
   1115 	ret <8 x i16> %tmp1
   1116 }
   1117 
   1118 define <8 x i16> @orr16imm4s_lsl8(<8 x i16> %a) {
   1119 ; CHECK-LABEL: orr16imm4s_lsl8:
   1120 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
   1121 	%tmp1 = or <8 x i16> %a, < i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0>
   1122 	ret <8 x i16> %tmp1
   1123 }
   1124 
   1125 define <8 x i16> @orr16imm4s_lsl16(<8 x i16> %a) {
   1126 ; CHECK-LABEL: orr16imm4s_lsl16:
   1127 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
   1128 	%tmp1 = or <8 x i16> %a, < i16 0, i16 255, i16 0, i16 255, i16 0, i16 255, i16 0, i16 255>
   1129 	ret <8 x i16> %tmp1
   1130 }
   1131 
   1132 define <8 x i16> @orr16imm4s_lsl24(<8 x i16> %a) {
   1133 ; CHECK-LABEL: orr16imm4s_lsl24:
   1134 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
   1135 	%tmp1 = or <8 x i16> %a, < i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280, i16 0, i16 65280>
   1136 	ret <8 x i16> %tmp1
   1137 }
   1138 
   1139 define <2 x i64> @orr64imm4s_lsl0(<2 x i64> %a) {
   1140 ; CHECK-LABEL: orr64imm4s_lsl0:
   1141 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}
   1142 	%tmp1 = or <2 x i64> %a, < i64 1095216660735, i64 1095216660735>
   1143 	ret <2 x i64> %tmp1
   1144 }
   1145 
   1146 define <2 x i64> @orr64imm4s_lsl8(<2 x i64> %a) {
   1147 ; CHECK-LABEL: orr64imm4s_lsl8:
   1148 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #8
   1149 	%tmp1 = or <2 x i64> %a, < i64 280375465148160, i64 280375465148160>
   1150 	ret <2 x i64> %tmp1
   1151 }
   1152 
   1153 define <2 x i64> @orr64imm4s_lsl16(<2 x i64> %a) {
   1154 ; CHECK-LABEL: orr64imm4s_lsl16:
   1155 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #16
   1156 	%tmp1 = or <2 x i64> %a, < i64 71776119077928960, i64 71776119077928960>
   1157 	ret <2 x i64> %tmp1
   1158 }
   1159 
   1160 define <2 x i64> @orr64imm4s_lsl24(<2 x i64> %a) {
   1161 ; CHECK-LABEL: orr64imm4s_lsl24:
   1162 ; CHECK:  orr {{v[0-9]+}}.4s, #{{0xff|255}}, lsl #24
   1163 	%tmp1 = or <2 x i64> %a, < i64 -72057589759737856, i64 -72057589759737856>
   1164 	ret <2 x i64> %tmp1
   1165 }
   1166 
   1167 define <8 x i8> @orr8imm4h_lsl0(<8 x i8> %a) {
   1168 ; CHECK-LABEL: orr8imm4h_lsl0:
   1169 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
   1170 	%tmp1 = or <8 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
   1171 	ret <8 x i8> %tmp1
   1172 }
   1173 
   1174 define <8 x i8> @orr8imm4h_lsl8(<8 x i8> %a) {
   1175 ; CHECK-LABEL: orr8imm4h_lsl8:
   1176 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
   1177 	%tmp1 = or <8 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
   1178 	ret <8 x i8> %tmp1
   1179 }
   1180 
   1181 define <2 x i32> @orr16imm4h_lsl0(<2 x i32> %a) {
   1182 ; CHECK-LABEL: orr16imm4h_lsl0:
   1183 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
   1184 	%tmp1 = or <2 x i32> %a, < i32 16711935, i32 16711935>
   1185 	ret <2 x i32> %tmp1
   1186 }
   1187 
   1188 define <2 x i32> @orr16imm4h_lsl8(<2 x i32> %a) {
   1189 ; CHECK-LABEL: orr16imm4h_lsl8:
   1190 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
   1191 	%tmp1 = or <2 x i32> %a, < i32 4278255360, i32 4278255360>
   1192 	ret <2 x i32> %tmp1
   1193 }
   1194 
   1195 define <1 x i64> @orr64imm4h_lsl0(<1 x i64> %a) {
   1196 ; CHECK-LABEL: orr64imm4h_lsl0:
   1197 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}
   1198 	%tmp1 = or <1 x i64> %a, < i64 71777214294589695>
   1199 	ret <1 x i64> %tmp1
   1200 }
   1201 
   1202 define <1 x i64> @orr64imm4h_lsl8(<1 x i64> %a) {
   1203 ; CHECK-LABEL: orr64imm4h_lsl8:
   1204 ; CHECK:  orr {{v[0-9]+}}.4h, #{{0xff|255}}, lsl #8
   1205 	%tmp1 = or <1 x i64> %a, < i64 -71777214294589696>
   1206 	ret <1 x i64> %tmp1
   1207 }
   1208 
   1209 define <16 x i8> @orr8imm8h_lsl0(<16 x i8> %a) {
   1210 ; CHECK-LABEL: orr8imm8h_lsl0:
   1211 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
   1212 	%tmp1 = or <16 x i8> %a, < i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0>
   1213 	ret <16 x i8> %tmp1
   1214 }
   1215 
   1216 define <16 x i8> @orr8imm8h_lsl8(<16 x i8> %a) {
   1217 ; CHECK-LABEL: orr8imm8h_lsl8:
   1218 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
   1219 	%tmp1 = or <16 x i8> %a, < i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255, i8 0, i8 255>
   1220 	ret <16 x i8> %tmp1
   1221 }
   1222 
   1223 define <4 x i32> @orr16imm8h_lsl0(<4 x i32> %a) {
   1224 ; CHECK-LABEL: orr16imm8h_lsl0:
   1225 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
   1226 	%tmp1 = or <4 x i32> %a, < i32 16711935, i32 16711935, i32 16711935, i32 16711935>
   1227 	ret <4 x i32> %tmp1
   1228 }
   1229 
   1230 define <4 x i32> @orr16imm8h_lsl8(<4 x i32> %a) {
   1231 ; CHECK-LABEL: orr16imm8h_lsl8:
   1232 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
   1233 	%tmp1 = or <4 x i32> %a, < i32 4278255360, i32 4278255360, i32 4278255360, i32 4278255360>
   1234 	ret <4 x i32> %tmp1
   1235 }
   1236 
   1237 define <2 x i64> @orr64imm8h_lsl0(<2 x i64> %a) {
   1238 ; CHECK-LABEL: orr64imm8h_lsl0:
   1239 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}
   1240 	%tmp1 = or <2 x i64> %a, < i64 71777214294589695, i64 71777214294589695>
   1241 	ret <2 x i64> %tmp1
   1242 }
   1243 
   1244 define <2 x i64> @orr64imm8h_lsl8(<2 x i64> %a) {
   1245 ; CHECK-LABEL: orr64imm8h_lsl8:
   1246 ; CHECK:  orr {{v[0-9]+}}.8h, #{{0xff|255}}, lsl #8
   1247 	%tmp1 = or <2 x i64> %a, < i64 -71777214294589696, i64 -71777214294589696>
   1248 	ret <2 x i64> %tmp1
   1249 }
   1250 
   1251