|
1 | 1 | ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
2 | 2 | ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+neon < %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-NEON |
3 | 3 | ; RUN: llc -mtriple=aarch64-none-linux-gnu -mattr=+sve < %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-SVE |
4 | | -; RUN: llc -mtriple=aarch64 -global-isel -global-isel-abort=2 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
5 | | - |
6 | | -; CHECK-GI: warning: Instruction selection used fallback path for pmlsl2_v8i16_uzp1 |
7 | | -; CHECK-GI-NEXT: warning: Instruction selection used fallback path for pmlsl_pmlsl2_v8i16_uzp1 |
| 4 | +; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI |
8 | 5 |
|
9 | 6 | define <8 x i16> @smull_v8i8_v8i16(ptr %A, ptr %B) nounwind { |
10 | 7 | ; CHECK-LABEL: smull_v8i8_v8i16: |
@@ -1832,14 +1829,33 @@ entry: |
1832 | 1829 | } |
1833 | 1830 |
|
1834 | 1831 | define void @pmlsl2_v8i16_uzp1(<16 x i8> %0, <8 x i16> %1, ptr %2, ptr %3) { |
1835 | | -; CHECK-LABEL: pmlsl2_v8i16_uzp1: |
1836 | | -; CHECK: // %bb.0: |
1837 | | -; CHECK-NEXT: ldr q2, [x1, #16] |
1838 | | -; CHECK-NEXT: uzp1 v2.16b, v0.16b, v2.16b |
1839 | | -; CHECK-NEXT: pmull2 v0.8h, v0.16b, v2.16b |
1840 | | -; CHECK-NEXT: sub v0.8h, v1.8h, v0.8h |
1841 | | -; CHECK-NEXT: str q0, [x0] |
1842 | | -; CHECK-NEXT: ret |
| 1832 | +; CHECK-NEON-LABEL: pmlsl2_v8i16_uzp1: |
| 1833 | +; CHECK-NEON: // %bb.0: |
| 1834 | +; CHECK-NEON-NEXT: ldr q2, [x1, #16] |
| 1835 | +; CHECK-NEON-NEXT: uzp1 v2.16b, v0.16b, v2.16b |
| 1836 | +; CHECK-NEON-NEXT: pmull2 v0.8h, v0.16b, v2.16b |
| 1837 | +; CHECK-NEON-NEXT: sub v0.8h, v1.8h, v0.8h |
| 1838 | +; CHECK-NEON-NEXT: str q0, [x0] |
| 1839 | +; CHECK-NEON-NEXT: ret |
| 1840 | +; |
| 1841 | +; CHECK-SVE-LABEL: pmlsl2_v8i16_uzp1: |
| 1842 | +; CHECK-SVE: // %bb.0: |
| 1843 | +; CHECK-SVE-NEXT: ldr q2, [x1, #16] |
| 1844 | +; CHECK-SVE-NEXT: uzp1 v2.16b, v0.16b, v2.16b |
| 1845 | +; CHECK-SVE-NEXT: pmull2 v0.8h, v0.16b, v2.16b |
| 1846 | +; CHECK-SVE-NEXT: sub v0.8h, v1.8h, v0.8h |
| 1847 | +; CHECK-SVE-NEXT: str q0, [x0] |
| 1848 | +; CHECK-SVE-NEXT: ret |
| 1849 | +; |
| 1850 | +; CHECK-GI-LABEL: pmlsl2_v8i16_uzp1: |
| 1851 | +; CHECK-GI: // %bb.0: |
| 1852 | +; CHECK-GI-NEXT: ldr q2, [x1, #16] |
| 1853 | +; CHECK-GI-NEXT: mov d0, v0.d[1] |
| 1854 | +; CHECK-GI-NEXT: xtn v2.8b, v2.8h |
| 1855 | +; CHECK-GI-NEXT: pmull v0.8h, v0.8b, v2.8b |
| 1856 | +; CHECK-GI-NEXT: sub v0.8h, v1.8h, v0.8h |
| 1857 | +; CHECK-GI-NEXT: str q0, [x0] |
| 1858 | +; CHECK-GI-NEXT: ret |
1843 | 1859 | %5 = getelementptr inbounds i32, ptr %3, i64 4 |
1844 | 1860 | %6 = load <8 x i16>, ptr %5, align 4 |
1845 | 1861 | %7 = trunc <8 x i16> %6 to <8 x i8> |
@@ -1991,16 +2007,40 @@ define void @umlsl2_v4i32_uzp1(<8 x i16> %0, <4 x i32> %1, ptr %2, ptr %3) { |
1991 | 2007 | } |
1992 | 2008 |
|
1993 | 2009 | define void @pmlsl_pmlsl2_v8i16_uzp1(<16 x i8> %0, <8 x i16> %1, ptr %2, ptr %3, i32 %4) { |
1994 | | -; CHECK-LABEL: pmlsl_pmlsl2_v8i16_uzp1: |
1995 | | -; CHECK: // %bb.0: // %entry |
1996 | | -; CHECK-NEXT: ldp q2, q3, [x1] |
1997 | | -; CHECK-NEXT: uzp1 v2.16b, v2.16b, v3.16b |
1998 | | -; CHECK-NEXT: pmull v3.8h, v0.8b, v2.8b |
1999 | | -; CHECK-NEXT: pmull2 v0.8h, v0.16b, v2.16b |
2000 | | -; CHECK-NEXT: add v0.8h, v3.8h, v0.8h |
2001 | | -; CHECK-NEXT: sub v0.8h, v1.8h, v0.8h |
2002 | | -; CHECK-NEXT: str q0, [x0] |
2003 | | -; CHECK-NEXT: ret |
| 2010 | +; CHECK-NEON-LABEL: pmlsl_pmlsl2_v8i16_uzp1: |
| 2011 | +; CHECK-NEON: // %bb.0: // %entry |
| 2012 | +; CHECK-NEON-NEXT: ldp q2, q3, [x1] |
| 2013 | +; CHECK-NEON-NEXT: uzp1 v2.16b, v2.16b, v3.16b |
| 2014 | +; CHECK-NEON-NEXT: pmull v3.8h, v0.8b, v2.8b |
| 2015 | +; CHECK-NEON-NEXT: pmull2 v0.8h, v0.16b, v2.16b |
| 2016 | +; CHECK-NEON-NEXT: add v0.8h, v3.8h, v0.8h |
| 2017 | +; CHECK-NEON-NEXT: sub v0.8h, v1.8h, v0.8h |
| 2018 | +; CHECK-NEON-NEXT: str q0, [x0] |
| 2019 | +; CHECK-NEON-NEXT: ret |
| 2020 | +; |
| 2021 | +; CHECK-SVE-LABEL: pmlsl_pmlsl2_v8i16_uzp1: |
| 2022 | +; CHECK-SVE: // %bb.0: // %entry |
| 2023 | +; CHECK-SVE-NEXT: ldp q2, q3, [x1] |
| 2024 | +; CHECK-SVE-NEXT: uzp1 v2.16b, v2.16b, v3.16b |
| 2025 | +; CHECK-SVE-NEXT: pmull v3.8h, v0.8b, v2.8b |
| 2026 | +; CHECK-SVE-NEXT: pmull2 v0.8h, v0.16b, v2.16b |
| 2027 | +; CHECK-SVE-NEXT: add v0.8h, v3.8h, v0.8h |
| 2028 | +; CHECK-SVE-NEXT: sub v0.8h, v1.8h, v0.8h |
| 2029 | +; CHECK-SVE-NEXT: str q0, [x0] |
| 2030 | +; CHECK-SVE-NEXT: ret |
| 2031 | +; |
| 2032 | +; CHECK-GI-LABEL: pmlsl_pmlsl2_v8i16_uzp1: |
| 2033 | +; CHECK-GI: // %bb.0: // %entry |
| 2034 | +; CHECK-GI-NEXT: ldp q2, q3, [x1] |
| 2035 | +; CHECK-GI-NEXT: mov d4, v0.d[1] |
| 2036 | +; CHECK-GI-NEXT: xtn v2.8b, v2.8h |
| 2037 | +; CHECK-GI-NEXT: xtn v3.8b, v3.8h |
| 2038 | +; CHECK-GI-NEXT: pmull v0.8h, v0.8b, v2.8b |
| 2039 | +; CHECK-GI-NEXT: pmull v2.8h, v4.8b, v3.8b |
| 2040 | +; CHECK-GI-NEXT: add v0.8h, v0.8h, v2.8h |
| 2041 | +; CHECK-GI-NEXT: sub v0.8h, v1.8h, v0.8h |
| 2042 | +; CHECK-GI-NEXT: str q0, [x0] |
| 2043 | +; CHECK-GI-NEXT: ret |
2004 | 2044 | entry: |
2005 | 2045 | %5 = load <8 x i16>, ptr %3, align 4 |
2006 | 2046 | %6 = trunc <8 x i16> %5 to <8 x i8> |
|
0 commit comments