Home | History | Annotate | Download | only in AArch64
      1 ; RUN: llc < %s -verify-machineinstrs -mtriple=arm64-none-linux-gnu -mattr=+neon | FileCheck %s
      2 ; arm64 has its own copy of this because of the intrinsics
      3 
      4 define <8 x i8> @mul8xi8(<8 x i8> %A, <8 x i8> %B) {
      5 ; CHECK-LABEL: mul8xi8:
      6 ; CHECK: mul {{v[0-9]+}}.8b, {{v[0-9]+}}.8b, {{v[0-9]+}}.8b
      7 	%tmp3 = mul <8 x i8> %A, %B;
      8 	ret <8 x i8> %tmp3
      9 }
     10 
     11 define <16 x i8> @mul16xi8(<16 x i8> %A, <16 x i8> %B) {
     12 ; CHECK-LABEL: mul16xi8:
     13 ; CHECK: mul {{v[0-9]+}}.16b, {{v[0-9]+}}.16b, {{v[0-9]+}}.16b
     14 	%tmp3 = mul <16 x i8> %A, %B;
     15 	ret <16 x i8> %tmp3
     16 }
     17 
     18 define <4 x i16> @mul4xi16(<4 x i16> %A, <4 x i16> %B) {
     19 ; CHECK-LABEL: mul4xi16:
     20 ; CHECK: mul {{v[0-9]+}}.4h, {{v[0-9]+}}.4h, {{v[0-9]+}}.4h
     21 	%tmp3 = mul <4 x i16> %A, %B;
     22 	ret <4 x i16> %tmp3
     23 }
     24 
     25 define <8 x i16> @mul8xi16(<8 x i16> %A, <8 x i16> %B) {
     26 ; CHECK-LABEL: mul8xi16:
     27 ; CHECK: mul {{v[0-9]+}}.8h, {{v[0-9]+}}.8h, {{v[0-9]+}}.8h
     28 	%tmp3 = mul <8 x i16> %A, %B;
     29 	ret <8 x i16> %tmp3
     30 }
     31 
     32 define <2 x i32> @mul2xi32(<2 x i32> %A, <2 x i32> %B) {
     33 ; CHECK-LABEL: mul2xi32:
     34 ; CHECK: mul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     35 	%tmp3 = mul <2 x i32> %A, %B;
     36 	ret <2 x i32> %tmp3
     37 }
     38 
     39 define <4 x i32> @mul4x32(<4 x i32> %A, <4 x i32> %B) {
     40 ; CHECK-LABEL: mul4x32:
     41 ; CHECK: mul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     42 	%tmp3 = mul <4 x i32> %A, %B;
     43 	ret <4 x i32> %tmp3
     44 }
     45 
     46 define <1 x i64> @mul1xi64(<1 x i64> %A, <1 x i64> %B) {
     47 ; CHECK-LABEL: mul1xi64:
     48 ; CHECK: mul x{{[0-9]+}}, x{{[0-9]+}}, x{{[0-9]+}}
     49   %tmp3 = mul <1 x i64> %A, %B;
     50   ret <1 x i64> %tmp3
     51 }
     52 
     53 define <2 x i64> @mul2xi64(<2 x i64> %A, <2 x i64> %B) {
     54 ; CHECK-LABEL: mul2xi64:
     55 ; CHECK: mul x{{[0-9]+}}, x{{[0-9]+}}, x{{[0-9]+}}
     56 ; CHECK: mul x{{[0-9]+}}, x{{[0-9]+}}, x{{[0-9]+}}
     57   %tmp3 = mul <2 x i64> %A, %B;
     58   ret <2 x i64> %tmp3
     59 }
     60 
     61  define <2 x float> @mul2xfloat(<2 x float> %A, <2 x float> %B) {
     62 ; CHECK-LABEL: mul2xfloat:
     63 ; CHECK: fmul {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     64 	%tmp3 = fmul <2 x float> %A, %B;
     65 	ret <2 x float> %tmp3
     66 }
     67 
     68 define <4 x float> @mul4xfloat(<4 x float> %A, <4 x float> %B) {
     69 ; CHECK-LABEL: mul4xfloat:
     70 ; CHECK: fmul {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     71 	%tmp3 = fmul <4 x float> %A, %B;
     72 	ret <4 x float> %tmp3
     73 }
     74 define <2 x double> @mul2xdouble(<2 x double> %A, <2 x double> %B) {
     75 ; CHECK-LABEL: mul2xdouble:
     76 ; CHECK: fmul {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
     77 	%tmp3 = fmul <2 x double> %A, %B;
     78 	ret <2 x double> %tmp3
     79 }
     80 
     81 
     82  define <2 x float> @div2xfloat(<2 x float> %A, <2 x float> %B) {
     83 ; CHECK-LABEL: div2xfloat:
     84 ; CHECK: fdiv {{v[0-9]+}}.2s, {{v[0-9]+}}.2s, {{v[0-9]+}}.2s
     85 	%tmp3 = fdiv <2 x float> %A, %B;
     86 	ret <2 x float> %tmp3
     87 }
     88 
     89 define <4 x float> @div4xfloat(<4 x float> %A, <4 x float> %B) {
     90 ; CHECK-LABEL: div4xfloat:
     91 ; CHECK: fdiv {{v[0-9]+}}.4s, {{v[0-9]+}}.4s, {{v[0-9]+}}.4s
     92 	%tmp3 = fdiv <4 x float> %A, %B;
     93 	ret <4 x float> %tmp3
     94 }
     95 define <2 x double> @div2xdouble(<2 x double> %A, <2 x double> %B) {
     96 ; CHECK-LABEL: div2xdouble:
     97 ; CHECK: fdiv {{v[0-9]+}}.2d, {{v[0-9]+}}.2d, {{v[0-9]+}}.2d
     98 	%tmp3 = fdiv <2 x double> %A, %B;
     99 	ret <2 x double> %tmp3
    100 }
    101 
    102 define <1 x i8> @sdiv1x8(<1 x i8> %A, <1 x i8> %B) {
    103 ; CHECK-LABEL: sdiv1x8:
    104 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    105 	%tmp3 = sdiv <1 x i8> %A, %B;
    106 	ret <1 x i8> %tmp3
    107 }
    108 
    109 define <8 x i8> @sdiv8x8(<8 x i8> %A, <8 x i8> %B) {
    110 ; CHECK-LABEL: sdiv8x8:
    111 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    112 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    113 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    114 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    115 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    116 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    117 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    118 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    119 	%tmp3 = sdiv <8 x i8> %A, %B;
    120 	ret <8 x i8> %tmp3
    121 }
    122 
    123 define <16 x i8> @sdiv16x8(<16 x i8> %A, <16 x i8> %B) {
    124 ; CHECK-LABEL: sdiv16x8:
    125 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    126 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    127 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    128 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    129 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    130 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    131 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    132 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    133 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    134 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    135 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    136 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    137 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    138 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    139 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    140 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    141 	%tmp3 = sdiv <16 x i8> %A, %B;
    142 	ret <16 x i8> %tmp3
    143 }
    144 
    145 define <1 x i16> @sdiv1x16(<1 x i16> %A, <1 x i16> %B) {
    146 ; CHECK-LABEL: sdiv1x16:
    147 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    148 	%tmp3 = sdiv <1 x i16> %A, %B;
    149 	ret <1 x i16> %tmp3
    150 }
    151 
    152 define <4 x i16> @sdiv4x16(<4 x i16> %A, <4 x i16> %B) {
    153 ; CHECK-LABEL: sdiv4x16:
    154 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    155 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    156 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    157 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    158 	%tmp3 = sdiv <4 x i16> %A, %B;
    159 	ret <4 x i16> %tmp3
    160 }
    161 
    162 define <8 x i16> @sdiv8x16(<8 x i16> %A, <8 x i16> %B) {
    163 ; CHECK-LABEL: sdiv8x16:
    164 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    165 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    166 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    167 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    168 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    169 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    170 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    171 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    172 	%tmp3 = sdiv <8 x i16> %A, %B;
    173 	ret <8 x i16> %tmp3
    174 }
    175 
    176 define <1 x i32> @sdiv1x32(<1 x i32> %A, <1 x i32> %B) {
    177 ; CHECK-LABEL: sdiv1x32:
    178 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    179 	%tmp3 = sdiv <1 x i32> %A, %B;
    180 	ret <1 x i32> %tmp3
    181 }
    182 
    183 define <2 x i32> @sdiv2x32(<2 x i32> %A, <2 x i32> %B) {
    184 ; CHECK-LABEL: sdiv2x32:
    185 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    186 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    187 	%tmp3 = sdiv <2 x i32> %A, %B;
    188 	ret <2 x i32> %tmp3
    189 }
    190 
    191 define <4 x i32> @sdiv4x32(<4 x i32> %A, <4 x i32> %B) {
    192 ; CHECK-LABEL: sdiv4x32:
    193 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    194 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    195 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    196 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    197 	%tmp3 = sdiv <4 x i32> %A, %B;
    198 	ret <4 x i32> %tmp3
    199 }
    200 
    201 define <1 x i64> @sdiv1x64(<1 x i64> %A, <1 x i64> %B) {
    202 ; CHECK-LABEL: sdiv1x64:
    203 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    204 	%tmp3 = sdiv <1 x i64> %A, %B;
    205 	ret <1 x i64> %tmp3
    206 }
    207 
    208 define <2 x i64> @sdiv2x64(<2 x i64> %A, <2 x i64> %B) {
    209 ; CHECK-LABEL: sdiv2x64:
    210 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    211 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    212 	%tmp3 = sdiv <2 x i64> %A, %B;
    213 	ret <2 x i64> %tmp3
    214 }
    215 
    216 define <1 x i8> @udiv1x8(<1 x i8> %A, <1 x i8> %B) {
    217 ; CHECK-LABEL: udiv1x8:
    218 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    219 	%tmp3 = udiv <1 x i8> %A, %B;
    220 	ret <1 x i8> %tmp3
    221 }
    222 
    223 define <8 x i8> @udiv8x8(<8 x i8> %A, <8 x i8> %B) {
    224 ; CHECK-LABEL: udiv8x8:
    225 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    226 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    227 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    228 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    229 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    230 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    231 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    232 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    233 	%tmp3 = udiv <8 x i8> %A, %B;
    234 	ret <8 x i8> %tmp3
    235 }
    236 
    237 define <16 x i8> @udiv16x8(<16 x i8> %A, <16 x i8> %B) {
    238 ; CHECK-LABEL: udiv16x8:
    239 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    240 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    241 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    242 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    243 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    244 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    245 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    246 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    247 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    248 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    249 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    250 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    251 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    252 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    253 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    254 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    255 	%tmp3 = udiv <16 x i8> %A, %B;
    256 	ret <16 x i8> %tmp3
    257 }
    258 
    259 define <1 x i16> @udiv1x16(<1 x i16> %A, <1 x i16> %B) {
    260 ; CHECK-LABEL: udiv1x16:
    261 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    262 	%tmp3 = udiv <1 x i16> %A, %B;
    263 	ret <1 x i16> %tmp3
    264 }
    265 
    266 define <4 x i16> @udiv4x16(<4 x i16> %A, <4 x i16> %B) {
    267 ; CHECK-LABEL: udiv4x16:
    268 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    269 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    270 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    271 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    272 	%tmp3 = udiv <4 x i16> %A, %B;
    273 	ret <4 x i16> %tmp3
    274 }
    275 
    276 define <8 x i16> @udiv8x16(<8 x i16> %A, <8 x i16> %B) {
    277 ; CHECK-LABEL: udiv8x16:
    278 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    279 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    280 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    281 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    282 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    283 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    284 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    285 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    286 	%tmp3 = udiv <8 x i16> %A, %B;
    287 	ret <8 x i16> %tmp3
    288 }
    289 
    290 define <1 x i32> @udiv1x32(<1 x i32> %A, <1 x i32> %B) {
    291 ; CHECK-LABEL: udiv1x32:
    292 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    293 	%tmp3 = udiv <1 x i32> %A, %B;
    294 	ret <1 x i32> %tmp3
    295 }
    296 
    297 define <2 x i32> @udiv2x32(<2 x i32> %A, <2 x i32> %B) {
    298 ; CHECK-LABEL: udiv2x32:
    299 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    300 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    301 	%tmp3 = udiv <2 x i32> %A, %B;
    302 	ret <2 x i32> %tmp3
    303 }
    304 
    305 define <4 x i32> @udiv4x32(<4 x i32> %A, <4 x i32> %B) {
    306 ; CHECK-LABEL: udiv4x32:
    307 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    308 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    309 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    310 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    311 	%tmp3 = udiv <4 x i32> %A, %B;
    312 	ret <4 x i32> %tmp3
    313 }
    314 
    315 define <1 x i64> @udiv1x64(<1 x i64> %A, <1 x i64> %B) {
    316 ; CHECK-LABEL: udiv1x64:
    317 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    318 	%tmp3 = udiv <1 x i64> %A, %B;
    319 	ret <1 x i64> %tmp3
    320 }
    321 
    322 define <2 x i64> @udiv2x64(<2 x i64> %A, <2 x i64> %B) {
    323 ; CHECK-LABEL: udiv2x64:
    324 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    325 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    326 	%tmp3 = udiv <2 x i64> %A, %B;
    327 	ret <2 x i64> %tmp3
    328 }
    329 
    330 define <1 x i8> @srem1x8(<1 x i8> %A, <1 x i8> %B) {
    331 ; CHECK-LABEL: srem1x8:
    332 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    333 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    334 	%tmp3 = srem <1 x i8> %A, %B;
    335 	ret <1 x i8> %tmp3
    336 }
    337 
    338 define <8 x i8> @srem8x8(<8 x i8> %A, <8 x i8> %B) {
    339 ; CHECK-LABEL: srem8x8:
    340 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    341 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    342 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    343 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    344 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    345 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    346 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    347 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    348 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    349 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    350 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    351 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    352 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    353 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    354 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    355 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    356 	%tmp3 = srem <8 x i8> %A, %B;
    357 	ret <8 x i8> %tmp3
    358 }
    359 
    360 define <16 x i8> @srem16x8(<16 x i8> %A, <16 x i8> %B) {
    361 ; CHECK-LABEL: srem16x8:
    362 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    363 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    364 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    365 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    366 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    367 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    368 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    369 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    370 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    371 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    372 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    373 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    374 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    375 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    376 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    377 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    378 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    379 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    380 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    381 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    382 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    383 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    384 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    385 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    386 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    387 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    388 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    389 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    390 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    391 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    392 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    393 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    394 	%tmp3 = srem <16 x i8> %A, %B;
    395 	ret <16 x i8> %tmp3
    396 }
    397 
    398 define <1 x i16> @srem1x16(<1 x i16> %A, <1 x i16> %B) {
    399 ; CHECK-LABEL: srem1x16:
    400 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    401 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    402 	%tmp3 = srem <1 x i16> %A, %B;
    403 	ret <1 x i16> %tmp3
    404 }
    405 
    406 define <4 x i16> @srem4x16(<4 x i16> %A, <4 x i16> %B) {
    407 ; CHECK-LABEL: srem4x16:
    408 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    409 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    410 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    411 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    412 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    413 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    414 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    415 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    416 	%tmp3 = srem <4 x i16> %A, %B;
    417 	ret <4 x i16> %tmp3
    418 }
    419 
    420 define <8 x i16> @srem8x16(<8 x i16> %A, <8 x i16> %B) {
    421 ; CHECK-LABEL: srem8x16:
    422 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    423 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    424 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    425 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    426 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    427 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    428 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    429 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    430 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    431 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    432 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    433 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    434 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    435 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    436 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    437 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    438 	%tmp3 = srem <8 x i16> %A, %B;
    439 	ret <8 x i16> %tmp3
    440 }
    441 
    442 define <1 x i32> @srem1x32(<1 x i32> %A, <1 x i32> %B) {
    443 ; CHECK-LABEL: srem1x32:
    444 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    445 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    446 	%tmp3 = srem <1 x i32> %A, %B;
    447 	ret <1 x i32> %tmp3
    448 }
    449 
    450 define <2 x i32> @srem2x32(<2 x i32> %A, <2 x i32> %B) {
    451 ; CHECK-LABEL: srem2x32:
    452 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    453 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    454 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    455 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    456 	%tmp3 = srem <2 x i32> %A, %B;
    457 	ret <2 x i32> %tmp3
    458 }
    459 
    460 define <4 x i32> @srem4x32(<4 x i32> %A, <4 x i32> %B) {
    461 ; CHECK-LABEL: srem4x32:
    462 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    463 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    464 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    465 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    466 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    467 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    468 ; CHECK: sdiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    469 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    470 	%tmp3 = srem <4 x i32> %A, %B;
    471 	ret <4 x i32> %tmp3
    472 }
    473 
    474 define <1 x i64> @srem1x64(<1 x i64> %A, <1 x i64> %B) {
    475 ; CHECK-LABEL: srem1x64:
    476 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    477 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    478 	%tmp3 = srem <1 x i64> %A, %B;
    479 	ret <1 x i64> %tmp3
    480 }
    481 
    482 define <2 x i64> @srem2x64(<2 x i64> %A, <2 x i64> %B) {
    483 ; CHECK-LABEL: srem2x64:
    484 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    485 ; CHECK: sdiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    486 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    487 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    488 	%tmp3 = srem <2 x i64> %A, %B;
    489 	ret <2 x i64> %tmp3
    490 }
    491 
    492 define <1 x i8> @urem1x8(<1 x i8> %A, <1 x i8> %B) {
    493 ; CHECK-LABEL: urem1x8:
    494 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    495 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    496 	%tmp3 = urem <1 x i8> %A, %B;
    497 	ret <1 x i8> %tmp3
    498 }
    499 
    500 define <8 x i8> @urem8x8(<8 x i8> %A, <8 x i8> %B) {
    501 ; CHECK-LABEL: urem8x8:
    502 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    503 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    504 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    505 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    506 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    507 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    508 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    509 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    510 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    511 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    512 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    513 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    514 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    515 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    516 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    517 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    518 	%tmp3 = urem <8 x i8> %A, %B;
    519 	ret <8 x i8> %tmp3
    520 }
    521 
    522 define <16 x i8> @urem16x8(<16 x i8> %A, <16 x i8> %B) {
    523 ; CHECK-LABEL: urem16x8:
    524 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    525 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    526 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    527 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    528 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    529 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    530 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    531 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    532 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    533 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    534 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    535 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    536 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    537 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    538 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    539 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    540 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    541 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    542 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    543 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    544 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    545 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    546 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    547 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    548 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    549 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    550 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    551 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    552 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    553 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    554 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    555 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    556 	%tmp3 = urem <16 x i8> %A, %B;
    557 	ret <16 x i8> %tmp3
    558 }
    559 
    560 define <1 x i16> @urem1x16(<1 x i16> %A, <1 x i16> %B) {
    561 ; CHECK-LABEL: urem1x16:
    562 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    563 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    564 	%tmp3 = urem <1 x i16> %A, %B;
    565 	ret <1 x i16> %tmp3
    566 }
    567 
    568 define <4 x i16> @urem4x16(<4 x i16> %A, <4 x i16> %B) {
    569 ; CHECK-LABEL: urem4x16:
    570 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    571 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    572 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    573 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    574 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    575 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    576 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    577 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    578 	%tmp3 = urem <4 x i16> %A, %B;
    579 	ret <4 x i16> %tmp3
    580 }
    581 
    582 define <8 x i16> @urem8x16(<8 x i16> %A, <8 x i16> %B) {
    583 ; CHECK-LABEL: urem8x16:
    584 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    585 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    586 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    587 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    588 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    589 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    590 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    591 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    592 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    593 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    594 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    595 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    596 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    597 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    598 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    599 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    600 	%tmp3 = urem <8 x i16> %A, %B;
    601 	ret <8 x i16> %tmp3
    602 }
    603 
    604 define <1 x i32> @urem1x32(<1 x i32> %A, <1 x i32> %B) {
    605 ; CHECK-LABEL: urem1x32:
    606 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    607 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    608 	%tmp3 = urem <1 x i32> %A, %B;
    609 	ret <1 x i32> %tmp3
    610 }
    611 
    612 define <2 x i32> @urem2x32(<2 x i32> %A, <2 x i32> %B) {
    613 ; CHECK-LABEL: urem2x32:
    614 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    615 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    616 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    617 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    618 	%tmp3 = urem <2 x i32> %A, %B;
    619 	ret <2 x i32> %tmp3
    620 }
    621 
    622 define <4 x i32> @urem4x32(<4 x i32> %A, <4 x i32> %B) {
    623 ; CHECK-LABEL: urem4x32:
    624 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    625 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    626 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    627 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    628 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    629 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    630 ; CHECK: udiv {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    631 ; CHECK: msub {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}, {{w[0-9]+}}
    632 	%tmp3 = urem <4 x i32> %A, %B;
    633 	ret <4 x i32> %tmp3
    634 }
    635 
    636 define <1 x i64> @urem1x64(<1 x i64> %A, <1 x i64> %B) {
    637 ; CHECK-LABEL: urem1x64:
    638 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    639 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    640 	%tmp3 = urem <1 x i64> %A, %B;
    641 	ret <1 x i64> %tmp3
    642 }
    643 
    644 define <2 x i64> @urem2x64(<2 x i64> %A, <2 x i64> %B) {
    645 ; CHECK-LABEL: urem2x64:
    646 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    647 ; CHECK: udiv {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    648 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    649 ; CHECK: msub {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}, {{x[0-9]+}}
    650 	%tmp3 = urem <2 x i64> %A, %B;
    651 	ret <2 x i64> %tmp3
    652 }
    653 
    654 define <2 x float> @frem2f32(<2 x float> %A, <2 x float> %B) {
    655 ; CHECK-LABEL: frem2f32:
    656 ; CHECK: bl fmodf
    657 ; CHECK: bl fmodf
    658 	%tmp3 = frem <2 x float> %A, %B;
    659 	ret <2 x float> %tmp3
    660 }
    661 
    662 define <4 x float> @frem4f32(<4 x float> %A, <4 x float> %B) {
    663 ; CHECK-LABEL: frem4f32:
    664 ; CHECK: bl fmodf
    665 ; CHECK: bl fmodf
    666 ; CHECK: bl fmodf
    667 ; CHECK: bl fmodf
    668 	%tmp3 = frem <4 x float> %A, %B;
    669 	ret <4 x float> %tmp3
    670 }
    671 
    672 define <1 x double> @frem1d64(<1 x double> %A, <1 x double> %B) {
    673 ; CHECK-LABEL: frem1d64:
    674 ; CHECK: bl fmod
    675 	%tmp3 = frem <1 x double> %A, %B;
    676 	ret <1 x double> %tmp3
    677 }
    678 
    679 define <2 x double> @frem2d64(<2 x double> %A, <2 x double> %B) {
    680 ; CHECK-LABEL: frem2d64:
    681 ; CHECK: bl fmod
    682 ; CHECK: bl fmod
    683 	%tmp3 = frem <2 x double> %A, %B;
    684 	ret <2 x double> %tmp3
    685 }
    686 
    687 declare <8 x i8> @llvm.aarch64.neon.pmul.v8i8(<8 x i8>, <8 x i8>)
    688 declare <16 x i8> @llvm.aarch64.neon.pmul.v16i8(<16 x i8>, <16 x i8>)
    689 
    690 define <8 x i8> @poly_mulv8i8(<8 x i8> %lhs, <8 x i8> %rhs) {
    691 ; CHECK-LABEL: poly_mulv8i8:
    692    %prod = call <8 x i8> @llvm.aarch64.neon.pmul.v8i8(<8 x i8> %lhs, <8 x i8> %rhs)
    693 ; CHECK: pmul v0.8b, v0.8b, v1.8b
    694    ret <8 x i8> %prod
    695 }
    696 
    697 define <16 x i8> @poly_mulv16i8(<16 x i8> %lhs, <16 x i8> %rhs) {
    698 ; CHECK-LABEL: poly_mulv16i8:
    699    %prod = call <16 x i8> @llvm.aarch64.neon.pmul.v16i8(<16 x i8> %lhs, <16 x i8> %rhs)
    700 ; CHECK: pmul v0.16b, v0.16b, v1.16b
    701    ret <16 x i8> %prod
    702 }
    703 
    704 declare <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16>, <4 x i16>)
    705 declare <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16>, <8 x i16>)
    706 declare <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32>, <2 x i32>)
    707 declare <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32>, <4 x i32>)
    708 
    709 define <4 x i16> @test_sqdmulh_v4i16(<4 x i16> %lhs, <4 x i16> %rhs) {
    710 ; CHECK-LABEL: test_sqdmulh_v4i16:
    711    %prod = call <4 x i16> @llvm.aarch64.neon.sqdmulh.v4i16(<4 x i16> %lhs, <4 x i16> %rhs)
    712 ; CHECK: sqdmulh v0.4h, v0.4h, v1.4h
    713    ret <4 x i16> %prod
    714 }
    715 
    716 define <8 x i16> @test_sqdmulh_v8i16(<8 x i16> %lhs, <8 x i16> %rhs) {
    717 ; CHECK-LABEL: test_sqdmulh_v8i16:
    718    %prod = call <8 x i16> @llvm.aarch64.neon.sqdmulh.v8i16(<8 x i16> %lhs, <8 x i16> %rhs)
    719 ; CHECK: sqdmulh v0.8h, v0.8h, v1.8h
    720    ret <8 x i16> %prod
    721 }
    722 
    723 define <2 x i32> @test_sqdmulh_v2i32(<2 x i32> %lhs, <2 x i32> %rhs) {
    724 ; CHECK-LABEL: test_sqdmulh_v2i32:
    725    %prod = call <2 x i32> @llvm.aarch64.neon.sqdmulh.v2i32(<2 x i32> %lhs, <2 x i32> %rhs)
    726 ; CHECK: sqdmulh v0.2s, v0.2s, v1.2s
    727    ret <2 x i32> %prod
    728 }
    729 
    730 define <4 x i32> @test_sqdmulh_v4i32(<4 x i32> %lhs, <4 x i32> %rhs) {
    731 ; CHECK-LABEL: test_sqdmulh_v4i32:
    732    %prod = call <4 x i32> @llvm.aarch64.neon.sqdmulh.v4i32(<4 x i32> %lhs, <4 x i32> %rhs)
    733 ; CHECK: sqdmulh v0.4s, v0.4s, v1.4s
    734    ret <4 x i32> %prod
    735 }
    736 
    737 declare <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16>, <4 x i16>)
    738 declare <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16>, <8 x i16>)
    739 declare <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32>, <2 x i32>)
    740 declare <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32>, <4 x i32>)
    741 
    742 define <4 x i16> @test_sqrdmulh_v4i16(<4 x i16> %lhs, <4 x i16> %rhs) {
    743 ; CHECK-LABEL: test_sqrdmulh_v4i16:
    744    %prod = call <4 x i16> @llvm.aarch64.neon.sqrdmulh.v4i16(<4 x i16> %lhs, <4 x i16> %rhs)
    745 ; CHECK: sqrdmulh v0.4h, v0.4h, v1.4h
    746    ret <4 x i16> %prod
    747 }
    748 
    749 define <8 x i16> @test_sqrdmulh_v8i16(<8 x i16> %lhs, <8 x i16> %rhs) {
    750 ; CHECK-LABEL: test_sqrdmulh_v8i16:
    751    %prod = call <8 x i16> @llvm.aarch64.neon.sqrdmulh.v8i16(<8 x i16> %lhs, <8 x i16> %rhs)
    752 ; CHECK: sqrdmulh v0.8h, v0.8h, v1.8h
    753    ret <8 x i16> %prod
    754 }
    755 
    756 define <2 x i32> @test_sqrdmulh_v2i32(<2 x i32> %lhs, <2 x i32> %rhs) {
    757 ; CHECK-LABEL: test_sqrdmulh_v2i32:
    758    %prod = call <2 x i32> @llvm.aarch64.neon.sqrdmulh.v2i32(<2 x i32> %lhs, <2 x i32> %rhs)
    759 ; CHECK: sqrdmulh v0.2s, v0.2s, v1.2s
    760    ret <2 x i32> %prod
    761 }
    762 
    763 define <4 x i32> @test_sqrdmulh_v4i32(<4 x i32> %lhs, <4 x i32> %rhs) {
    764 ; CHECK-LABEL: test_sqrdmulh_v4i32:
    765    %prod = call <4 x i32> @llvm.aarch64.neon.sqrdmulh.v4i32(<4 x i32> %lhs, <4 x i32> %rhs)
    766 ; CHECK: sqrdmulh v0.4s, v0.4s, v1.4s
    767    ret <4 x i32> %prod
    768 }
    769 
    770 declare <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float>, <2 x float>)
    771 declare <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float>, <4 x float>)
    772 declare <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double>, <2 x double>)
    773 
    774 define <2 x float> @fmulx_v2f32(<2 x float> %lhs, <2 x float> %rhs) {
    775 ; CHECK-LABEL: fmulx_v2f32:
    776 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
    777 ; CHECK: fmulx v0.2s, v0.2s, v1.2s
    778         %val = call <2 x float> @llvm.aarch64.neon.fmulx.v2f32(<2 x float> %lhs, <2 x float> %rhs)
    779         ret <2 x float> %val
    780 }
    781 
    782 define <4 x float> @fmulx_v4f32(<4 x float> %lhs, <4 x float> %rhs) {
    783 ; CHECK-LABEL: fmulx_v4f32:
    784 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
    785 ; CHECK: fmulx v0.4s, v0.4s, v1.4s
    786         %val = call <4 x float> @llvm.aarch64.neon.fmulx.v4f32(<4 x float> %lhs, <4 x float> %rhs)
    787         ret <4 x float> %val
    788 }
    789 
    790 define <2 x double> @fmulx_v2f64(<2 x double> %lhs, <2 x double> %rhs) {
    791 ; CHECK-LABEL: fmulx_v2f64:
    792 ; Using registers other than v0, v1 and v2 are possible, but would be odd.
    793 ; CHECK: fmulx v0.2d, v0.2d, v1.2d
    794         %val = call <2 x double> @llvm.aarch64.neon.fmulx.v2f64(<2 x double> %lhs, <2 x double> %rhs)
    795         ret <2 x double> %val
    796 }
    797 
    798