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