Home | History | Annotate | Download | only in Hexagon
      1 ; RUN: llc -march=hexagon < %s | FileCheck %s
      2 
      3 @c = external global <32 x i32>
      4 @d = external global <16 x i32>
      5 
      6 ; CHECK-LABEL: test1:
      7 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vtmpy(v{{[0-9]+}}:{{[0-9]+}}.b,r{{[0-9]+}}.b)
      8 define void @test1(<32 x i32> %a, i32 %b) #0 {
      9 entry:
     10   %0 = load <32 x i32>, <32 x i32>* @c, align 128
     11   %1 = tail call <32 x i32> @llvm.hexagon.V6.vtmpyb.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
     12   store <32 x i32> %1, <32 x i32>* @c, align 128
     13   ret void
     14 }
     15 
     16 ; CHECK-LABEL: test2:
     17 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vtmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
     18 define void @test2(<32 x i32> %a, i32 %b) #0 {
     19 entry:
     20   %0 = load <32 x i32>, <32 x i32>* @c, align 128
     21   %1 = tail call <32 x i32> @llvm.hexagon.V6.vtmpybus.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
     22   store <32 x i32> %1, <32 x i32>* @c, align 128
     23   ret void
     24 }
     25 
     26 ; CHECK-LABEL: test3:
     27 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vtmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
     28 define void @test3(<32 x i32> %a, i32 %b) #0 {
     29 entry:
     30   %0 = load <32 x i32>, <32 x i32>* @c, align 128
     31   %1 = tail call <32 x i32> @llvm.hexagon.V6.vtmpyhb.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
     32   store <32 x i32> %1, <32 x i32>* @c, align 128
     33   ret void
     34 }
     35 
     36 ; CHECK-LABEL: test4:
     37 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
     38 define void @test4(<16 x i32> %a, i32 %b) #0 {
     39 entry:
     40   %0 = load <16 x i32>, <16 x i32>* @d, align 64
     41   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhb.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
     42   store <16 x i32> %1, <16 x i32>* @d, align 64
     43   ret void
     44 }
     45 
     46 ; CHECK-LABEL: test5:
     47 ; CHECK: v{{[0-9]+}}.uw += vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
     48 define void @test5(<16 x i32> %a, i32 %b) #0 {
     49 entry:
     50   %0 = load <16 x i32>, <16 x i32>* @d, align 64
     51   %1 = tail call <16 x i32> @llvm.hexagon.V6.vrmpyub.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
     52   store <16 x i32> %1, <16 x i32>* @d, align 64
     53   ret void
     54 }
     55 
     56 ; CHECK-LABEL: test6:
     57 ; CHECK: v{{[0-9]+}}.w += vrmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
     58 define void @test6(<16 x i32> %a, i32 %b) #0 {
     59 entry:
     60   %0 = load <16 x i32>, <16 x i32>* @d, align 64
     61   %1 = tail call <16 x i32> @llvm.hexagon.V6.vrmpybus.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
     62   store <16 x i32> %1, <16 x i32>* @d, align 64
     63   ret void
     64 }
     65 
     66 ; CHECK-LABEL: test7:
     67 ; CHECK: v{{[0-9]+}}.h += vdmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
     68 define void @test7(<16 x i32> %a, i32 %b) #0 {
     69 entry:
     70   %0 = load <16 x i32>, <16 x i32>* @d, align 64
     71   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpybus.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
     72   store <16 x i32> %1, <16 x i32>* @d, align 64
     73   ret void
     74 }
     75 
     76 ; CHECK-LABEL: test8:
     77 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
     78 define void @test8(<32 x i32> %a, i32 %b) #0 {
     79 entry:
     80   %0 = load <32 x i32>, <32 x i32>* @c, align 128
     81   %1 = tail call <32 x i32> @llvm.hexagon.V6.vdmpybus.dv.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
     82   store <32 x i32> %1, <32 x i32>* @c, align 128
     83   ret void
     84 }
     85 
     86 ; CHECK-LABEL: test9:
     87 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.uh):sat
     88 define void @test9(<16 x i32> %a, i32 %b) #0 {
     89 entry:
     90   %0 = load <16 x i32>, <16 x i32>* @d, align 64
     91   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhsusat.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
     92   store <16 x i32> %1, <16 x i32>* @d, align 64
     93   ret void
     94 }
     95 
     96 ; CHECK-LABEL: test10:
     97 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.uh,#1):sat
     98 define void @test10(<32 x i32> %a, i32 %b) #0 {
     99 entry:
    100   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    101   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhsuisat.acc(<16 x i32> %0, <32 x i32> %a, i32 %b)
    102   store <16 x i32> %1, <16 x i32>* @d, align 64
    103   ret void
    104 }
    105 
    106 ; CHECK-LABEL: test11:
    107 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
    108 define void @test11(<32 x i32> %a, i32 %b) #0 {
    109 entry:
    110   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    111   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhisat.acc(<16 x i32> %0, <32 x i32> %a, i32 %b)
    112   store <16 x i32> %1, <16 x i32>* @d, align 64
    113   ret void
    114 }
    115 
    116 ; CHECK-LABEL: test12:
    117 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
    118 define void @test12(<16 x i32> %a, i32 %b) #0 {
    119 entry:
    120   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    121   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhsat.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
    122   store <16 x i32> %1, <16 x i32>* @d, align 64
    123   ret void
    124 }
    125 
    126 ; CHECK-LABEL: test13:
    127 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
    128 define void @test13(<32 x i32> %a, i32 %b) #0 {
    129 entry:
    130   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    131   %1 = tail call <32 x i32> @llvm.hexagon.V6.vdmpyhb.dv.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
    132   store <32 x i32> %1, <32 x i32>* @c, align 128
    133   ret void
    134 }
    135 
    136 ; CHECK-LABEL: test14:
    137 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.b)
    138 define void @test14(<16 x i32> %a, i32 %b) #0 {
    139 entry:
    140   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    141   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpybus.acc(<32 x i32> %0, <16 x i32> %a, i32 %b)
    142   store <32 x i32> %1, <32 x i32>* @c, align 128
    143   ret void
    144 }
    145 
    146 ; CHECK-LABEL: test15:
    147 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vmpa(v{{[0-9]+}}:{{[0-9]+}}.ub,r{{[0-9]+}}.b)
    148 define void @test15(<32 x i32> %a, i32 %b) #0 {
    149 entry:
    150   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    151   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpabus.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
    152   store <32 x i32> %1, <32 x i32>* @c, align 128
    153   ret void
    154 }
    155 
    156 ; CHECK-LABEL: test16:
    157 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vmpa(v{{[0-9]+}}:{{[0-9]+}}.h,r{{[0-9]+}}.b)
    158 define void @test16(<32 x i32> %a, i32 %b) #0 {
    159 entry:
    160   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    161   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpahb.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
    162   store <32 x i32> %1, <32 x i32>* @c, align 128
    163   ret void
    164 }
    165 
    166 ; CHECK-LABEL: test17:
    167 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vmpy(v{{[0-9]+}}.h,r{{[0-9]+}}.h):sat
    168 define void @test17(<16 x i32> %a, i32 %b) #0 {
    169 entry:
    170   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    171   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyhsat.acc(<32 x i32> %0, <16 x i32> %a, i32 %b)
    172   store <32 x i32> %1, <32 x i32>* @c, align 128
    173   ret void
    174 }
    175 
    176 ; CHECK-LABEL: test18:
    177 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw += vmpy(v{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
    178 define void @test18(<16 x i32> %a, i32 %b) #0 {
    179 entry:
    180   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    181   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyuh.acc(<32 x i32> %0, <16 x i32> %a, i32 %b)
    182   store <32 x i32> %1, <32 x i32>* @c, align 128
    183   ret void
    184 }
    185 
    186 ; CHECK-LABEL: test19:
    187 ; CHECK: v{{[0-9]+}}.w += vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.b)
    188 define void @test19(<16 x i32> %a, i32 %b) #0 {
    189 entry:
    190   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    191   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwb.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
    192   store <16 x i32> %1, <16 x i32>* @d, align 64
    193   ret void
    194 }
    195 
    196 ; CHECK-LABEL: test20:
    197 ; CHECK: v{{[0-9]+}}.w += vmpyi(v{{[0-9]+}}.w,r{{[0-9]+}}.h)
    198 define void @test20(<16 x i32> %a, i32 %b) #0 {
    199 entry:
    200   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    201   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiwh.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
    202   store <16 x i32> %1, <16 x i32>* @d, align 64
    203   ret void
    204 }
    205 
    206 ; CHECK-LABEL: test21:
    207 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw += vdsad(v{{[0-9]+}}:{{[0-9]+}}.uh,r{{[0-9]+}}.uh)
    208 define void @test21(<32 x i32> %a, i32 %b) #0 {
    209 entry:
    210   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    211   %1 = tail call <32 x i32> @llvm.hexagon.V6.vdsaduh.acc(<32 x i32> %0, <32 x i32> %a, i32 %b)
    212   store <32 x i32> %1, <32 x i32>* @c, align 128
    213   ret void
    214 }
    215 
    216 ; CHECK-LABEL: test22:
    217 ; CHECK: v{{[0-9]+}}.h += vmpyi(v{{[0-9]+}}.h,r{{[0-9]+}}.b)
    218 define void @test22(<16 x i32> %a, i32 %b) #0 {
    219 entry:
    220   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    221   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyihb.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
    222   store <16 x i32> %1, <16 x i32>* @d, align 64
    223   ret void
    224 }
    225 
    226 ; CHECK-LABEL: test23:
    227 ; CHECK: v{{[0-9]+}}.w += vasl(v{{[0-9]+}}.w,r{{[0-9]+}})
    228 define void @test23(<16 x i32> %a, i32 %b) #0 {
    229 entry:
    230   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    231   %1 = tail call <16 x i32> @llvm.hexagon.V6.vaslw.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
    232   store <16 x i32> %1, <16 x i32>* @d, align 64
    233   ret void
    234 }
    235 
    236 ; CHECK-LABEL: test24:
    237 ; CHECK: v{{[0-9]+}}.w += vasr(v{{[0-9]+}}.w,r{{[0-9]+}})
    238 define void @test24(<16 x i32> %a, i32 %b) #0 {
    239 entry:
    240   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    241   %1 = tail call <16 x i32> @llvm.hexagon.V6.vasrw.acc(<16 x i32> %0, <16 x i32> %a, i32 %b)
    242   store <16 x i32> %1, <16 x i32>* @d, align 64
    243   ret void
    244 }
    245 
    246 ; CHECK-LABEL: test25:
    247 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh += vmpy(v{{[0-9]+}}.ub,r{{[0-9]+}}.ub)
    248 define void @test25(<16 x i32> %a, i32 %b) #0 {
    249 entry:
    250   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    251   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyub.acc(<32 x i32> %0, <16 x i32> %a, i32 %b)
    252   store <32 x i32> %1, <32 x i32>* @c, align 128
    253   ret void
    254 }
    255 
    256 ; CHECK-LABEL: test26:
    257 ; CHECK: v{{[0-9]+}}.w += vdmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h):sat
    258 define void @test26(<16 x i32> %a, <16 x i32> %b) #0 {
    259 entry:
    260   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    261   %1 = tail call <16 x i32> @llvm.hexagon.V6.vdmpyhvsat.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    262   store <16 x i32> %1, <16 x i32>* @d, align 64
    263   ret void
    264 }
    265 
    266 ; CHECK-LABEL: test27:
    267 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.b)
    268 define void @test27(<16 x i32> %a, <16 x i32> %b) #0 {
    269 entry:
    270   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    271   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpybusv.acc(<32 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    272   store <32 x i32> %1, <32 x i32>* @c, align 128
    273   ret void
    274 }
    275 
    276 ; CHECK-LABEL: test28:
    277 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.h += vmpy(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    278 define void @test28(<16 x i32> %a, <16 x i32> %b) #0 {
    279 entry:
    280   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    281   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpybv.acc(<32 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    282   store <32 x i32> %1, <32 x i32>* @c, align 128
    283   ret void
    284 }
    285 
    286 ; CHECK-LABEL: test29:
    287 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.uh)
    288 define void @test29(<16 x i32> %a, <16 x i32> %b) #0 {
    289 entry:
    290   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    291   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyhus.acc(<32 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    292   store <32 x i32> %1, <32 x i32>* @c, align 128
    293   ret void
    294 }
    295 
    296 ; CHECK-LABEL: test30:
    297 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.w += vmpy(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    298 define void @test30(<16 x i32> %a, <16 x i32> %b) #0 {
    299 entry:
    300   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    301   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyhv.acc(<32 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    302   store <32 x i32> %1, <32 x i32>* @c, align 128
    303   ret void
    304 }
    305 
    306 ; CHECK-LABEL: test31:
    307 ; CHECK: v{{[0-9]+}}.w += vmpyie(v{{[0-9]+}}.w,v{{[0-9]+}}.h)
    308 define void @test31(<16 x i32> %a, <16 x i32> %b) #0 {
    309 entry:
    310   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    311   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiewh.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    312   store <16 x i32> %1, <16 x i32>* @d, align 64
    313   ret void
    314 }
    315 
    316 ; CHECK-LABEL: test32:
    317 ; CHECK: v{{[0-9]+}}.w += vmpyie(v{{[0-9]+}}.w,v{{[0-9]+}}.uh)
    318 define void @test32(<16 x i32> %a, <16 x i32> %b) #0 {
    319 entry:
    320   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    321   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyiewuh.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    322   store <16 x i32> %1, <16 x i32>* @d, align 64
    323   ret void
    324 }
    325 
    326 ; CHECK-LABEL: test33:
    327 ; CHECK: v{{[0-9]+}}.h += vmpyi(v{{[0-9]+}}.h,v{{[0-9]+}}.h)
    328 define void @test33(<16 x i32> %a, <16 x i32> %b) #0 {
    329 entry:
    330   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    331   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyih.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    332   store <16 x i32> %1, <16 x i32>* @d, align 64
    333   ret void
    334 }
    335 
    336 ; CHECK-LABEL: test34:
    337 ; CHECK: v{{[0-9]+}}.w += vmpyo(v{{[0-9]+}}.w,v{{[0-9]+}}.h):<<1:rnd:sat:shift
    338 define void @test34(<16 x i32> %a, <16 x i32> %b) #0 {
    339 entry:
    340   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    341   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyowh.rnd.sacc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    342   store <16 x i32> %1, <16 x i32>* @d, align 64
    343   ret void
    344 }
    345 
    346 ; CHECK-LABEL: test35:
    347 ; CHECK: v{{[0-9]+}}.w += vmpyo(v{{[0-9]+}}.w,v{{[0-9]+}}.h):<<1:sat:shift
    348 define void @test35(<16 x i32> %a, <16 x i32> %b) #0 {
    349 entry:
    350   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    351   %1 = tail call <16 x i32> @llvm.hexagon.V6.vmpyowh.sacc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    352   store <16 x i32> %1, <16 x i32>* @d, align 64
    353   ret void
    354 }
    355 
    356 ; CHECK-LABEL: test36:
    357 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uh += vmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    358 define void @test36(<16 x i32> %a, <16 x i32> %b) #0 {
    359 entry:
    360   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    361   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyubv.acc(<32 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    362   store <32 x i32> %1, <32 x i32>* @c, align 128
    363   ret void
    364 }
    365 
    366 ; CHECK-LABEL: test37:
    367 ; CHECK: v{{[0-9]+}}:{{[0-9]+}}.uw += vmpy(v{{[0-9]+}}.uh,v{{[0-9]+}}.uh)
    368 define void @test37(<16 x i32> %a, <16 x i32> %b) #0 {
    369 entry:
    370   %0 = load <32 x i32>, <32 x i32>* @c, align 128
    371   %1 = tail call <32 x i32> @llvm.hexagon.V6.vmpyuhv.acc(<32 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    372   store <32 x i32> %1, <32 x i32>* @c, align 128
    373   ret void
    374 }
    375 
    376 ; CHECK-LABEL: test38:
    377 ; CHECK: v{{[0-9]+}}.w += vrmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.b)
    378 define void @test38(<16 x i32> %a, <16 x i32> %b) #0 {
    379 entry:
    380   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    381   %1 = tail call <16 x i32> @llvm.hexagon.V6.vrmpybusv.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    382   store <16 x i32> %1, <16 x i32>* @d, align 64
    383   ret void
    384 }
    385 
    386 ; CHECK-LABEL: test39:
    387 ; CHECK: v{{[0-9]+}}.w += vrmpy(v{{[0-9]+}}.b,v{{[0-9]+}}.b)
    388 define void @test39(<16 x i32> %a, <16 x i32> %b) #0 {
    389 entry:
    390   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    391   %1 = tail call <16 x i32> @llvm.hexagon.V6.vrmpybv.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    392   store <16 x i32> %1, <16 x i32>* @d, align 64
    393   ret void
    394 }
    395 
    396 ; CHECK-LABEL: test40:
    397 ; CHECK: v{{[0-9]+}}.uw += vrmpy(v{{[0-9]+}}.ub,v{{[0-9]+}}.ub)
    398 define void @test40(<16 x i32> %a, <16 x i32> %b) #0 {
    399 entry:
    400   %0 = load <16 x i32>, <16 x i32>* @d, align 64
    401   %1 = tail call <16 x i32> @llvm.hexagon.V6.vrmpyubv.acc(<16 x i32> %0, <16 x i32> %a, <16 x i32> %b)
    402   store <16 x i32> %1, <16 x i32>* @d, align 64
    403   ret void
    404 }
    405 
    406 declare <32 x i32> @llvm.hexagon.V6.vtmpyb.acc(<32 x i32>, <32 x i32>, i32) #0
    407 declare <32 x i32> @llvm.hexagon.V6.vtmpybus.acc(<32 x i32>, <32 x i32>, i32) #0
    408 declare <32 x i32> @llvm.hexagon.V6.vtmpyhb.acc(<32 x i32>, <32 x i32>, i32) #0
    409 declare <16 x i32> @llvm.hexagon.V6.vdmpyhb.acc(<16 x i32>, <16 x i32>, i32) #0
    410 declare <16 x i32> @llvm.hexagon.V6.vrmpyub.acc(<16 x i32>, <16 x i32>, i32) #0
    411 declare <16 x i32> @llvm.hexagon.V6.vrmpybus.acc(<16 x i32>, <16 x i32>, i32) #0
    412 declare <16 x i32> @llvm.hexagon.V6.vdmpybus.acc(<16 x i32>, <16 x i32>, i32) #0
    413 declare <32 x i32> @llvm.hexagon.V6.vdmpybus.dv.acc(<32 x i32>, <32 x i32>, i32) #0
    414 declare <16 x i32> @llvm.hexagon.V6.vdmpyhsusat.acc(<16 x i32>, <16 x i32>, i32) #0
    415 declare <16 x i32> @llvm.hexagon.V6.vdmpyhsuisat.acc(<16 x i32>, <32 x i32>, i32) #0
    416 declare <16 x i32> @llvm.hexagon.V6.vdmpyhisat.acc(<16 x i32>, <32 x i32>, i32) #0
    417 declare <16 x i32> @llvm.hexagon.V6.vdmpyhsat.acc(<16 x i32>, <16 x i32>, i32) #0
    418 declare <32 x i32> @llvm.hexagon.V6.vdmpyhb.dv.acc(<32 x i32>, <32 x i32>, i32) #0
    419 declare <32 x i32> @llvm.hexagon.V6.vmpybus.acc(<32 x i32>, <16 x i32>, i32) #0
    420 declare <32 x i32> @llvm.hexagon.V6.vmpabus.acc(<32 x i32>, <32 x i32>, i32) #0
    421 declare <32 x i32> @llvm.hexagon.V6.vmpahb.acc(<32 x i32>, <32 x i32>, i32) #0
    422 declare <32 x i32> @llvm.hexagon.V6.vmpyhsat.acc(<32 x i32>, <16 x i32>, i32) #0
    423 declare <32 x i32> @llvm.hexagon.V6.vmpyuh.acc(<32 x i32>, <16 x i32>, i32) #0
    424 declare <16 x i32> @llvm.hexagon.V6.vmpyiwb.acc(<16 x i32>, <16 x i32>, i32) #0
    425 declare <16 x i32> @llvm.hexagon.V6.vmpyiwh.acc(<16 x i32>, <16 x i32>, i32) #0
    426 declare <32 x i32> @llvm.hexagon.V6.vdsaduh.acc(<32 x i32>, <32 x i32>, i32) #0
    427 declare <16 x i32> @llvm.hexagon.V6.vmpyihb.acc(<16 x i32>, <16 x i32>, i32) #0
    428 declare <16 x i32> @llvm.hexagon.V6.vaslw.acc(<16 x i32>, <16 x i32>, i32) #0
    429 declare <16 x i32> @llvm.hexagon.V6.vasrw.acc(<16 x i32>, <16 x i32>, i32) #0
    430 declare <32 x i32> @llvm.hexagon.V6.vmpyub.acc(<32 x i32>, <16 x i32>, i32) #0
    431 declare <16 x i32> @llvm.hexagon.V6.vdmpyhvsat.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    432 declare <32 x i32> @llvm.hexagon.V6.vmpybusv.acc(<32 x i32>, <16 x i32>, <16 x i32>) #0
    433 declare <32 x i32> @llvm.hexagon.V6.vmpybv.acc(<32 x i32>, <16 x i32>, <16 x i32>) #0
    434 declare <32 x i32> @llvm.hexagon.V6.vmpyhus.acc(<32 x i32>, <16 x i32>, <16 x i32>) #0
    435 declare <32 x i32> @llvm.hexagon.V6.vmpyhv.acc(<32 x i32>, <16 x i32>, <16 x i32>) #0
    436 declare <16 x i32> @llvm.hexagon.V6.vmpyiewh.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    437 declare <16 x i32> @llvm.hexagon.V6.vmpyiewuh.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    438 declare <16 x i32> @llvm.hexagon.V6.vmpyih.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    439 declare <16 x i32> @llvm.hexagon.V6.vmpyowh.rnd.sacc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    440 declare <16 x i32> @llvm.hexagon.V6.vmpyowh.sacc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    441 declare <32 x i32> @llvm.hexagon.V6.vmpyubv.acc(<32 x i32>, <16 x i32>, <16 x i32>) #0
    442 declare <32 x i32> @llvm.hexagon.V6.vmpyuhv.acc(<32 x i32>, <16 x i32>, <16 x i32>) #0
    443 declare <16 x i32> @llvm.hexagon.V6.vrmpybusv.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    444 declare <16 x i32> @llvm.hexagon.V6.vrmpybv.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    445 declare <16 x i32> @llvm.hexagon.V6.vrmpyubv.acc(<16 x i32>, <16 x i32>, <16 x i32>) #0
    446 
    447 attributes #0 = { nounwind readnone "target-cpu"="hexagonv60" "target-features"="+hvx60,+hvx-length64b" }
    448