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