Home | History | Annotate | Download | only in Hexagon
      1 ; RUN: llc -march=hexagon < %s | FileCheck %s
      2 
      3 ; CHECK-LABEL: test1:
      4 ; CHECK: v{{[0-9]+}} = vand(v{{[0-9]+}},v{{[0-9]+}})
      5 define <16 x i32> @test1(<16 x i32> %a, <16 x i32> %b) #0 {
      6 entry:
      7   %0 = tail call <16 x i32> @llvm.hexagon.V6.vand(<16 x i32> %a, <16 x i32> %b)
      8   ret <16 x i32> %0
      9 }
     10 
     11 ; CHECK-LABEL: test2:
     12 ; CHECK: v{{[0-9]+}} = vor(v{{[0-9]+}},v{{[0-9]+}})
     13 define <16 x i32> @test2(<16 x i32> %a, <16 x i32> %b) #0 {
     14 entry:
     15   %0 = tail call <16 x i32> @llvm.hexagon.V6.vor(<16 x i32> %a, <16 x i32> %b)
     16   ret <16 x i32> %0
     17 }
     18 
     19 ; CHECK-LABEL: test3:
     20 ; CHECK: v{{[0-9]+}} = vxor(v{{[0-9]+}},v{{[0-9]+}})
     21 define <16 x i32> @test3(<16 x i32> %a, <16 x i32> %b) #0 {
     22 entry:
     23   %0 = tail call <16 x i32> @llvm.hexagon.V6.vxor(<16 x i32> %a, <16 x i32> %b)
     24   ret <16 x i32> %0
     25 }
     26 
     27 ; CHECK-LABEL: test4:
     28 ; CHECK: v{{[0-9]+}}.w = vadd(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
     29 define <16 x i32> @test4(<16 x i32> %a, <16 x i32> %b) #0 {
     30 entry:
     31   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaddw(<16 x i32> %a, <16 x i32> %b)
     32   ret <16 x i32> %0
     33 }
     34 
     35 ; CHECK-LABEL: test5:
     36 ; CHECK: v{{[0-9]+}}.ub = vadd(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub):sat
     37 define <16 x i32> @test5(<16 x i32> %a, <16 x i32> %b) #0 {
     38 entry:
     39   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaddubsat(<16 x i32> %a, <16 x i32> %b)
     40   ret <16 x i32> %0
     41 }
     42 
     43 ; CHECK-LABEL: test6:
     44 ; CHECK: v{{[0-9]+}}.uh = vadd(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh):sat
     45 define <16 x i32> @test6(<16 x i32> %a, <16 x i32> %b) #0 {
     46 entry:
     47   %0 = tail call <16 x i32> @llvm.hexagon.V6.vadduhsat(<16 x i32> %a, <16 x i32> %b)
     48   ret <16 x i32> %0
     49 }
     50 
     51 ; CHECK-LABEL: test7:
     52 ; CHECK: v{{[0-9]+}}.h = vadd(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
     53 define <16 x i32> @test7(<16 x i32> %a, <16 x i32> %b) #0 {
     54 entry:
     55   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaddhsat(<16 x i32> %a, <16 x i32> %b)
     56   ret <16 x i32> %0
     57 }
     58 
     59 ; CHECK-LABEL: test8:
     60 ; CHECK: v{{[0-9]+}}.w = vadd(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat
     61 define <16 x i32> @test8(<16 x i32> %a, <16 x i32> %b) #0 {
     62 entry:
     63   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaddwsat(<16 x i32> %a, <16 x i32> %b)
     64   ret <16 x i32> %0
     65 }
     66 
     67 ; CHECK-LABEL: test9:
     68 ; CHECK: v{{[0-9]+}}.b = vsub(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
     69 define <16 x i32> @test9(<16 x i32> %a, <16 x i32> %b) #0 {
     70 entry:
     71   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsubb(<16 x i32> %a, <16 x i32> %b)
     72   ret <16 x i32> %0
     73 }
     74 
     75 ; CHECK-LABEL: test10:
     76 ; CHECK: v{{[0-9]+}}.h = vsub(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
     77 define <16 x i32> @test10(<16 x i32> %a, <16 x i32> %b) #0 {
     78 entry:
     79   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsubh(<16 x i32> %a, <16 x i32> %b)
     80   ret <16 x i32> %0
     81 }
     82 
     83 ; CHECK-LABEL: test11:
     84 ; CHECK: v{{[0-9]+}}.w = vsub(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
     85 define <16 x i32> @test11(<16 x i32> %a, <16 x i32> %b) #0 {
     86 entry:
     87   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsubw(<16 x i32> %a, <16 x i32> %b)
     88   ret <16 x i32> %0
     89 }
     90 
     91 ; CHECK-LABEL: test12:
     92 ; CHECK: v{{[0-9]+}}.ub = vsub(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub):sat
     93 define <16 x i32> @test12(<16 x i32> %a, <16 x i32> %b) #0 {
     94 entry:
     95   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsububsat(<16 x i32> %a, <16 x i32> %b)
     96   ret <16 x i32> %0
     97 }
     98 
     99 ; CHECK-LABEL: test13:
    100 ; CHECK: v{{[0-9]+}}.uh = vsub(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh):sat
    101 define <16 x i32> @test13(<16 x i32> %a, <16 x i32> %b) #0 {
    102 entry:
    103   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsubuhsat(<16 x i32> %a, <16 x i32> %b)
    104   ret <16 x i32> %0
    105 }
    106 
    107 ; CHECK-LABEL: test14:
    108 ; CHECK: v{{[0-9]+}}.h = vsub(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
    109 define <16 x i32> @test14(<16 x i32> %a, <16 x i32> %b) #0 {
    110 entry:
    111   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsubhsat(<16 x i32> %a, <16 x i32> %b)
    112   ret <16 x i32> %0
    113 }
    114 
    115 ; CHECK-LABEL: test15:
    116 ; CHECK: v{{[0-9]+}}.w = vsub(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat
    117 define <16 x i32> @test15(<16 x i32> %a, <16 x i32> %b) #0 {
    118 entry:
    119   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsubwsat(<16 x i32> %a, <16 x i32> %b)
    120   ret <16 x i32> %0
    121 }
    122 
    123 ; CHECK-LABEL: test16:
    124 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.b = vadd(v{{[0-9]+}}:{{[0-9]+}}.b,v{{[0-9]+}}:{{[0-9]+}}.b)
    125 define <32 x i32> @test16(<32 x i32> %a, <32 x i32> %b) #0 {
    126 entry:
    127   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddb.dv(<32 x i32> %a, <32 x i32> %b)
    128   ret <32 x i32> %0
    129 }
    130 
    131 ; CHECK-LABEL: test17:
    132 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vadd(v{{[0-9]+}}:{{[0-9]+}}.h,v{{[0-9]+}}:{{[0-9]+}}.h)
    133 define <32 x i32> @test17(<32 x i32> %a, <32 x i32> %b) #0 {
    134 entry:
    135   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddh.dv(<32 x i32> %a, <32 x i32> %b)
    136   ret <32 x i32> %0
    137 }
    138 
    139 ; CHECK-LABEL: test18:
    140 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vadd(v{{[0-9]+}}:{{[0-9]+}}.w,v{{[0-9]+}}:{{[0-9]+}}.w)
    141 define <32 x i32> @test18(<32 x i32> %a, <32 x i32> %b) #0 {
    142 entry:
    143   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32> %a, <32 x i32> %b)
    144   ret <32 x i32> %0
    145 }
    146 
    147 ; CHECK-LABEL: test19:
    148 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.ub = vadd(v{{[0-9]+}}:{{[0-9]+}}.ub,v{{[0-9]+}}:{{[0-9]+}}.ub):sat
    149 define <32 x i32> @test19(<32 x i32> %a, <32 x i32> %b) #0 {
    150 entry:
    151   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddubsat.dv(<32 x i32> %a, <32 x i32> %b)
    152   ret <32 x i32> %0
    153 }
    154 
    155 ; CHECK-LABEL: test20:
    156 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vadd(v{{[0-9]+}}:{{[0-9]+}}.uh,v{{[0-9]+}}:{{[0-9]+}}.uh):sat
    157 define <32 x i32> @test20(<32 x i32> %a, <32 x i32> %b) #0 {
    158 entry:
    159   %0 = tail call <32 x i32> @llvm.hexagon.V6.vadduhsat.dv(<32 x i32> %a, <32 x i32> %b)
    160   ret <32 x i32> %0
    161 }
    162 
    163 ; CHECK-LABEL: test21:
    164 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vadd(v{{[0-9]+}}:{{[0-9]+}}.h,v{{[0-9]+}}:{{[0-9]+}}.h):sat
    165 define <32 x i32> @test21(<32 x i32> %a, <32 x i32> %b) #0 {
    166 entry:
    167   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddhsat.dv(<32 x i32> %a, <32 x i32> %b)
    168   ret <32 x i32> %0
    169 }
    170 
    171 ; CHECK-LABEL: test22:
    172 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vadd(v{{[0-9]+}}:{{[0-9]+}}.w,v{{[0-9]+}}:{{[0-9]+}}.w):sat
    173 define <32 x i32> @test22(<32 x i32> %a, <32 x i32> %b) #0 {
    174 entry:
    175   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddwsat.dv(<32 x i32> %a, <32 x i32> %b)
    176   ret <32 x i32> %0
    177 }
    178 
    179 ; CHECK-LABEL: test23:
    180 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.b = vsub(v{{[0-9]+}}:{{[0-9]+}}.b,v{{[0-9]+}}:{{[0-9]+}}.b)
    181 define <32 x i32> @test23(<32 x i32> %a, <32 x i32> %b) #0 {
    182 entry:
    183   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubb.dv(<32 x i32> %a, <32 x i32> %b)
    184   ret <32 x i32> %0
    185 }
    186 
    187 ; CHECK-LABEL: test24:
    188 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vsub(v{{[0-9]+}}:{{[0-9]+}}.h,v{{[0-9]+}}:{{[0-9]+}}.h)
    189 define <32 x i32> @test24(<32 x i32> %a, <32 x i32> %b) #0 {
    190 entry:
    191   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubh.dv(<32 x i32> %a, <32 x i32> %b)
    192   ret <32 x i32> %0
    193 }
    194 
    195 ; CHECK-LABEL: test25:
    196 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vsub(v{{[0-9]+}}:{{[0-9]+}}.w,v{{[0-9]+}}:{{[0-9]+}}.w)
    197 define <32 x i32> @test25(<32 x i32> %a, <32 x i32> %b) #0 {
    198 entry:
    199   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubw.dv(<32 x i32> %a, <32 x i32> %b)
    200   ret <32 x i32> %0
    201 }
    202 
    203 ; CHECK-LABEL: test26:
    204 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.ub = vsub(v{{[0-9]+}}:{{[0-9]+}}.ub,v{{[0-9]+}}:{{[0-9]+}}.ub):sat
    205 define <32 x i32> @test26(<32 x i32> %a, <32 x i32> %b) #0 {
    206 entry:
    207   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsububsat.dv(<32 x i32> %a, <32 x i32> %b)
    208   ret <32 x i32> %0
    209 }
    210 
    211 ; CHECK-LABEL: test27:
    212 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vsub(v{{[0-9]+}}:{{[0-9]+}}.uh,v{{[0-9]+}}:{{[0-9]+}}.uh):sat
    213 define <32 x i32> @test27(<32 x i32> %a, <32 x i32> %b) #0 {
    214 entry:
    215   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubuhsat.dv(<32 x i32> %a, <32 x i32> %b)
    216   ret <32 x i32> %0
    217 }
    218 
    219 ; CHECK-LABEL: test28:
    220 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vsub(v{{[0-9]+}}:{{[0-9]+}}.h,v{{[0-9]+}}:{{[0-9]+}}.h):sat
    221 define <32 x i32> @test28(<32 x i32> %a, <32 x i32> %b) #0 {
    222 entry:
    223   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubhsat.dv(<32 x i32> %a, <32 x i32> %b)
    224   ret <32 x i32> %0
    225 }
    226 
    227 ; CHECK-LABEL: test29:
    228 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vsub(v{{[0-9]+}}:{{[0-9]+}}.w,v{{[0-9]+}}:{{[0-9]+}}.w):sat
    229 define <32 x i32> @test29(<32 x i32> %a, <32 x i32> %b) #0 {
    230 entry:
    231   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubwsat.dv(<32 x i32> %a, <32 x i32> %b)
    232   ret <32 x i32> %0
    233 }
    234 
    235 ; CHECK-LABEL: test30:
    236 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vadd(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    237 define <32 x i32> @test30(<16 x i32> %a, <16 x i32> %b) #0 {
    238 entry:
    239   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddubh(<16 x i32> %a, <16 x i32> %b)
    240   ret <32 x i32> %0
    241 }
    242 
    243 ; CHECK-LABEL: test31:
    244 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vadd(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    245 define <32 x i32> @test31(<16 x i32> %a, <16 x i32> %b) #0 {
    246 entry:
    247   %0 = tail call <32 x i32> @llvm.hexagon.V6.vadduhw(<16 x i32> %a, <16 x i32> %b)
    248   ret <32 x i32> %0
    249 }
    250 
    251 ; CHECK-LABEL: test32:
    252 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vadd(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    253 define <32 x i32> @test32(<16 x i32> %a, <16 x i32> %b) #0 {
    254 entry:
    255   %0 = tail call <32 x i32> @llvm.hexagon.V6.vaddhw(<16 x i32> %a, <16 x i32> %b)
    256   ret <32 x i32> %0
    257 }
    258 
    259 ; CHECK-LABEL: test33:
    260 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vsub(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    261 define <32 x i32> @test33(<16 x i32> %a, <16 x i32> %b) #0 {
    262 entry:
    263   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsububh(<16 x i32> %a, <16 x i32> %b)
    264   ret <32 x i32> %0
    265 }
    266 
    267 ; CHECK-LABEL: test34:
    268 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vsub(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    269 define <32 x i32> @test34(<16 x i32> %a, <16 x i32> %b) #0 {
    270 entry:
    271   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubuhw(<16 x i32> %a, <16 x i32> %b)
    272   ret <32 x i32> %0
    273 }
    274 
    275 ; CHECK-LABEL: test35:
    276 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vsub(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    277 define <32 x i32> @test35(<16 x i32> %a, <16 x i32> %b) #0 {
    278 entry:
    279   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsubhw(<16 x i32> %a, <16 x i32> %b)
    280   ret <32 x i32> %0
    281 }
    282 
    283 ; CHECK-LABEL: test36:
    284 ; CHECK: v{{[0-9]+}}.ub = vabsdiff(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    285 define <16 x i32> @test36(<16 x i32> %a, <16 x i32> %b) #0 {
    286 entry:
    287   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsdiffub(<16 x i32> %a, <16 x i32> %b)
    288   ret <16 x i32> %0
    289 }
    290 
    291 ; CHECK-LABEL: test37:
    292 ; CHECK: v{{[0-9]+}}.uh = vabsdiff(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    293 define <16 x i32> @test37(<16 x i32> %a, <16 x i32> %b) #0 {
    294 entry:
    295   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsdiffh(<16 x i32> %a, <16 x i32> %b)
    296   ret <16 x i32> %0
    297 }
    298 
    299 ; CHECK-LABEL: test38:
    300 ; CHECK: v{{[0-9]+}}.uh = vabsdiff(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    301 define <16 x i32> @test38(<16 x i32> %a, <16 x i32> %b) #0 {
    302 entry:
    303   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsdiffuh(<16 x i32> %a, <16 x i32> %b)
    304   ret <16 x i32> %0
    305 }
    306 
    307 ; CHECK-LABEL: test39:
    308 ; CHECK: v{{[0-9]+}}.uw = vabsdiff(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    309 define <16 x i32> @test39(<16 x i32> %a, <16 x i32> %b) #0 {
    310 entry:
    311   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsdiffw(<16 x i32> %a, <16 x i32> %b)
    312   ret <16 x i32> %0
    313 }
    314 
    315 ; CHECK-LABEL: test40:
    316 ; CHECK: v{{[0-9]+}}.ub = vavg(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    317 define <16 x i32> @test40(<16 x i32> %a, <16 x i32> %b) #0 {
    318 entry:
    319   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavgub(<16 x i32> %a, <16 x i32> %b)
    320   ret <16 x i32> %0
    321 }
    322 
    323 ; CHECK-LABEL: test41:
    324 ; CHECK: v{{[0-9]+}}.uh = vavg(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    325 define <16 x i32> @test41(<16 x i32> %a, <16 x i32> %b) #0 {
    326 entry:
    327   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavguh(<16 x i32> %a, <16 x i32> %b)
    328   ret <16 x i32> %0
    329 }
    330 
    331 ; CHECK-LABEL: test42:
    332 ; CHECK: v{{[0-9]+}}.h = vavg(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    333 define <16 x i32> @test42(<16 x i32> %a, <16 x i32> %b) #0 {
    334 entry:
    335   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavgh(<16 x i32> %a, <16 x i32> %b)
    336   ret <16 x i32> %0
    337 }
    338 
    339 ; CHECK-LABEL: test43:
    340 ; CHECK: v{{[0-9]+}}.w = vavg(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    341 define <16 x i32> @test43(<16 x i32> %a, <16 x i32> %b) #0 {
    342 entry:
    343   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavgw(<16 x i32> %a, <16 x i32> %b)
    344   ret <16 x i32> %0
    345 }
    346 
    347 ; CHECK-LABEL: test44:
    348 ; CHECK: v{{[0-9]+}}.b = vnavg(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    349 define <16 x i32> @test44(<16 x i32> %a, <16 x i32> %b) #0 {
    350 entry:
    351   %0 = tail call <16 x i32> @llvm.hexagon.V6.vnavgub(<16 x i32> %a, <16 x i32> %b)
    352   ret <16 x i32> %0
    353 }
    354 
    355 ; CHECK-LABEL: test45:
    356 ; CHECK: v{{[0-9]+}}.h = vnavg(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    357 define <16 x i32> @test45(<16 x i32> %a, <16 x i32> %b) #0 {
    358 entry:
    359   %0 = tail call <16 x i32> @llvm.hexagon.V6.vnavgh(<16 x i32> %a, <16 x i32> %b)
    360   ret <16 x i32> %0
    361 }
    362 
    363 ; CHECK-LABEL: test46:
    364 ; CHECK: v{{[0-9]+}}.w = vnavg(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    365 define <16 x i32> @test46(<16 x i32> %a, <16 x i32> %b) #0 {
    366 entry:
    367   %0 = tail call <16 x i32> @llvm.hexagon.V6.vnavgw(<16 x i32> %a, <16 x i32> %b)
    368   ret <16 x i32> %0
    369 }
    370 
    371 ; CHECK-LABEL: test47:
    372 ; CHECK: v{{[0-9]+}}.ub = vavg(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub):rnd
    373 define <16 x i32> @test47(<16 x i32> %a, <16 x i32> %b) #0 {
    374 entry:
    375   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavgubrnd(<16 x i32> %a, <16 x i32> %b)
    376   ret <16 x i32> %0
    377 }
    378 
    379 ; CHECK-LABEL: test48:
    380 ; CHECK: v{{[0-9]+}}.uh = vavg(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh):rnd
    381 define <16 x i32> @test48(<16 x i32> %a, <16 x i32> %b) #0 {
    382 entry:
    383   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavguhrnd(<16 x i32> %a, <16 x i32> %b)
    384   ret <16 x i32> %0
    385 }
    386 
    387 ; CHECK-LABEL: test49:
    388 ; CHECK: v{{[0-9]+}}.h = vavg(v{{[0-9]+}}.h,v{{[0-9]+}}.h):rnd
    389 define <16 x i32> @test49(<16 x i32> %a, <16 x i32> %b) #0 {
    390 entry:
    391   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavghrnd(<16 x i32> %a, <16 x i32> %b)
    392   ret <16 x i32> %0
    393 }
    394 
    395 ; CHECK-LABEL: test50:
    396 ; CHECK: v{{[0-9]+}}.w = vavg(v{{[0-9]+}}.w,v{{[0-9]+}}.w):rnd
    397 define <16 x i32> @test50(<16 x i32> %a, <16 x i32> %b) #0 {
    398 entry:
    399   %0 = tail call <16 x i32> @llvm.hexagon.V6.vavgwrnd(<16 x i32> %a, <16 x i32> %b)
    400   ret <16 x i32> %0
    401 }
    402 
    403 ; CHECK-LABEL: test51:
    404 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vmpa(v{{[0-9]+}}:{{[0-9]+}}.ub,v{{[0-9]+}}:{{[0-9]+}}.ub)
    405 define <32 x i32> @test51(<32 x i32> %a, <32 x i32> %b) #0 {
    406 entry:
    407   %0 = tail call <32 x i32> @llvm.hexagon.V6.vmpabuuv(<32 x i32> %a, <32 x i32> %b)
    408   ret <32 x i32> %0
    409 }
    410 
    411 ; CHECK-LABEL: test52:
    412 ; CHECK: v{{[0-9]+}}.ub = vmin(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    413 define <16 x i32> @test52(<16 x i32> %a, <16 x i32> %b) #0 {
    414 entry:
    415   %0 = tail call <16 x i32> @llvm.hexagon.V6.vminub(<16 x i32> %a, <16 x i32> %b)
    416   ret <16 x i32> %0
    417 }
    418 
    419 ; CHECK-LABEL: test53:
    420 ; CHECK: v{{[0-9]+}}.uh = vmin(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    421 define <16 x i32> @test53(<16 x i32> %a, <16 x i32> %b) #0 {
    422 entry:
    423   %0 = tail call <16 x i32> @llvm.hexagon.V6.vminuh(<16 x i32> %a, <16 x i32> %b)
    424   ret <16 x i32> %0
    425 }
    426 
    427 ; CHECK-LABEL: test54:
    428 ; CHECK: v{{[0-9]+}}.h = vmin(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    429 define <16 x i32> @test54(<16 x i32> %a, <16 x i32> %b) #0 {
    430 entry:
    431   %0 = tail call <16 x i32> @llvm.hexagon.V6.vminh(<16 x i32> %a, <16 x i32> %b)
    432   ret <16 x i32> %0
    433 }
    434 
    435 ; CHECK-LABEL: test55:
    436 ; CHECK: v{{[0-9]+}}.w = vmin(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    437 define <16 x i32> @test55(<16 x i32> %a, <16 x i32> %b) #0 {
    438 entry:
    439   %0 = tail call <16 x i32> @llvm.hexagon.V6.vminw(<16 x i32> %a, <16 x i32> %b)
    440   ret <16 x i32> %0
    441 }
    442 
    443 ; CHECK-LABEL: test56:
    444 ; CHECK: v{{[0-9]+}}.ub = vmax(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    445 define <16 x i32> @test56(<16 x i32> %a, <16 x i32> %b) #0 {
    446 entry:
    447   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmaxub(<16 x i32> %a, <16 x i32> %b)
    448   ret <16 x i32> %0
    449 }
    450 
    451 ; CHECK-LABEL: test57:
    452 ; CHECK: v{{[0-9]+}}.uh = vmax(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    453 define <16 x i32> @test57(<16 x i32> %a, <16 x i32> %b) #0 {
    454 entry:
    455   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmaxuh(<16 x i32> %a, <16 x i32> %b)
    456   ret <16 x i32> %0
    457 }
    458 
    459 ; CHECK-LABEL: test58:
    460 ; CHECK: v{{[0-9]+}}.h = vmax(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    461 define <16 x i32> @test58(<16 x i32> %a, <16 x i32> %b) #0 {
    462 entry:
    463   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmaxh(<16 x i32> %a, <16 x i32> %b)
    464   ret <16 x i32> %0
    465 }
    466 
    467 ; CHECK-LABEL: test59:
    468 ; CHECK: v{{[0-9]+}}.w = vmax(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    469 define <16 x i32> @test59(<16 x i32> %a, <16 x i32> %b) #0 {
    470 entry:
    471   %0 = tail call <16 x i32> @llvm.hexagon.V6.vmaxw(<16 x i32> %a, <16 x i32> %b)
    472   ret <16 x i32> %0
    473 }
    474 
    475 ; CHECK-LABEL: test60:
    476 ; CHECK: v{{[0-9]+}} = vdelta(v{{[0-9]+}},v{{[0-9]+}})
    477 define <16 x i32> @test60(<16 x i32> %a, <16 x i32> %b) #0 {
    478 entry:
    479   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdelta(<16 x i32> %a, <16 x i32> %b)
    480   ret <16 x i32> %0
    481 }
    482 
    483 ; CHECK-LABEL: test61:
    484 ; CHECK: v{{[0-9]+}} = vrdelta(v{{[0-9]+}},v{{[0-9]+}})
    485 define <16 x i32> @test61(<16 x i32> %a, <16 x i32> %b) #0 {
    486 entry:
    487   %0 = tail call <16 x i32> @llvm.hexagon.V6.vrdelta(<16 x i32> %a, <16 x i32> %b)
    488   ret <16 x i32> %0
    489 }
    490 
    491 ; CHECK-LABEL: test62:
    492 ; CHECK: v{{[0-9]+}}.b = vdeale(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    493 define <16 x i32> @test62(<16 x i32> %a, <16 x i32> %b) #0 {
    494 entry:
    495   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealb4w(<16 x i32> %a, <16 x i32> %b)
    496   ret <16 x i32> %0
    497 }
    498 
    499 ; CHECK-LABEL: test63:
    500 ; CHECK: v{{[0-9]+}}.b = vshuffe(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    501 define <16 x i32> @test63(<16 x i32> %a, <16 x i32> %b) #0 {
    502 entry:
    503   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffeb(<16 x i32> %a, <16 x i32> %b)
    504   ret <16 x i32> %0
    505 }
    506 
    507 ; CHECK-LABEL: test64:
    508 ; CHECK: v{{[0-9]+}}.b = vshuffo(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    509 define <16 x i32> @test64(<16 x i32> %a, <16 x i32> %b) #0 {
    510 entry:
    511   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffob(<16 x i32> %a, <16 x i32> %b)
    512   ret <16 x i32> %0
    513 }
    514 
    515 ; CHECK-LABEL: test65:
    516 ; CHECK: v{{[0-9]+}}.h = vshuffe(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    517 define <16 x i32> @test65(<16 x i32> %a, <16 x i32> %b) #0 {
    518 entry:
    519   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshufeh(<16 x i32> %a, <16 x i32> %b)
    520   ret <16 x i32> %0
    521 }
    522 
    523 ; CHECK-LABEL: test66:
    524 ; CHECK: v{{[0-9]+}}.h = vshuffo(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    525 define <16 x i32> @test66(<16 x i32> %a, <16 x i32> %b) #0 {
    526 entry:
    527   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshufoh(<16 x i32> %a, <16 x i32> %b)
    528   ret <16 x i32> %0
    529 }
    530 
    531 ; CHECK-LABEL: test67:
    532 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vshuffoe(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    533 define <32 x i32> @test67(<16 x i32> %a, <16 x i32> %b) #0 {
    534 entry:
    535   %0 = tail call <32 x i32> @llvm.hexagon.V6.vshufoeh(<16 x i32> %a, <16 x i32> %b)
    536   ret <32 x i32> %0
    537 }
    538 
    539 ; CHECK-LABEL: test68:
    540 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.b = vshuffoe(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    541 define <32 x i32> @test68(<16 x i32> %a, <16 x i32> %b) #0 {
    542 entry:
    543   %0 = tail call <32 x i32> @llvm.hexagon.V6.vshufoeb(<16 x i32> %a, <16 x i32> %b)
    544   ret <32 x i32> %0
    545 }
    546 
    547 ; CHECK-LABEL: test69:
    548 ; CHECK: v{{[0-9]+}}:{{[0-9]+}} = vcombine(v{{[0-9]+}},v{{[0-9]+}})
    549 define <32 x i32> @test69(<16 x i32> %a, <16 x i32> %b) #0 {
    550 entry:
    551   %0 = tail call <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32> %a, <16 x i32> %b)
    552   ret <32 x i32> %0
    553 }
    554 
    555 ; CHECK-LABEL: test70:
    556 ; CHECK: v{{[0-9]+}}.ub = vsat(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    557 define <16 x i32> @test70(<16 x i32> %a, <16 x i32> %b) #0 {
    558 entry:
    559   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsathub(<16 x i32> %a, <16 x i32> %b)
    560   ret <16 x i32> %0
    561 }
    562 
    563 ; CHECK-LABEL: test71:
    564 ; CHECK: v{{[0-9]+}}.h = vsat(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    565 define <16 x i32> @test71(<16 x i32> %a, <16 x i32> %b) #0 {
    566 entry:
    567   %0 = tail call <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32> %a, <16 x i32> %b)
    568   ret <16 x i32> %0
    569 }
    570 
    571 ; CHECK-LABEL: test72:
    572 ; CHECK: v{{[0-9]+}}.h = vround(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat
    573 define <16 x i32> @test72(<16 x i32> %a, <16 x i32> %b) #0 {
    574 entry:
    575   %0 = tail call <16 x i32> @llvm.hexagon.V6.vroundwh(<16 x i32> %a, <16 x i32> %b)
    576   ret <16 x i32> %0
    577 }
    578 
    579 ; CHECK-LABEL: test73:
    580 ; CHECK: v{{[0-9]+}}.uh = vround(v{{[0-9]+}}.w,v{{[0-9]+}}.w):sat
    581 define <16 x i32> @test73(<16 x i32> %a, <16 x i32> %b) #0 {
    582 entry:
    583   %0 = tail call <16 x i32> @llvm.hexagon.V6.vroundwuh(<16 x i32> %a, <16 x i32> %b)
    584   ret <16 x i32> %0
    585 }
    586 
    587 ; CHECK-LABEL: test74:
    588 ; CHECK: v{{[0-9]+}}.b = vround(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
    589 define <16 x i32> @test74(<16 x i32> %a, <16 x i32> %b) #0 {
    590 entry:
    591   %0 = tail call <16 x i32> @llvm.hexagon.V6.vroundhb(<16 x i32> %a, <16 x i32> %b)
    592   ret <16 x i32> %0
    593 }
    594 
    595 ; CHECK-LABEL: test75:
    596 ; CHECK: v{{[0-9]+}}.ub = vround(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
    597 define <16 x i32> @test75(<16 x i32> %a, <16 x i32> %b) #0 {
    598 entry:
    599   %0 = tail call <16 x i32> @llvm.hexagon.V6.vroundhub(<16 x i32> %a, <16 x i32> %b)
    600   ret <16 x i32> %0
    601 }
    602 
    603 ; CHECK-LABEL: test76:
    604 ; CHECK: v{{[0-9]+}}.w = vasr(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    605 define <16 x i32> @test76(<16 x i32> %a, <16 x i32> %b) #0 {
    606 entry:
    607   %0 = tail call <16 x i32> @llvm.hexagon.V6.vasrwv(<16 x i32> %a, <16 x i32> %b)
    608   ret <16 x i32> %0
    609 }
    610 
    611 ; CHECK-LABEL: test77:
    612 ; CHECK: v{{[0-9]+}}.w = vlsr(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    613 define <16 x i32> @test77(<16 x i32> %a, <16 x i32> %b) #0 {
    614 entry:
    615   %0 = tail call <16 x i32> @llvm.hexagon.V6.vlsrwv(<16 x i32> %a, <16 x i32> %b)
    616   ret <16 x i32> %0
    617 }
    618 
    619 ; CHECK-LABEL: test78:
    620 ; CHECK: v{{[0-9]+}}.h = vlsr(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    621 define <16 x i32> @test78(<16 x i32> %a, <16 x i32> %b) #0 {
    622 entry:
    623   %0 = tail call <16 x i32> @llvm.hexagon.V6.vlsrhv(<16 x i32> %a, <16 x i32> %b)
    624   ret <16 x i32> %0
    625 }
    626 
    627 ; CHECK-LABEL: test79:
    628 ; CHECK: v{{[0-9]+}}.h = vasr(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    629 define <16 x i32> @test79(<16 x i32> %a, <16 x i32> %b) #0 {
    630 entry:
    631   %0 = tail call <16 x i32> @llvm.hexagon.V6.vasrhv(<16 x i32> %a, <16 x i32> %b)
    632   ret <16 x i32> %0
    633 }
    634 
    635 ; CHECK-LABEL: test80:
    636 ; CHECK: v{{[0-9]+}}.w = vasl(v{{[0-9]+}}.w,v{{[0-9]+}}.w)
    637 define <16 x i32> @test80(<16 x i32> %a, <16 x i32> %b) #0 {
    638 entry:
    639   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaslwv(<16 x i32> %a, <16 x i32> %b)
    640   ret <16 x i32> %0
    641 }
    642 
    643 ; CHECK-LABEL: test81:
    644 ; CHECK: v{{[0-9]+}}.h = vasl(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    645 define <16 x i32> @test81(<16 x i32> %a, <16 x i32> %b) #0 {
    646 entry:
    647   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaslhv(<16 x i32> %a, <16 x i32> %b)
    648   ret <16 x i32> %0
    649 }
    650 
    651 ; CHECK-LABEL: test82:
    652 ; CHECK: v{{[0-9]+}}.b = vadd(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    653 define <16 x i32> @test82(<16 x i32> %a, <16 x i32> %b) #0 {
    654 entry:
    655   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaddb(<16 x i32> %a, <16 x i32> %b)
    656   ret <16 x i32> %0
    657 }
    658 
    659 ; CHECK-LABEL: test83:
    660 ; CHECK: v{{[0-9]+}}.h = vadd(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    661 define <16 x i32> @test83(<16 x i32> %a, <16 x i32> %b) #0 {
    662 entry:
    663   %0 = tail call <16 x i32> @llvm.hexagon.V6.vaddh(<16 x i32> %a, <16 x i32> %b)
    664   ret <16 x i32> %0
    665 }
    666 
    667 ; CHECK-LABEL: test84:
    668 ; CHECK: if (q{{[0-3]}}) v{{[0-9]+}}.b += v{{[0-9]+}}.b
    669 define <16 x i32> @test84(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    670 entry:
    671   %0 = bitcast <16 x i32> %a to <512 x i1>
    672   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaddbq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    673   ret <16 x i32> %1
    674 }
    675 
    676 ; CHECK-LABEL: test85:
    677 ; CHECK: if (q{{[0-3]}}) v{{[0-9]+}}.h += v{{[0-9]+}}.h
    678 define <16 x i32> @test85(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    679 entry:
    680   %0 = bitcast <16 x i32> %a to <512 x i1>
    681   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaddhq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    682   ret <16 x i32> %1
    683 }
    684 
    685 ; CHECK-LABEL: test86:
    686 ; CHECK: if (q{{[0-3]}}) v{{[0-9]+}}.w += v{{[0-9]+}}.w
    687 define <16 x i32> @test86(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    688 entry:
    689   %0 = bitcast <16 x i32> %a to <512 x i1>
    690   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaddwq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    691   ret <16 x i32> %1
    692 }
    693 
    694 ; CHECK-LABEL: test87:
    695 ; CHECK: if (!q{{[0-3]}}) v{{[0-9]+}}.b += v{{[0-9]+}}.b
    696 define <16 x i32> @test87(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    697 entry:
    698   %0 = bitcast <16 x i32> %a to <512 x i1>
    699   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaddbnq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    700   ret <16 x i32> %1
    701 }
    702 
    703 ; CHECK-LABEL: test88:
    704 ; CHECK: if (!q{{[0-3]}}) v{{[0-9]+}}.h += v{{[0-9]+}}.h
    705 define <16 x i32> @test88(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    706 entry:
    707   %0 = bitcast <16 x i32> %a to <512 x i1>
    708   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaddhnq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    709   ret <16 x i32> %1
    710 }
    711 
    712 ; CHECK-LABEL: test89:
    713 ; CHECK: if (!q{{[0-3]}}) v{{[0-9]+}}.w += v{{[0-9]+}}.w
    714 define <16 x i32> @test89(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    715 entry:
    716   %0 = bitcast <16 x i32> %a to <512 x i1>
    717   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaddwnq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    718   ret <16 x i32> %1
    719 }
    720 
    721 ; CHECK-LABEL: test90:
    722 ; CHECK: if (q{{[0-3]}}) v{{[0-9]+}}.b -= v{{[0-9]+}}.b
    723 define <16 x i32> @test90(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    724 entry:
    725   %0 = bitcast <16 x i32> %a to <512 x i1>
    726   %1 = tail call <16 x i32> @llvm.hexagon.V6.vsubbq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    727   ret <16 x i32> %1
    728 }
    729 
    730 ; CHECK-LABEL: test91:
    731 ; CHECK: if (q{{[0-3]}}) v{{[0-9]+}}.h -= v{{[0-9]+}}.h
    732 define <16 x i32> @test91(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    733 entry:
    734   %0 = bitcast <16 x i32> %a to <512 x i1>
    735   %1 = tail call <16 x i32> @llvm.hexagon.V6.vsubhq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    736   ret <16 x i32> %1
    737 }
    738 
    739 ; CHECK-LABEL: test92:
    740 ; CHECK: if (q{{[0-3]}}) v{{[0-9]+}}.w -= v{{[0-9]+}}.w
    741 define <16 x i32> @test92(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    742 entry:
    743   %0 = bitcast <16 x i32> %a to <512 x i1>
    744   %1 = tail call <16 x i32> @llvm.hexagon.V6.vsubwq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    745   ret <16 x i32> %1
    746 }
    747 
    748 ; CHECK-LABEL: test93:
    749 ; CHECK: if (!q{{[0-3]}}) v{{[0-9]+}}.b -= v{{[0-9]+}}.b
    750 define <16 x i32> @test93(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    751 entry:
    752   %0 = bitcast <16 x i32> %a to <512 x i1>
    753   %1 = tail call <16 x i32> @llvm.hexagon.V6.vsubbnq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    754   ret <16 x i32> %1
    755 }
    756 
    757 ; CHECK-LABEL: test94:
    758 ; CHECK: if (!q{{[0-3]}}) v{{[0-9]+}}.h -= v{{[0-9]+}}.h
    759 define <16 x i32> @test94(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    760 entry:
    761   %0 = bitcast <16 x i32> %a to <512 x i1>
    762   %1 = tail call <16 x i32> @llvm.hexagon.V6.vsubhnq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    763   ret <16 x i32> %1
    764 }
    765 
    766 ; CHECK-LABEL: test95:
    767 ; CHECK: if (!q{{[0-3]}}) v{{[0-9]+}}.w -= v{{[0-9]+}}.w
    768 define <16 x i32> @test95(<16 x i32> %a, <16 x i32> %b, <16 x i32> %c) #0 {
    769 entry:
    770   %0 = bitcast <16 x i32> %a to <512 x i1>
    771   %1 = tail call <16 x i32> @llvm.hexagon.V6.vsubwnq(<512 x i1> %0, <16 x i32> %c, <16 x i32> %b)
    772   ret <16 x i32> %1
    773 }
    774 
    775 ; CHECK-LABEL: test96:
    776 ; CHECK: v{{[0-9]+}}.h = vabs(v{{[0-9]+}}.h)
    777 define <16 x i32> @test96(<16 x i32> %a) #0 {
    778 entry:
    779   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsh(<16 x i32> %a)
    780   ret <16 x i32> %0
    781 }
    782 
    783 ; CHECK-LABEL: test97:
    784 ; CHECK: v{{[0-9]+}}.h = vabs(v{{[0-9]+}}.h):sat
    785 define <16 x i32> @test97(<16 x i32> %a) #0 {
    786 entry:
    787   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsh.sat(<16 x i32> %a)
    788   ret <16 x i32> %0
    789 }
    790 
    791 ; CHECK-LABEL: test98:
    792 ; CHECK: v{{[0-9]+}}.w = vabs(v{{[0-9]+}}.w)
    793 define <16 x i32> @test98(<16 x i32> %a) #0 {
    794 entry:
    795   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsw(<16 x i32> %a)
    796   ret <16 x i32> %0
    797 }
    798 
    799 ; CHECK-LABEL: test99:
    800 ; CHECK: v{{[0-9]+}}.w = vabs(v{{[0-9]+}}.w):sat
    801 define <16 x i32> @test99(<16 x i32> %a) #0 {
    802 entry:
    803   %0 = tail call <16 x i32> @llvm.hexagon.V6.vabsw.sat(<16 x i32> %a)
    804   ret <16 x i32> %0
    805 }
    806 
    807 ; CHECK-LABEL: test100:
    808 ; CHECK: v{{[0-9]+}} = vnot(v{{[0-9]+}})
    809 define <16 x i32> @test100(<16 x i32> %a) #0 {
    810 entry:
    811   %0 = tail call <16 x i32> @llvm.hexagon.V6.vnot(<16 x i32> %a)
    812   ret <16 x i32> %0
    813 }
    814 
    815 ; CHECK-LABEL: test101:
    816 ; CHECK: v{{[0-9]+}}.h = vdeal(v{{[0-9]+}}.h)
    817 define <16 x i32> @test101(<16 x i32> %a) #0 {
    818 entry:
    819   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32> %a)
    820   ret <16 x i32> %0
    821 }
    822 
    823 ; CHECK-LABEL: test102:
    824 ; CHECK: v{{[0-9]+}}.b = vdeal(v{{[0-9]+}}.b)
    825 define <16 x i32> @test102(<16 x i32> %a) #0 {
    826 entry:
    827   %0 = tail call <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32> %a)
    828   ret <16 x i32> %0
    829 }
    830 
    831 ; CHECK-LABEL: test103:
    832 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vunpack(v{{[0-9]+}}.ub)
    833 define <32 x i32> @test103(<16 x i32> %a) #0 {
    834 entry:
    835   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32> %a)
    836   ret <32 x i32> %0
    837 }
    838 
    839 ; CHECK-LABEL: test104:
    840 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vunpack(v{{[0-9]+}}.uh)
    841 define <32 x i32> @test104(<16 x i32> %a) #0 {
    842 entry:
    843   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32> %a)
    844   ret <32 x i32> %0
    845 }
    846 
    847 ; CHECK-LABEL: test105:
    848 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vunpack(v{{[0-9]+}}.b)
    849 define <32 x i32> @test105(<16 x i32> %a) #0 {
    850 entry:
    851   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32> %a)
    852   ret <32 x i32> %0
    853 }
    854 
    855 ; CHECK-LABEL: test106:
    856 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vunpack(v{{[0-9]+}}.h)
    857 define <32 x i32> @test106(<16 x i32> %a) #0 {
    858 entry:
    859   %0 = tail call <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32> %a)
    860   ret <32 x i32> %0
    861 }
    862 
    863 ; CHECK-LABEL: test107:
    864 ; CHECK: v{{[0-9]+}}.h = vshuff(v{{[0-9]+}}.h)
    865 define <16 x i32> @test107(<16 x i32> %a) #0 {
    866 entry:
    867   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32> %a)
    868   ret <16 x i32> %0
    869 }
    870 
    871 ; CHECK-LABEL: test108:
    872 ; CHECK: v{{[0-9]+}}.b = vshuff(v{{[0-9]+}}.b)
    873 define <16 x i32> @test108(<16 x i32> %a) #0 {
    874 entry:
    875   %0 = tail call <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32> %a)
    876   ret <16 x i32> %0
    877 }
    878 
    879 ; CHECK-LABEL: test109:
    880 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh = vzxt(v{{[0-9]+}}.ub)
    881 define <32 x i32> @test109(<16 x i32> %a) #0 {
    882 entry:
    883   %0 = tail call <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32> %a)
    884   ret <32 x i32> %0
    885 }
    886 
    887 ; CHECK-LABEL: test110:
    888 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw = vzxt(v{{[0-9]+}}.uh)
    889 define <32 x i32> @test110(<16 x i32> %a) #0 {
    890 entry:
    891   %0 = tail call <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32> %a)
    892   ret <32 x i32> %0
    893 }
    894 
    895 ; CHECK-LABEL: test111:
    896 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h = vsxt(v{{[0-9]+}}.b)
    897 define <32 x i32> @test111(<16 x i32> %a) #0 {
    898 entry:
    899   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsb(<16 x i32> %a)
    900   ret <32 x i32> %0
    901 }
    902 
    903 ; CHECK-LABEL: test112:
    904 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w = vsxt(v{{[0-9]+}}.h)
    905 define <32 x i32> @test112(<16 x i32> %a) #0 {
    906 entry:
    907   %0 = tail call <32 x i32> @llvm.hexagon.V6.vsh(<16 x i32> %a)
    908   ret <32 x i32> %0
    909 }
    910 
    911 ; CHECK-LABEL: test113:
    912 ; CHECK: v{{[0-9]+}} = v{{[0-9]+}}
    913 define <16 x i32> @test113(<16 x i32> %a) #0 {
    914 entry:
    915   %0 = tail call <16 x i32> @llvm.hexagon.V6.vassign(<16 x i32> %a)
    916   ret <16 x i32> %0
    917 }
    918 
    919 declare <16 x i32> @llvm.hexagon.V6.vadduhsat(<16 x i32>, <16 x i32>) #0
    920 declare <16 x i32> @llvm.hexagon.V6.vaddhsat(<16 x i32>, <16 x i32>) #0
    921 declare <16 x i32> @llvm.hexagon.V6.vaddwsat(<16 x i32>, <16 x i32>) #0
    922 declare <16 x i32> @llvm.hexagon.V6.vsubb(<16 x i32>, <16 x i32>) #0
    923 declare <16 x i32> @llvm.hexagon.V6.vsubh(<16 x i32>, <16 x i32>) #0
    924 declare <16 x i32> @llvm.hexagon.V6.vsubw(<16 x i32>, <16 x i32>) #0
    925 declare <16 x i32> @llvm.hexagon.V6.vsububsat(<16 x i32>, <16 x i32>) #0
    926 declare <16 x i32> @llvm.hexagon.V6.vsubuhsat(<16 x i32>, <16 x i32>) #0
    927 declare <16 x i32> @llvm.hexagon.V6.vsubhsat(<16 x i32>, <16 x i32>) #0
    928 declare <16 x i32> @llvm.hexagon.V6.vsubwsat(<16 x i32>, <16 x i32>) #0
    929 declare <32 x i32> @llvm.hexagon.V6.vaddb.dv(<32 x i32>, <32 x i32>) #0
    930 declare <32 x i32> @llvm.hexagon.V6.vaddh.dv(<32 x i32>, <32 x i32>) #0
    931 declare <32 x i32> @llvm.hexagon.V6.vaddw.dv(<32 x i32>, <32 x i32>) #0
    932 declare <32 x i32> @llvm.hexagon.V6.vaddubsat.dv(<32 x i32>, <32 x i32>) #0
    933 declare <32 x i32> @llvm.hexagon.V6.vadduhsat.dv(<32 x i32>, <32 x i32>) #0
    934 declare <32 x i32> @llvm.hexagon.V6.vaddhsat.dv(<32 x i32>, <32 x i32>) #0
    935 declare <32 x i32> @llvm.hexagon.V6.vaddwsat.dv(<32 x i32>, <32 x i32>) #0
    936 declare <32 x i32> @llvm.hexagon.V6.vsubb.dv(<32 x i32>, <32 x i32>) #0
    937 declare <32 x i32> @llvm.hexagon.V6.vsubh.dv(<32 x i32>, <32 x i32>) #0
    938 declare <32 x i32> @llvm.hexagon.V6.vsubw.dv(<32 x i32>, <32 x i32>) #0
    939 declare <32 x i32> @llvm.hexagon.V6.vsububsat.dv(<32 x i32>, <32 x i32>) #0
    940 declare <32 x i32> @llvm.hexagon.V6.vsubuhsat.dv(<32 x i32>, <32 x i32>) #0
    941 declare <32 x i32> @llvm.hexagon.V6.vsubhsat.dv(<32 x i32>, <32 x i32>) #0
    942 declare <32 x i32> @llvm.hexagon.V6.vsubwsat.dv(<32 x i32>, <32 x i32>) #0
    943 declare <32 x i32> @llvm.hexagon.V6.vaddubh(<16 x i32>, <16 x i32>) #0
    944 declare <32 x i32> @llvm.hexagon.V6.vadduhw(<16 x i32>, <16 x i32>) #0
    945 declare <32 x i32> @llvm.hexagon.V6.vaddhw(<16 x i32>, <16 x i32>) #0
    946 declare <32 x i32> @llvm.hexagon.V6.vsububh(<16 x i32>, <16 x i32>) #0
    947 declare <32 x i32> @llvm.hexagon.V6.vsubuhw(<16 x i32>, <16 x i32>) #0
    948 declare <32 x i32> @llvm.hexagon.V6.vsubhw(<16 x i32>, <16 x i32>) #0
    949 declare <16 x i32> @llvm.hexagon.V6.vabsdiffub(<16 x i32>, <16 x i32>) #0
    950 declare <16 x i32> @llvm.hexagon.V6.vabsdiffh(<16 x i32>, <16 x i32>) #0
    951 declare <16 x i32> @llvm.hexagon.V6.vabsdiffuh(<16 x i32>, <16 x i32>) #0
    952 declare <16 x i32> @llvm.hexagon.V6.vabsdiffw(<16 x i32>, <16 x i32>) #0
    953 declare <16 x i32> @llvm.hexagon.V6.vavgub(<16 x i32>, <16 x i32>) #0
    954 declare <16 x i32> @llvm.hexagon.V6.vavguh(<16 x i32>, <16 x i32>) #0
    955 declare <16 x i32> @llvm.hexagon.V6.vavgh(<16 x i32>, <16 x i32>) #0
    956 declare <16 x i32> @llvm.hexagon.V6.vavgw(<16 x i32>, <16 x i32>) #0
    957 declare <16 x i32> @llvm.hexagon.V6.vnavgub(<16 x i32>, <16 x i32>) #0
    958 declare <16 x i32> @llvm.hexagon.V6.vnavgh(<16 x i32>, <16 x i32>) #0
    959 declare <16 x i32> @llvm.hexagon.V6.vnavgw(<16 x i32>, <16 x i32>) #0
    960 declare <16 x i32> @llvm.hexagon.V6.vavgubrnd(<16 x i32>, <16 x i32>) #0
    961 declare <16 x i32> @llvm.hexagon.V6.vavghrnd(<16 x i32>, <16 x i32>) #0
    962 declare <16 x i32> @llvm.hexagon.V6.vavguhrnd(<16 x i32>, <16 x i32>) #0
    963 declare <16 x i32> @llvm.hexagon.V6.vavgwrnd(<16 x i32>, <16 x i32>) #0
    964 declare <32 x i32> @llvm.hexagon.V6.vmpabuuv(<32 x i32>, <32 x i32>) #0
    965 declare <16 x i32> @llvm.hexagon.V6.vand(<16 x i32>, <16 x i32>) #0
    966 declare <16 x i32> @llvm.hexagon.V6.vminub(<16 x i32>, <16 x i32>) #0
    967 declare <16 x i32> @llvm.hexagon.V6.vminuh(<16 x i32>, <16 x i32>) #0
    968 declare <16 x i32> @llvm.hexagon.V6.vminh(<16 x i32>, <16 x i32>) #0
    969 declare <16 x i32> @llvm.hexagon.V6.vminw(<16 x i32>, <16 x i32>) #0
    970 declare <16 x i32> @llvm.hexagon.V6.vmaxub(<16 x i32>, <16 x i32>) #0
    971 declare <16 x i32> @llvm.hexagon.V6.vmaxuh(<16 x i32>, <16 x i32>) #0
    972 declare <16 x i32> @llvm.hexagon.V6.vmaxh(<16 x i32>, <16 x i32>) #0
    973 declare <16 x i32> @llvm.hexagon.V6.vmaxw(<16 x i32>, <16 x i32>) #0
    974 declare <16 x i32> @llvm.hexagon.V6.vdelta(<16 x i32>, <16 x i32>) #0
    975 declare <16 x i32> @llvm.hexagon.V6.vrdelta(<16 x i32>, <16 x i32>) #0
    976 declare <16 x i32> @llvm.hexagon.V6.vdealb4w(<16 x i32>, <16 x i32>) #0
    977 declare <16 x i32> @llvm.hexagon.V6.vshuffob(<16 x i32>, <16 x i32>) #0
    978 declare <16 x i32> @llvm.hexagon.V6.vshuffeb(<16 x i32>, <16 x i32>) #0
    979 declare <16 x i32> @llvm.hexagon.V6.vshufeh(<16 x i32>, <16 x i32>) #0
    980 declare <16 x i32> @llvm.hexagon.V6.vshufoh(<16 x i32>, <16 x i32>) #0
    981 declare <32 x i32> @llvm.hexagon.V6.vshufoeh(<16 x i32>, <16 x i32>) #0
    982 declare <32 x i32> @llvm.hexagon.V6.vcombine(<16 x i32>, <16 x i32>) #0
    983 declare <32 x i32> @llvm.hexagon.V6.vshufoeb(<16 x i32>, <16 x i32>) #0
    984 declare <16 x i32> @llvm.hexagon.V6.vsathub(<16 x i32>, <16 x i32>) #0
    985 declare <16 x i32> @llvm.hexagon.V6.vsatwh(<16 x i32>, <16 x i32>) #0
    986 declare <16 x i32> @llvm.hexagon.V6.vroundwh(<16 x i32>, <16 x i32>) #0
    987 declare <16 x i32> @llvm.hexagon.V6.vroundhb(<16 x i32>, <16 x i32>) #0
    988 declare <16 x i32> @llvm.hexagon.V6.vroundwuh(<16 x i32>, <16 x i32>) #0
    989 declare <16 x i32> @llvm.hexagon.V6.vroundhub(<16 x i32>, <16 x i32>) #0
    990 declare <16 x i32> @llvm.hexagon.V6.vasrwv(<16 x i32>, <16 x i32>) #0
    991 declare <16 x i32> @llvm.hexagon.V6.vlsrwv(<16 x i32>, <16 x i32>) #0
    992 declare <16 x i32> @llvm.hexagon.V6.vasrhv(<16 x i32>, <16 x i32>) #0
    993 declare <16 x i32> @llvm.hexagon.V6.vlsrhv(<16 x i32>, <16 x i32>) #0
    994 declare <16 x i32> @llvm.hexagon.V6.vaslwv(<16 x i32>, <16 x i32>) #0
    995 declare <16 x i32> @llvm.hexagon.V6.vaslhv(<16 x i32>, <16 x i32>) #0
    996 declare <16 x i32> @llvm.hexagon.V6.vaddb(<16 x i32>, <16 x i32>) #0
    997 declare <16 x i32> @llvm.hexagon.V6.vor(<16 x i32>, <16 x i32>) #0
    998 declare <16 x i32> @llvm.hexagon.V6.vxor(<16 x i32>, <16 x i32>) #0
    999 declare <16 x i32> @llvm.hexagon.V6.vaddw(<16 x i32>, <16 x i32>) #0
   1000 declare <16 x i32> @llvm.hexagon.V6.vaddubsat(<16 x i32>, <16 x i32>) #0
   1001 declare <16 x i32> @llvm.hexagon.V6.vaddh(<16 x i32>, <16 x i32>) #0
   1002 declare <16 x i32> @llvm.hexagon.V6.vaddbq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1003 declare <16 x i32> @llvm.hexagon.V6.vaddhq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1004 declare <16 x i32> @llvm.hexagon.V6.vaddwq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1005 declare <16 x i32> @llvm.hexagon.V6.vaddbnq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1006 declare <16 x i32> @llvm.hexagon.V6.vaddhnq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1007 declare <16 x i32> @llvm.hexagon.V6.vaddwnq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1008 declare <16 x i32> @llvm.hexagon.V6.vsubbq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1009 declare <16 x i32> @llvm.hexagon.V6.vsubhq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1010 declare <16 x i32> @llvm.hexagon.V6.vsubwq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1011 declare <16 x i32> @llvm.hexagon.V6.vsubbnq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1012 declare <16 x i32> @llvm.hexagon.V6.vsubhnq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1013 declare <16 x i32> @llvm.hexagon.V6.vsubwnq(<512 x i1>, <16 x i32>, <16 x i32>) #0
   1014 declare <16 x i32> @llvm.hexagon.V6.vabsh(<16 x i32>) #0
   1015 declare <16 x i32> @llvm.hexagon.V6.vabsh.sat(<16 x i32>) #0
   1016 declare <16 x i32> @llvm.hexagon.V6.vabsw(<16 x i32>) #0
   1017 declare <16 x i32> @llvm.hexagon.V6.vabsw.sat(<16 x i32>) #0
   1018 declare <16 x i32> @llvm.hexagon.V6.vnot(<16 x i32>) #0
   1019 declare <16 x i32> @llvm.hexagon.V6.vdealh(<16 x i32>) #0
   1020 declare <16 x i32> @llvm.hexagon.V6.vdealb(<16 x i32>) #0
   1021 declare <32 x i32> @llvm.hexagon.V6.vunpackub(<16 x i32>) #0
   1022 declare <32 x i32> @llvm.hexagon.V6.vunpackuh(<16 x i32>) #0
   1023 declare <32 x i32> @llvm.hexagon.V6.vunpackb(<16 x i32>) #0
   1024 declare <32 x i32> @llvm.hexagon.V6.vunpackh(<16 x i32>) #0
   1025 declare <16 x i32> @llvm.hexagon.V6.vshuffh(<16 x i32>) #0
   1026 declare <16 x i32> @llvm.hexagon.V6.vshuffb(<16 x i32>) #0
   1027 declare <32 x i32> @llvm.hexagon.V6.vzb(<16 x i32>) #0
   1028 declare <32 x i32> @llvm.hexagon.V6.vzh(<16 x i32>) #0
   1029 declare <32 x i32> @llvm.hexagon.V6.vsb(<16 x i32>) #0
   1030 declare <32 x i32> @llvm.hexagon.V6.vsh(<16 x i32>) #0
   1031 declare <16 x i32> @llvm.hexagon.V6.vassign(<16 x i32>) #0
   1032 
   1033 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvxv60,+hvx-length64b" }
   1034 
   1035