|
| 1 | +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5 |
| 2 | +; RUN: llc -mtriple=aarch64-none-linux-gnu < %s | FileCheck %s |
| 3 | + |
| 4 | +define <8 x i16> @mulhu_v8i16_by_256(<8 x i16> %x) { |
| 5 | +; CHECK-LABEL: mulhu_v8i16_by_256: |
| 6 | +; CHECK: // %bb.0: |
| 7 | +; CHECK-NEXT: movi v1.8h, #1, lsl #8 |
| 8 | +; CHECK-NEXT: umull2 v2.4s, v0.8h, v1.8h |
| 9 | +; CHECK-NEXT: umull v0.4s, v0.4h, v1.4h |
| 10 | +; CHECK-NEXT: uzp2 v0.8h, v0.8h, v2.8h |
| 11 | +; CHECK-NEXT: ret |
| 12 | + %x32 = zext <8 x i16> %x to <8 x i32> |
| 13 | + %mul = mul <8 x i32> %x32, splat (i32 256) |
| 14 | + %result = lshr <8 x i32> %mul, splat (i32 16) |
| 15 | + %trunc = trunc <8 x i32> %result to <8 x i16> |
| 16 | + ret <8 x i16> %trunc |
| 17 | +} |
| 18 | + |
| 19 | +define <16 x i16> @mulhu_v16i16_by_256(<16 x i16> %x) { |
| 20 | +; CHECK-LABEL: mulhu_v16i16_by_256: |
| 21 | +; CHECK: // %bb.0: |
| 22 | +; CHECK-NEXT: movi v2.8h, #1, lsl #8 |
| 23 | +; CHECK-NEXT: umull2 v3.4s, v0.8h, v2.8h |
| 24 | +; CHECK-NEXT: umull v0.4s, v0.4h, v2.4h |
| 25 | +; CHECK-NEXT: umull2 v4.4s, v1.8h, v2.8h |
| 26 | +; CHECK-NEXT: umull v1.4s, v1.4h, v2.4h |
| 27 | +; CHECK-NEXT: uzp2 v0.8h, v0.8h, v3.8h |
| 28 | +; CHECK-NEXT: uzp2 v1.8h, v1.8h, v4.8h |
| 29 | +; CHECK-NEXT: ret |
| 30 | + %x32 = zext <16 x i16> %x to <16 x i32> |
| 31 | + %mul = mul <16 x i32> %x32, splat (i32 256) |
| 32 | + %result = lshr <16 x i32> %mul, splat (i32 16) |
| 33 | + %trunc = trunc <16 x i32> %result to <16 x i16> |
| 34 | + ret <16 x i16> %trunc |
| 35 | +} |
0 commit comments