1; RUN: llc -march=hexagon -mcpu=hexagonv5 -O0 < %s | FileCheck %s 2; RUN: llc -march=hexagon -mcpu=hexagonv5 -O0 < %s | \ 3; RUN: FileCheck -check-prefix=CHECK-CALL %s 4; Hexagon Programmer's Reference Manual 11.10.1 XTYPE/ALU 5 6; CHECK-CALL-NOT: call 7 8; Absolute value doubleword 9declare i64 @llvm.hexagon.A2.absp(i64) 10define i64 @A2_absp(i64 %a) { 11 %z = call i64 @llvm.hexagon.A2.absp(i64 %a) 12 ret i64 %z 13} 14; CHECK: = abs({{.*}}) 15 16; Absolute value word 17declare i32 @llvm.hexagon.A2.abs(i32) 18define i32 @A2_abs(i32 %a) { 19 %z = call i32 @llvm.hexagon.A2.abs(i32 %a) 20 ret i32 %z 21} 22; CHECK: = abs({{.*}}) 23 24declare i32 @llvm.hexagon.A2.abssat(i32) 25define i32 @A2_abssat(i32 %a) { 26 %z = call i32 @llvm.hexagon.A2.abssat(i32 %a) 27 ret i32 %z 28} 29; CHECK: = abs({{.*}}):sat 30 31; Add and accumulate 32declare i32 @llvm.hexagon.S4.addaddi(i32, i32, i32) 33define i32 @S4_addaddi(i32 %a, i32 %b) { 34 %z = call i32 @llvm.hexagon.S4.addaddi(i32 %a, i32 %b, i32 0) 35 ret i32 %z 36} 37; CHECK: = add({{.*}},add({{.*}},#0)) 38 39declare i32 @llvm.hexagon.S4.subaddi(i32, i32, i32) 40define i32 @S4_subaddi(i32 %a, i32 %b) { 41 %z = call i32 @llvm.hexagon.S4.subaddi(i32 %a, i32 0, i32 %b) 42 ret i32 %z 43} 44; CHECK: = add({{.*}},sub(#0,{{.*}})) 45 46declare i32 @llvm.hexagon.M2.accii(i32, i32, i32) 47define i32 @M2_accii(i32 %a, i32 %b) { 48 %z = call i32 @llvm.hexagon.M2.accii(i32 %a, i32 %b, i32 0) 49 ret i32 %z 50} 51; CHECK: += add({{.*}},#0) 52 53declare i32 @llvm.hexagon.M2.naccii(i32, i32, i32) 54define i32 @M2_naccii(i32 %a, i32 %b) { 55 %z = call i32 @llvm.hexagon.M2.naccii(i32 %a, i32 %b, i32 0) 56 ret i32 %z 57} 58; CHECK: -= add({{.*}},#0) 59 60declare i32 @llvm.hexagon.M2.acci(i32, i32, i32) 61define i32 @M2_acci(i32 %a, i32 %b, i32 %c) { 62 %z = call i32 @llvm.hexagon.M2.acci(i32 %a, i32 %b, i32 %c) 63 ret i32 %z 64} 65; CHECK: += add({{.*}},{{.*}}) 66 67declare i32 @llvm.hexagon.M2.nacci(i32, i32, i32) 68define i32 @M2_nacci(i32 %a, i32 %b, i32 %c) { 69 %z = call i32 @llvm.hexagon.M2.nacci(i32 %a, i32 %b, i32 %c) 70 ret i32 %z 71} 72; CHECK: -= add({{.*}},{{.*}}) 73 74; Add doublewords 75declare i64 @llvm.hexagon.A2.addp(i64, i64) 76define i64 @A2_addp(i64 %a, i64 %b) { 77 %z = call i64 @llvm.hexagon.A2.addp(i64 %a, i64 %b) 78 ret i64 %z 79} 80; CHECK: = add({{.*}},{{.*}}) 81 82declare i64 @llvm.hexagon.A2.addpsat(i64, i64) 83define i64 @A2_addpsat(i64 %a, i64 %b) { 84 %z = call i64 @llvm.hexagon.A2.addpsat(i64 %a, i64 %b) 85 ret i64 %z 86} 87; CHECK: = add({{.*}},{{.*}}):sat 88 89; Add halfword 90declare i32 @llvm.hexagon.A2.addh.l16.ll(i32, i32) 91define i32 @A2_addh_l16_ll(i32 %a, i32 %b) { 92 %z = call i32 @llvm.hexagon.A2.addh.l16.ll(i32 %a, i32 %b) 93 ret i32 %z 94} 95; CHECK: = add({{.*}}.l,{{.*}}.l) 96 97declare i32 @llvm.hexagon.A2.addh.l16.hl(i32, i32) 98define i32 @A2_addh_l16_hl(i32 %a, i32 %b) { 99 %z = call i32 @llvm.hexagon.A2.addh.l16.hl(i32 %a, i32 %b) 100 ret i32 %z 101} 102; CHECK: = add({{.*}}.l,{{.*}}.h) 103 104declare i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32, i32) 105define i32 @A2_addh_l16_sat.ll(i32 %a, i32 %b) { 106 %z = call i32 @llvm.hexagon.A2.addh.l16.sat.ll(i32 %a, i32 %b) 107 ret i32 %z 108} 109; CHECK: = add({{.*}}.l,{{.*}}.l):sat 110 111declare i32 @llvm.hexagon.A2.addh.l16.sat.hl(i32, i32) 112define i32 @A2_addh_l16_sat.hl(i32 %a, i32 %b) { 113 %z = call i32 @llvm.hexagon.A2.addh.l16.sat.hl(i32 %a, i32 %b) 114 ret i32 %z 115} 116; CHECK: = add({{.*}}.l,{{.*}}.h):sat 117 118declare i32 @llvm.hexagon.A2.addh.h16.ll(i32, i32) 119define i32 @A2_addh_h16_ll(i32 %a, i32 %b) { 120 %z = call i32 @llvm.hexagon.A2.addh.h16.ll(i32 %a, i32 %b) 121 ret i32 %z 122} 123; CHECK: = add({{.*}}.l,{{.*}}.l):<<16 124 125declare i32 @llvm.hexagon.A2.addh.h16.lh(i32, i32) 126define i32 @A2_addh_h16_lh(i32 %a, i32 %b) { 127 %z = call i32 @llvm.hexagon.A2.addh.h16.lh(i32 %a, i32 %b) 128 ret i32 %z 129} 130; CHECK: = add({{.*}}.l,{{.*}}.h):<<16 131 132declare i32 @llvm.hexagon.A2.addh.h16.hl(i32, i32) 133define i32 @A2_addh_h16_hl(i32 %a, i32 %b) { 134 %z = call i32 @llvm.hexagon.A2.addh.h16.hl(i32 %a, i32 %b) 135 ret i32 %z 136} 137; CHECK: = add({{.*}}.h,{{.*}}.l):<<16 138 139declare i32 @llvm.hexagon.A2.addh.h16.hh(i32, i32) 140define i32 @A2_addh_h16_hh(i32 %a, i32 %b) { 141 %z = call i32 @llvm.hexagon.A2.addh.h16.hh(i32 %a, i32 %b) 142 ret i32 %z 143} 144; CHECK: = add({{.*}}.h,{{.*}}.h):<<16 145 146declare i32 @llvm.hexagon.A2.addh.h16.sat.ll(i32, i32) 147define i32 @A2_addh_h16_sat_ll(i32 %a, i32 %b) { 148 %z = call i32 @llvm.hexagon.A2.addh.h16.sat.ll(i32 %a, i32 %b) 149 ret i32 %z 150} 151; CHECK: = add({{.*}}.l,{{.*}}.l):sat:<<16 152 153declare i32 @llvm.hexagon.A2.addh.h16.sat.lh(i32, i32) 154define i32 @A2_addh_h16_sat_lh(i32 %a, i32 %b) { 155 %z = call i32 @llvm.hexagon.A2.addh.h16.sat.lh(i32 %a, i32 %b) 156 ret i32 %z 157} 158; CHECK: = add({{.*}}.l,{{.*}}.h):sat:<<16 159 160declare i32 @llvm.hexagon.A2.addh.h16.sat.hl(i32, i32) 161define i32 @A2_addh_h16_sat_hl(i32 %a, i32 %b) { 162 %z = call i32 @llvm.hexagon.A2.addh.h16.sat.hl(i32 %a, i32 %b) 163 ret i32 %z 164} 165; CHECK: = add({{.*}}.h,{{.*}}.l):sat:<<16 166 167declare i32 @llvm.hexagon.A2.addh.h16.sat.hh(i32, i32) 168define i32 @A2_addh_h16_sat_hh(i32 %a, i32 %b) { 169 %z = call i32 @llvm.hexagon.A2.addh.h16.sat.hh(i32 %a, i32 %b) 170 ret i32 %z 171} 172; CHECK: = add({{.*}}.h,{{.*}}.h):sat:<<16 173 174; Logical doublewords 175declare i64 @llvm.hexagon.A2.notp(i64) 176define i64 @A2_notp(i64 %a) { 177 %z = call i64 @llvm.hexagon.A2.notp(i64 %a) 178 ret i64 %z 179} 180; CHECK: = not({{.*}}) 181 182declare i64 @llvm.hexagon.A2.andp(i64, i64) 183define i64 @A2_andp(i64 %a, i64 %b) { 184 %z = call i64 @llvm.hexagon.A2.andp(i64 %a, i64 %b) 185 ret i64 %z 186} 187; CHECK: = and({{.*}},{{.*}}) 188 189declare i64 @llvm.hexagon.A4.andnp(i64, i64) 190define i64 @A2_andnp(i64 %a, i64 %b) { 191 %z = call i64 @llvm.hexagon.A4.andnp(i64 %a, i64 %b) 192 ret i64 %z 193} 194; CHECK: = and({{.*}},~{{.*}}) 195 196declare i64 @llvm.hexagon.A2.orp(i64, i64) 197define i64 @A2_orp(i64 %a, i64 %b) { 198 %z = call i64 @llvm.hexagon.A2.orp(i64 %a, i64 %b) 199 ret i64 %z 200} 201; CHECK: = or({{.*}},{{.*}}) 202 203declare i64 @llvm.hexagon.A4.ornp(i64, i64) 204define i64 @A2_ornp(i64 %a, i64 %b) { 205 %z = call i64 @llvm.hexagon.A4.ornp(i64 %a, i64 %b) 206 ret i64 %z 207} 208; CHECK: = or({{.*}},~{{.*}}) 209 210declare i64 @llvm.hexagon.A2.xorp(i64, i64) 211define i64 @A2_xorp(i64 %a, i64 %b) { 212 %z = call i64 @llvm.hexagon.A2.xorp(i64 %a, i64 %b) 213 ret i64 %z 214} 215; CHECK: = xor({{.*}},{{.*}}) 216 217; Logical-logical doublewords 218declare i64 @llvm.hexagon.M4.xor.xacc(i64, i64, i64) 219define i64 @M4_xor_xacc(i64 %a, i64 %b, i64 %c) { 220 %z = call i64 @llvm.hexagon.M4.xor.xacc(i64 %a, i64 %b, i64 %c) 221 ret i64 %z 222} 223; CHECK: ^= xor({{.*}},{{.*}}) 224 225; Logical-logical words 226declare i32 @llvm.hexagon.S4.or.andi(i32, i32, i32) 227define i32 @S4_or_andi(i32 %a, i32 %b) { 228 %z = call i32 @llvm.hexagon.S4.or.andi(i32 %a, i32 %b, i32 0) 229 ret i32 %z 230} 231; CHECK: |= and({{.*}},#0) 232 233declare i32 @llvm.hexagon.S4.or.andix(i32, i32, i32) 234define i32 @S4_or_andix(i32 %a, i32 %b) { 235 %z = call i32 @llvm.hexagon.S4.or.andix(i32 %a, i32 %b, i32 0) 236 ret i32 %z 237} 238; CHECK: = or({{.*}},and({{.*}},#0)) 239 240declare i32 @llvm.hexagon.M4.or.andn(i32, i32, i32) 241define i32 @M4_or_andn(i32 %a, i32 %b, i32 %c) { 242 %z = call i32 @llvm.hexagon.M4.or.andn(i32 %a, i32 %b, i32 %c) 243 ret i32 %z 244} 245; CHECK: |= and({{.*}},~{{.*}}) 246 247declare i32 @llvm.hexagon.M4.and.andn(i32, i32, i32) 248define i32 @M4_and_andn(i32 %a, i32 %b, i32 %c) { 249 %z = call i32 @llvm.hexagon.M4.and.andn(i32 %a, i32 %b, i32 %c) 250 ret i32 %z 251} 252; CHECK: &= and({{.*}},~{{.*}}) 253 254declare i32 @llvm.hexagon.M4.xor.andn(i32, i32, i32) 255define i32 @M4_xor_andn(i32 %a, i32 %b, i32 %c) { 256 %z = call i32 @llvm.hexagon.M4.xor.andn(i32 %a, i32 %b, i32 %c) 257 ret i32 %z 258} 259; CHECK: ^= and({{.*}},~{{.*}}) 260 261declare i32 @llvm.hexagon.M4.and.and(i32, i32, i32) 262define i32 @M4_and_and(i32 %a, i32 %b, i32 %c) { 263 %z = call i32 @llvm.hexagon.M4.and.and(i32 %a, i32 %b, i32 %c) 264 ret i32 %z 265} 266; CHECK: &= and({{.*}},{{.*}}) 267 268declare i32 @llvm.hexagon.M4.and.or(i32, i32, i32) 269define i32 @M4_and_or(i32 %a, i32 %b, i32 %c) { 270 %z = call i32 @llvm.hexagon.M4.and.or(i32 %a, i32 %b, i32 %c) 271 ret i32 %z 272} 273; CHECK: &= or({{.*}},{{.*}}) 274 275declare i32 @llvm.hexagon.M4.and.xor(i32, i32, i32) 276define i32 @M4_and_xor(i32 %a, i32 %b, i32 %c) { 277 %z = call i32 @llvm.hexagon.M4.and.xor(i32 %a, i32 %b, i32 %c) 278 ret i32 %z 279} 280; CHECK: &= xor({{.*}},{{.*}}) 281 282declare i32 @llvm.hexagon.M4.or.and(i32, i32, i32) 283define i32 @M4_or_and(i32 %a, i32 %b, i32 %c) { 284 %z = call i32 @llvm.hexagon.M4.or.and(i32 %a, i32 %b, i32 %c) 285 ret i32 %z 286} 287; CHECK: |= and({{.*}},{{.*}}) 288 289declare i32 @llvm.hexagon.M4.or.or(i32, i32, i32) 290define i32 @M4_or_or(i32 %a, i32 %b, i32 %c) { 291 %z = call i32 @llvm.hexagon.M4.or.or(i32 %a, i32 %b, i32 %c) 292 ret i32 %z 293} 294; CHECK: |= or({{.*}},{{.*}}) 295 296declare i32 @llvm.hexagon.M4.or.xor(i32, i32, i32) 297define i32 @M4_or_xor(i32 %a, i32 %b, i32 %c) { 298 %z = call i32 @llvm.hexagon.M4.or.xor(i32 %a, i32 %b, i32 %c) 299 ret i32 %z 300} 301; CHECK: |= xor({{.*}},{{.*}}) 302 303declare i32 @llvm.hexagon.M4.xor.and(i32, i32, i32) 304define i32 @M4_xor_and(i32 %a, i32 %b, i32 %c) { 305 %z = call i32 @llvm.hexagon.M4.xor.and(i32 %a, i32 %b, i32 %c) 306 ret i32 %z 307} 308; CHECK: ^= and({{.*}},{{.*}}) 309 310declare i32 @llvm.hexagon.M4.xor.or(i32, i32, i32) 311define i32 @M4_xor_or(i32 %a, i32 %b, i32 %c) { 312 %z = call i32 @llvm.hexagon.M4.xor.or(i32 %a, i32 %b, i32 %c) 313 ret i32 %z 314} 315; CHECK: ^= or({{.*}},{{.*}}) 316 317; Maximum words 318declare i32 @llvm.hexagon.A2.max(i32, i32) 319define i32 @A2_max(i32 %a, i32 %b) { 320 %z = call i32 @llvm.hexagon.A2.max(i32 %a, i32 %b) 321 ret i32 %z 322} 323; CHECK: = max({{.*}},{{.*}}) 324 325declare i32 @llvm.hexagon.A2.maxu(i32, i32) 326define i32 @A2_maxu(i32 %a, i32 %b) { 327 %z = call i32 @llvm.hexagon.A2.maxu(i32 %a, i32 %b) 328 ret i32 %z 329} 330; CHECK: = maxu({{.*}},{{.*}}) 331 332; Maximum doublewords 333declare i64 @llvm.hexagon.A2.maxp(i64, i64) 334define i64 @A2_maxp(i64 %a, i64 %b) { 335 %z = call i64 @llvm.hexagon.A2.maxp(i64 %a, i64 %b) 336 ret i64 %z 337} 338; CHECK: = max({{.*}},{{.*}}) 339 340declare i64 @llvm.hexagon.A2.maxup(i64, i64) 341define i64 @A2_maxup(i64 %a, i64 %b) { 342 %z = call i64 @llvm.hexagon.A2.maxup(i64 %a, i64 %b) 343 ret i64 %z 344} 345; CHECK: = maxu({{.*}},{{.*}}) 346 347; Minimum words 348declare i32 @llvm.hexagon.A2.min(i32, i32) 349define i32 @A2_min(i32 %a, i32 %b) { 350 %z = call i32 @llvm.hexagon.A2.min(i32 %a, i32 %b) 351 ret i32 %z 352} 353; CHECK: = min({{.*}},{{.*}}) 354 355declare i32 @llvm.hexagon.A2.minu(i32, i32) 356define i32 @A2_minu(i32 %a, i32 %b) { 357 %z = call i32 @llvm.hexagon.A2.minu(i32 %a, i32 %b) 358 ret i32 %z 359} 360; CHECK: = minu({{.*}},{{.*}}) 361 362; Minimum doublewords 363declare i64 @llvm.hexagon.A2.minp(i64, i64) 364define i64 @A2_minp(i64 %a, i64 %b) { 365 %z = call i64 @llvm.hexagon.A2.minp(i64 %a, i64 %b) 366 ret i64 %z 367} 368; CHECK: = min({{.*}},{{.*}}) 369 370declare i64 @llvm.hexagon.A2.minup(i64, i64) 371define i64 @A2_minup(i64 %a, i64 %b) { 372 %z = call i64 @llvm.hexagon.A2.minup(i64 %a, i64 %b) 373 ret i64 %z 374} 375; CHECK: = minu({{.*}},{{.*}}) 376 377; Module wrap 378declare i32 @llvm.hexagon.A4.modwrapu(i32, i32) 379define i32 @A4_modwrapu(i32 %a, i32 %b) { 380 %z = call i32 @llvm.hexagon.A4.modwrapu(i32 %a, i32 %b) 381 ret i32 %z 382} 383; CHECK: = modwrap({{.*}},{{.*}}) 384 385; Negate 386declare i64 @llvm.hexagon.A2.negp(i64) 387define i64 @A2_negp(i64 %a) { 388 %z = call i64 @llvm.hexagon.A2.negp(i64 %a) 389 ret i64 %z 390} 391; CHECK: = neg({{.*}}) 392 393declare i32 @llvm.hexagon.A2.negsat(i32) 394define i32 @A2_negsat(i32 %a) { 395 %z = call i32 @llvm.hexagon.A2.negsat(i32 %a) 396 ret i32 %z 397} 398; CHECK: = neg({{.*}}):sat 399 400; Round 401declare i32 @llvm.hexagon.A2.roundsat(i64) 402define i32 @A2_roundsat(i64 %a) { 403 %z = call i32 @llvm.hexagon.A2.roundsat(i64 %a) 404 ret i32 %z 405} 406; CHECK: = round({{.*}}):sat 407 408declare i32 @llvm.hexagon.A4.cround.ri(i32, i32) 409define i32 @A4_cround_ri(i32 %a) { 410 %z = call i32 @llvm.hexagon.A4.cround.ri(i32 %a, i32 0) 411 ret i32 %z 412} 413; CHECK: = cround({{.*}},#0) 414 415declare i32 @llvm.hexagon.A4.round.ri(i32, i32) 416define i32 @A4_round_ri(i32 %a) { 417 %z = call i32 @llvm.hexagon.A4.round.ri(i32 %a, i32 0) 418 ret i32 %z 419} 420; CHECK: = round({{.*}},#0) 421 422declare i32 @llvm.hexagon.A4.round.ri.sat(i32, i32) 423define i32 @A4_round_ri_sat(i32 %a) { 424 %z = call i32 @llvm.hexagon.A4.round.ri.sat(i32 %a, i32 0) 425 ret i32 %z 426} 427; CHECK: = round({{.*}},#0):sat 428 429declare i32 @llvm.hexagon.A4.cround.rr(i32, i32) 430define i32 @A4_cround_rr(i32 %a, i32 %b) { 431 %z = call i32 @llvm.hexagon.A4.cround.rr(i32 %a, i32 %b) 432 ret i32 %z 433} 434; CHECK: = cround({{.*}},{{.*}}) 435 436declare i32 @llvm.hexagon.A4.round.rr(i32, i32) 437define i32 @A4_round_rr(i32 %a, i32 %b) { 438 %z = call i32 @llvm.hexagon.A4.round.rr(i32 %a, i32 %b) 439 ret i32 %z 440} 441; CHECK: = round({{.*}},{{.*}}) 442 443declare i32 @llvm.hexagon.A4.round.rr.sat(i32, i32) 444define i32 @A4_round_rr_sat(i32 %a, i32 %b) { 445 %z = call i32 @llvm.hexagon.A4.round.rr.sat(i32 %a, i32 %b) 446 ret i32 %z 447} 448; CHECK: = round({{.*}},{{.*}}):sat 449 450; Subtract doublewords 451declare i64 @llvm.hexagon.A2.subp(i64, i64) 452define i64 @A2_subp(i64 %a, i64 %b) { 453 %z = call i64 @llvm.hexagon.A2.subp(i64 %a, i64 %b) 454 ret i64 %z 455} 456; CHECK: = sub({{.*}},{{.*}}) 457 458; Subtract and accumulate 459declare i32 @llvm.hexagon.M2.subacc(i32, i32, i32) 460define i32 @M2_subacc(i32 %a, i32 %b, i32 %c) { 461 %z = call i32 @llvm.hexagon.M2.subacc(i32 %a, i32 %b, i32 %c) 462 ret i32 %z 463} 464; CHECK: += sub({{.*}},{{.*}}) 465 466; Subtract halfwords 467declare i32 @llvm.hexagon.A2.subh.l16.ll(i32, i32) 468define i32 @A2_subh_l16_ll(i32 %a, i32 %b) { 469 %z = call i32 @llvm.hexagon.A2.subh.l16.ll(i32 %a, i32 %b) 470 ret i32 %z 471} 472; CHECK: = sub({{.*}}.l,{{.*}}.l) 473 474declare i32 @llvm.hexagon.A2.subh.l16.hl(i32, i32) 475define i32 @A2_subh_l16_hl(i32 %a, i32 %b) { 476 %z = call i32 @llvm.hexagon.A2.subh.l16.hl(i32 %a, i32 %b) 477 ret i32 %z 478} 479; CHECK: = sub({{.*}}.l,{{.*}}.h) 480 481declare i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32, i32) 482define i32 @A2_subh_l16_sat.ll(i32 %a, i32 %b) { 483 %z = call i32 @llvm.hexagon.A2.subh.l16.sat.ll(i32 %a, i32 %b) 484 ret i32 %z 485} 486; CHECK: = sub({{.*}}.l,{{.*}}.l):sat 487 488declare i32 @llvm.hexagon.A2.subh.l16.sat.hl(i32, i32) 489define i32 @A2_subh_l16_sat.hl(i32 %a, i32 %b) { 490 %z = call i32 @llvm.hexagon.A2.subh.l16.sat.hl(i32 %a, i32 %b) 491 ret i32 %z 492} 493; CHECK: = sub({{.*}}.l,{{.*}}.h):sat 494 495declare i32 @llvm.hexagon.A2.subh.h16.ll(i32, i32) 496define i32 @A2_subh_h16_ll(i32 %a, i32 %b) { 497 %z = call i32 @llvm.hexagon.A2.subh.h16.ll(i32 %a, i32 %b) 498 ret i32 %z 499} 500; CHECK: = sub({{.*}}.l,{{.*}}.l):<<16 501 502declare i32 @llvm.hexagon.A2.subh.h16.lh(i32, i32) 503define i32 @A2_subh_h16_lh(i32 %a, i32 %b) { 504 %z = call i32 @llvm.hexagon.A2.subh.h16.lh(i32 %a, i32 %b) 505 ret i32 %z 506} 507; CHECK: = sub({{.*}}.l,{{.*}}.h):<<16 508 509declare i32 @llvm.hexagon.A2.subh.h16.hl(i32, i32) 510define i32 @A2_subh_h16_hl(i32 %a, i32 %b) { 511 %z = call i32 @llvm.hexagon.A2.subh.h16.hl(i32 %a, i32 %b) 512 ret i32 %z 513} 514; CHECK: = sub({{.*}}.h,{{.*}}.l):<<16 515 516declare i32 @llvm.hexagon.A2.subh.h16.hh(i32, i32) 517define i32 @A2_subh_h16_hh(i32 %a, i32 %b) { 518 %z = call i32 @llvm.hexagon.A2.subh.h16.hh(i32 %a, i32 %b) 519 ret i32 %z 520} 521; CHECK: = sub({{.*}}.h,{{.*}}.h):<<16 522 523declare i32 @llvm.hexagon.A2.subh.h16.sat.ll(i32, i32) 524define i32 @A2_subh_h16_sat_ll(i32 %a, i32 %b) { 525 %z = call i32 @llvm.hexagon.A2.subh.h16.sat.ll(i32 %a, i32 %b) 526 ret i32 %z 527} 528; CHECK: = sub({{.*}}.l,{{.*}}.l):sat:<<16 529 530declare i32 @llvm.hexagon.A2.subh.h16.sat.lh(i32, i32) 531define i32 @A2_subh_h16_sat_lh(i32 %a, i32 %b) { 532 %z = call i32 @llvm.hexagon.A2.subh.h16.sat.lh(i32 %a, i32 %b) 533 ret i32 %z 534} 535; CHECK: = sub({{.*}}.l,{{.*}}.h):sat:<<16 536 537declare i32 @llvm.hexagon.A2.subh.h16.sat.hl(i32, i32) 538define i32 @A2_subh_h16_sat_hl(i32 %a, i32 %b) { 539 %z = call i32 @llvm.hexagon.A2.subh.h16.sat.hl(i32 %a, i32 %b) 540 ret i32 %z 541} 542; CHECK: = sub({{.*}}.h,{{.*}}.l):sat:<<16 543 544declare i32 @llvm.hexagon.A2.subh.h16.sat.hh(i32, i32) 545define i32 @A2_subh_h16_sat_hh(i32 %a, i32 %b) { 546 %z = call i32 @llvm.hexagon.A2.subh.h16.sat.hh(i32 %a, i32 %b) 547 ret i32 %z 548} 549; CHECK: = sub({{.*}}.h,{{.*}}.h):sat:<<16 550 551; Sign extend word to doubleword 552declare i64 @llvm.hexagon.A2.sxtw(i32) 553define i64 @A2_sxtw(i32 %a) { 554 %z = call i64 @llvm.hexagon.A2.sxtw(i32 %a) 555 ret i64 %z 556} 557; CHECK: = sxtw({{.*}}) 558 559; Vector absolute value halfwords 560declare i64 @llvm.hexagon.A2.vabsh(i64) 561define i64 @A2_vabsh(i64 %a) { 562 %z = call i64 @llvm.hexagon.A2.vabsh(i64 %a) 563 ret i64 %z 564} 565; CHECK: = vabsh({{.*}}) 566 567declare i64 @llvm.hexagon.A2.vabshsat(i64) 568define i64 @A2_vabshsat(i64 %a) { 569 %z = call i64 @llvm.hexagon.A2.vabshsat(i64 %a) 570 ret i64 %z 571} 572; CHECK: = vabsh({{.*}}):sat 573 574; Vector absolute value words 575declare i64 @llvm.hexagon.A2.vabsw(i64) 576define i64 @A2_vabsw(i64 %a) { 577 %z = call i64 @llvm.hexagon.A2.vabsw(i64 %a) 578 ret i64 %z 579} 580; CHECK: = vabsw({{.*}}) 581 582declare i64 @llvm.hexagon.A2.vabswsat(i64) 583define i64 @A2_vabswsat(i64 %a) { 584 %z = call i64 @llvm.hexagon.A2.vabswsat(i64 %a) 585 ret i64 %z 586} 587; CHECK: = vabsw({{.*}}):sat 588 589; Vector absolute difference halfwords 590declare i64 @llvm.hexagon.M2.vabsdiffh(i64, i64) 591define i64 @M2_vabsdiffh(i64 %a, i64 %b) { 592 %z = call i64 @llvm.hexagon.M2.vabsdiffh(i64 %a, i64 %b) 593 ret i64 %z 594} 595; CHECK: = vabsdiffh({{.*}},{{.*}}) 596 597; Vector absolute difference words 598declare i64 @llvm.hexagon.M2.vabsdiffw(i64, i64) 599define i64 @M2_vabsdiffw(i64 %a, i64 %b) { 600 %z = call i64 @llvm.hexagon.M2.vabsdiffw(i64 %a, i64 %b) 601 ret i64 %z 602} 603; CHECK: = vabsdiffw({{.*}},{{.*}}) 604 605; Vector add halfwords 606declare i64 @llvm.hexagon.A2.vaddh(i64, i64) 607define i64 @A2_vaddh(i64 %a, i64 %b) { 608 %z = call i64 @llvm.hexagon.A2.vaddh(i64 %a, i64 %b) 609 ret i64 %z 610} 611; CHECK: = vaddh({{.*}},{{.*}}) 612 613declare i64 @llvm.hexagon.A2.vaddhs(i64, i64) 614define i64 @A2_vaddhs(i64 %a, i64 %b) { 615 %z = call i64 @llvm.hexagon.A2.vaddhs(i64 %a, i64 %b) 616 ret i64 %z 617} 618; CHECK: = vaddh({{.*}},{{.*}}):sat 619 620declare i64 @llvm.hexagon.A2.vadduhs(i64, i64) 621define i64 @A2_vadduhs(i64 %a, i64 %b) { 622 %z = call i64 @llvm.hexagon.A2.vadduhs(i64 %a, i64 %b) 623 ret i64 %z 624} 625; CHECK: = vadduh({{.*}},{{.*}}):sat 626 627; Vector add halfwords with saturate and pack to unsigned bytes 628declare i32 @llvm.hexagon.A5.vaddhubs(i64, i64) 629define i32 @A5_vaddhubs(i64 %a, i64 %b) { 630 %z = call i32 @llvm.hexagon.A5.vaddhubs(i64 %a, i64 %b) 631 ret i32 %z 632} 633; CHECK: = vaddhub({{.*}},{{.*}}):sat 634 635; Vector reduce add unsigned bytes 636declare i64 @llvm.hexagon.A2.vraddub(i64, i64) 637define i64 @A2_vraddub(i64 %a, i64 %b) { 638 %z = call i64 @llvm.hexagon.A2.vraddub(i64 %a, i64 %b) 639 ret i64 %z 640} 641; CHECK: = vraddub({{.*}},{{.*}}) 642 643declare i64 @llvm.hexagon.A2.vraddub.acc(i64, i64, i64) 644define i64 @A2_vraddub_acc(i64 %a, i64 %b, i64 %c) { 645 %z = call i64 @llvm.hexagon.A2.vraddub.acc(i64 %a, i64 %b, i64 %c) 646 ret i64 %z 647} 648; CHECK: += vraddub({{.*}},{{.*}}) 649 650; Vector reduce add halfwords 651declare i32 @llvm.hexagon.M2.vradduh(i64, i64) 652define i32 @M2_vradduh(i64 %a, i64 %b) { 653 %z = call i32 @llvm.hexagon.M2.vradduh(i64 %a, i64 %b) 654 ret i32 %z 655} 656; CHECK: = vradduh({{.*}},{{.*}}) 657 658declare i32 @llvm.hexagon.M2.vraddh(i64, i64) 659define i32 @M2_vraddh(i64 %a, i64 %b) { 660 %z = call i32 @llvm.hexagon.M2.vraddh(i64 %a, i64 %b) 661 ret i32 %z 662} 663; CHECK: = vraddh({{.*}},{{.*}}) 664 665; Vector add bytes 666declare i64 @llvm.hexagon.A2.vaddub(i64, i64) 667define i64 @A2_vaddub(i64 %a, i64 %b) { 668 %z = call i64 @llvm.hexagon.A2.vaddub(i64 %a, i64 %b) 669 ret i64 %z 670} 671; CHECK: = vaddub({{.*}},{{.*}}) 672 673declare i64 @llvm.hexagon.A2.vaddubs(i64, i64) 674define i64 @A2_vaddubs(i64 %a, i64 %b) { 675 %z = call i64 @llvm.hexagon.A2.vaddubs(i64 %a, i64 %b) 676 ret i64 %z 677} 678; CHECK: = vaddub({{.*}},{{.*}}):sat 679 680; Vector add words 681declare i64 @llvm.hexagon.A2.vaddw(i64, i64) 682define i64 @A2_vaddw(i64 %a, i64 %b) { 683 %z = call i64 @llvm.hexagon.A2.vaddw(i64 %a, i64 %b) 684 ret i64 %z 685} 686; CHECK: = vaddw({{.*}},{{.*}}) 687 688declare i64 @llvm.hexagon.A2.vaddws(i64, i64) 689define i64 @A2_vaddws(i64 %a, i64 %b) { 690 %z = call i64 @llvm.hexagon.A2.vaddws(i64 %a, i64 %b) 691 ret i64 %z 692} 693; CHECK: = vaddw({{.*}},{{.*}}):sat 694 695; Vector average halfwords 696declare i64 @llvm.hexagon.A2.vavgh(i64, i64) 697define i64 @A2_vavgh(i64 %a, i64 %b) { 698 %z = call i64 @llvm.hexagon.A2.vavgh(i64 %a, i64 %b) 699 ret i64 %z 700} 701; CHECK: = vavgh({{.*}},{{.*}}) 702 703declare i64 @llvm.hexagon.A2.vavghr(i64, i64) 704define i64 @A2_vavghr(i64 %a, i64 %b) { 705 %z = call i64 @llvm.hexagon.A2.vavghr(i64 %a, i64 %b) 706 ret i64 %z 707} 708; CHECK: = vavgh({{.*}},{{.*}}):rnd 709 710declare i64 @llvm.hexagon.A2.vavghcr(i64, i64) 711define i64 @A2_vavghcr(i64 %a, i64 %b) { 712 %z = call i64 @llvm.hexagon.A2.vavghcr(i64 %a, i64 %b) 713 ret i64 %z 714} 715; CHECK: = vavgh({{.*}},{{.*}}):crnd 716 717declare i64 @llvm.hexagon.A2.vavguh(i64, i64) 718define i64 @A2_vavguh(i64 %a, i64 %b) { 719 %z = call i64 @llvm.hexagon.A2.vavguh(i64 %a, i64 %b) 720 ret i64 %z 721} 722; CHECK: = vavguh({{.*}},{{.*}}) 723 724declare i64 @llvm.hexagon.A2.vavguhr(i64, i64) 725define i64 @A2_vavguhr(i64 %a, i64 %b) { 726 %z = call i64 @llvm.hexagon.A2.vavguhr(i64 %a, i64 %b) 727 ret i64 %z 728} 729; CHECK: = vavguh({{.*}},{{.*}}):rnd 730 731declare i64 @llvm.hexagon.A2.vnavgh(i64, i64) 732define i64 @A2_vnavgh(i64 %a, i64 %b) { 733 %z = call i64 @llvm.hexagon.A2.vnavgh(i64 %a, i64 %b) 734 ret i64 %z 735} 736; CHECK: = vnavgh({{.*}},{{.*}}) 737 738declare i64 @llvm.hexagon.A2.vnavghr(i64, i64) 739define i64 @A2_vnavghr(i64 %a, i64 %b) { 740 %z = call i64 @llvm.hexagon.A2.vnavghr(i64 %a, i64 %b) 741 ret i64 %z 742} 743; CHECK: = vnavgh({{.*}},{{.*}}):rnd 744 745declare i64 @llvm.hexagon.A2.vnavghcr(i64, i64) 746define i64 @A2_vnavghcr(i64 %a, i64 %b) { 747 %z = call i64 @llvm.hexagon.A2.vnavghcr(i64 %a, i64 %b) 748 ret i64 %z 749} 750; CHECK: = vnavgh({{.*}},{{.*}}):crnd 751 752; Vector average unsigned bytes 753declare i64 @llvm.hexagon.A2.vavgub(i64, i64) 754define i64 @A2_vavgub(i64 %a, i64 %b) { 755 %z = call i64 @llvm.hexagon.A2.vavgub(i64 %a, i64 %b) 756 ret i64 %z 757} 758; CHECK: vavgub({{.*}},{{.*}}) 759 760declare i64 @llvm.hexagon.A2.vavgubr(i64, i64) 761define i64 @A2_vavgubr(i64 %a, i64 %b) { 762 %z = call i64 @llvm.hexagon.A2.vavgubr(i64 %a, i64 %b) 763 ret i64 %z 764} 765; CHECK: = vavgub({{.*}},{{.*}}):rnd 766 767; Vector average words 768declare i64 @llvm.hexagon.A2.vavgw(i64, i64) 769define i64 @A2_vavgw(i64 %a, i64 %b) { 770 %z = call i64 @llvm.hexagon.A2.vavgw(i64 %a, i64 %b) 771 ret i64 %z 772} 773; CHECK: = vavgw({{.*}},{{.*}}) 774 775declare i64 @llvm.hexagon.A2.vavgwr(i64, i64) 776define i64 @A2_vavgwr(i64 %a, i64 %b) { 777 %z = call i64 @llvm.hexagon.A2.vavgwr(i64 %a, i64 %b) 778 ret i64 %z 779} 780; CHECK: = vavgw({{.*}},{{.*}}):rnd 781 782declare i64 @llvm.hexagon.A2.vavgwcr(i64, i64) 783define i64 @A2_vavgwcr(i64 %a, i64 %b) { 784 %z = call i64 @llvm.hexagon.A2.vavgwcr(i64 %a, i64 %b) 785 ret i64 %z 786} 787; CHECK: = vavgw({{.*}},{{.*}}):crnd 788 789declare i64 @llvm.hexagon.A2.vavguw(i64, i64) 790define i64 @A2_vavguw(i64 %a, i64 %b) { 791 %z = call i64 @llvm.hexagon.A2.vavguw(i64 %a, i64 %b) 792 ret i64 %z 793} 794; CHECK: = vavguw({{.*}},{{.*}}) 795 796declare i64 @llvm.hexagon.A2.vavguwr(i64, i64) 797define i64 @A2_vavguwr(i64 %a, i64 %b) { 798 %z = call i64 @llvm.hexagon.A2.vavguwr(i64 %a, i64 %b) 799 ret i64 %z 800} 801; CHECK: = vavguw({{.*}},{{.*}}):rnd 802 803declare i64 @llvm.hexagon.A2.vnavgw(i64, i64) 804define i64 @A2_vnavgw(i64 %a, i64 %b) { 805 %z = call i64 @llvm.hexagon.A2.vnavgw(i64 %a, i64 %b) 806 ret i64 %z 807} 808; CHECK: = vnavgw({{.*}},{{.*}}) 809 810declare i64 @llvm.hexagon.A2.vnavgwr(i64, i64) 811define i64 @A2_vnavgwr(i64 %a, i64 %b) { 812 %z = call i64 @llvm.hexagon.A2.vnavgwr(i64 %a, i64 %b) 813 ret i64 %z 814} 815; CHECK: = vnavgw({{.*}},{{.*}}):rnd 816 817declare i64 @llvm.hexagon.A2.vnavgwcr(i64, i64) 818define i64 @A2_vnavgwcr(i64 %a, i64 %b) { 819 %z = call i64 @llvm.hexagon.A2.vnavgwcr(i64 %a, i64 %b) 820 ret i64 %z 821} 822; CHECK: = vnavgw({{.*}},{{.*}}):crnd 823 824; Vector conditional negate 825declare i64 @llvm.hexagon.S2.vcnegh(i64, i32) 826define i64 @S2_vcnegh(i64 %a, i32 %b) { 827 %z = call i64 @llvm.hexagon.S2.vcnegh(i64 %a, i32 %b) 828 ret i64 %z 829} 830; CHECK: = vcnegh({{.*}},{{.*}}) 831 832declare i64 @llvm.hexagon.S2.vrcnegh(i64, i64, i32) 833define i64 @S2_vrcnegh(i64 %a, i64 %b, i32 %c) { 834 %z = call i64 @llvm.hexagon.S2.vrcnegh(i64 %a, i64 %b, i32 %c) 835 ret i64 %z 836} 837; CHECK: += vrcnegh({{.*}},{{.*}}) 838 839; Vector maximum bytes 840declare i64 @llvm.hexagon.A2.vmaxub(i64, i64) 841define i64 @A2_vmaxub(i64 %a, i64 %b) { 842 %z = call i64 @llvm.hexagon.A2.vmaxub(i64 %a, i64 %b) 843 ret i64 %z 844} 845; CHECK: = vmaxub({{.*}},{{.*}}) 846 847declare i64 @llvm.hexagon.A2.vmaxb(i64, i64) 848define i64 @A2_vmaxb(i64 %a, i64 %b) { 849 %z = call i64 @llvm.hexagon.A2.vmaxb(i64 %a, i64 %b) 850 ret i64 %z 851} 852; CHECK: = vmaxb({{.*}},{{.*}}) 853 854; Vector maximum halfwords 855declare i64 @llvm.hexagon.A2.vmaxh(i64, i64) 856define i64 @A2_vmaxh(i64 %a, i64 %b) { 857 %z = call i64 @llvm.hexagon.A2.vmaxh(i64 %a, i64 %b) 858 ret i64 %z 859} 860; CHECK: = vmaxh({{.*}},{{.*}}) 861 862declare i64 @llvm.hexagon.A2.vmaxuh(i64, i64) 863define i64 @A2_vmaxuh(i64 %a, i64 %b) { 864 %z = call i64 @llvm.hexagon.A2.vmaxuh(i64 %a, i64 %b) 865 ret i64 %z 866} 867; CHECK: = vmaxuh({{.*}},{{.*}}) 868 869; Vector reduce maximum halfwords 870declare i64 @llvm.hexagon.A4.vrmaxh(i64, i64, i32) 871define i64 @A4_vrmaxh(i64 %a, i64 %b, i32 %c) { 872 %z = call i64 @llvm.hexagon.A4.vrmaxh(i64 %a, i64 %b, i32 %c) 873 ret i64 %z 874} 875; CHECK: = vrmaxh({{.*}},{{.*}}) 876 877declare i64 @llvm.hexagon.A4.vrmaxuh(i64, i64, i32) 878define i64 @A4_vrmaxuh(i64 %a, i64 %b, i32 %c) { 879 %z = call i64 @llvm.hexagon.A4.vrmaxuh(i64 %a, i64 %b, i32 %c) 880 ret i64 %z 881} 882; CHECK: = vrmaxuh({{.*}},{{.*}}) 883 884; Vector reduce maximum words 885declare i64 @llvm.hexagon.A4.vrmaxw(i64, i64, i32) 886define i64 @A4_vrmaxw(i64 %a, i64 %b, i32 %c) { 887 %z = call i64 @llvm.hexagon.A4.vrmaxw(i64 %a, i64 %b, i32 %c) 888 ret i64 %z 889} 890; CHECK: = vrmaxw({{.*}},{{.*}}) 891 892declare i64 @llvm.hexagon.A4.vrmaxuw(i64, i64, i32) 893define i64 @A4_vrmaxuw(i64 %a, i64 %b, i32 %c) { 894 %z = call i64 @llvm.hexagon.A4.vrmaxuw(i64 %a, i64 %b, i32 %c) 895 ret i64 %z 896} 897; CHECK: vrmaxuw({{.*}},{{.*}}) 898 899; Vector minimum bytes 900declare i64 @llvm.hexagon.A2.vminub(i64, i64) 901define i64 @A2_vminub(i64 %a, i64 %b) { 902 %z = call i64 @llvm.hexagon.A2.vminub(i64 %a, i64 %b) 903 ret i64 %z 904} 905; CHECK: = vminub({{.*}},{{.*}}) 906 907declare i64 @llvm.hexagon.A2.vminb(i64, i64) 908define i64 @A2_vminb(i64 %a, i64 %b) { 909 %z = call i64 @llvm.hexagon.A2.vminb(i64 %a, i64 %b) 910 ret i64 %z 911} 912; CHECK: = vminb({{.*}},{{.*}}) 913 914; Vector minimum halfwords 915declare i64 @llvm.hexagon.A2.vminh(i64, i64) 916define i64 @A2_vminh(i64 %a, i64 %b) { 917 %z = call i64 @llvm.hexagon.A2.vminh(i64 %a, i64 %b) 918 ret i64 %z 919} 920; CHECK: = vminh({{.*}},{{.*}}) 921 922declare i64 @llvm.hexagon.A2.vminuh(i64, i64) 923define i64 @A2_vminuh(i64 %a, i64 %b) { 924 %z = call i64 @llvm.hexagon.A2.vminuh(i64 %a, i64 %b) 925 ret i64 %z 926} 927; CHECK: = vminuh({{.*}},{{.*}}) 928 929; Vector reduce minimum halfwords 930declare i64 @llvm.hexagon.A4.vrminh(i64, i64, i32) 931define i64 @A4_vrminh(i64 %a, i64 %b, i32 %c) { 932 %z = call i64 @llvm.hexagon.A4.vrminh(i64 %a, i64 %b, i32 %c) 933 ret i64 %z 934} 935; CHECK: = vrminh({{.*}},{{.*}}) 936 937declare i64 @llvm.hexagon.A4.vrminuh(i64, i64, i32) 938define i64 @A4_vrminuh(i64 %a, i64 %b, i32 %c) { 939 %z = call i64 @llvm.hexagon.A4.vrminuh(i64 %a, i64 %b, i32 %c) 940 ret i64 %z 941} 942; CHECK: = vrminuh({{.*}},{{.*}}) 943 944; Vector reduce minimum words 945declare i64 @llvm.hexagon.A4.vrminw(i64, i64, i32) 946define i64 @A4_vrminw(i64 %a, i64 %b, i32 %c) { 947 %z = call i64 @llvm.hexagon.A4.vrminw(i64 %a, i64 %b, i32 %c) 948 ret i64 %z 949} 950; CHECK: = vrminw({{.*}},{{.*}}) 951 952declare i64 @llvm.hexagon.A4.vrminuw(i64, i64, i32) 953define i64 @A4_vrminuw(i64 %a, i64 %b, i32 %c) { 954 %z = call i64 @llvm.hexagon.A4.vrminuw(i64 %a, i64 %b, i32 %c) 955 ret i64 %z 956} 957; CHECK: = vrminuw({{.*}},{{.*}}) 958 959; Vector sum of absolute differences unsigned bytes 960declare i64 @llvm.hexagon.A2.vrsadub(i64, i64) 961define i64 @A2_vrsadub(i64 %a, i64 %b) { 962 %z = call i64 @llvm.hexagon.A2.vrsadub(i64 %a, i64 %b) 963 ret i64 %z 964} 965; CHECK: = vrsadub({{.*}},{{.*}}) 966 967declare i64 @llvm.hexagon.A2.vrsadub.acc(i64, i64, i64) 968define i64 @A2_vrsadub_acc(i64 %a, i64 %b, i64 %c) { 969 %z = call i64 @llvm.hexagon.A2.vrsadub.acc(i64 %a, i64 %b, i64 %c) 970 ret i64 %z 971} 972; CHECK: += vrsadub({{.*}},{{.*}}) 973 974; Vector subtract halfwords 975declare i64 @llvm.hexagon.A2.vsubh(i64, i64) 976define i64 @A2_vsubh(i64 %a, i64 %b) { 977 %z = call i64 @llvm.hexagon.A2.vsubh(i64 %a, i64 %b) 978 ret i64 %z 979} 980; CHECK: = vsubh({{.*}},{{.*}}) 981 982declare i64 @llvm.hexagon.A2.vsubhs(i64, i64) 983define i64 @A2_vsubhs(i64 %a, i64 %b) { 984 %z = call i64 @llvm.hexagon.A2.vsubhs(i64 %a, i64 %b) 985 ret i64 %z 986} 987; CHECK: = vsubh({{.*}},{{.*}}):sat 988 989declare i64 @llvm.hexagon.A2.vsubuhs(i64, i64) 990define i64 @A2_vsubuhs(i64 %a, i64 %b) { 991 %z = call i64 @llvm.hexagon.A2.vsubuhs(i64 %a, i64 %b) 992 ret i64 %z 993} 994; CHECK: = vsubuh({{.*}},{{.*}}):sat 995 996; Vector subtract bytes 997declare i64 @llvm.hexagon.A2.vsubub(i64, i64) 998define i64 @A2_vsubub(i64 %a, i64 %b) { 999 %z = call i64 @llvm.hexagon.A2.vsubub(i64 %a, i64 %b) 1000 ret i64 %z 1001} 1002; CHECK: = vsubub({{.*}},{{.*}}) 1003 1004declare i64 @llvm.hexagon.A2.vsububs(i64, i64) 1005define i64 @A2_vsububs(i64 %a, i64 %b) { 1006 %z = call i64 @llvm.hexagon.A2.vsububs(i64 %a, i64 %b) 1007 ret i64 %z 1008} 1009; CHECK: = vsubub({{.*}},{{.*}}):sat 1010 1011; Vector subtract words 1012declare i64 @llvm.hexagon.A2.vsubw(i64, i64) 1013define i64 @A2_vsubw(i64 %a, i64 %b) { 1014 %z = call i64 @llvm.hexagon.A2.vsubw(i64 %a, i64 %b) 1015 ret i64 %z 1016} 1017; CHECK: = vsubw({{.*}},{{.*}}) 1018 1019declare i64 @llvm.hexagon.A2.vsubws(i64, i64) 1020define i64 @A2_vsubws(i64 %a, i64 %b) { 1021 %z = call i64 @llvm.hexagon.A2.vsubws(i64 %a, i64 %b) 1022 ret i64 %z 1023} 1024; CHECK: = vsubw({{.*}},{{.*}}):sat 1025