diff options
Diffstat (limited to 'llvm/test/CodeGen/ARM64/st1.ll')
| -rw-r--r-- | llvm/test/CodeGen/ARM64/st1.ll | 128 |
1 files changed, 88 insertions, 40 deletions
diff --git a/llvm/test/CodeGen/ARM64/st1.ll b/llvm/test/CodeGen/ARM64/st1.ll index 3c0d3ecc04c..b9aafc60e7b 100644 --- a/llvm/test/CodeGen/ARM64/st1.ll +++ b/llvm/test/CodeGen/ARM64/st1.ll @@ -1,7 +1,7 @@ ; RUN: llc < %s -march=arm64 -arm64-neon-syntax=apple -verify-machineinstrs | FileCheck %s define void @st1lane_16b(<16 x i8> %A, i8* %D) { -; CHECK: st1lane_16b +; CHECK-LABEL: st1lane_16b ; CHECK: st1.b %tmp = extractelement <16 x i8> %A, i32 1 store i8 %tmp, i8* %D @@ -9,7 +9,7 @@ define void @st1lane_16b(<16 x i8> %A, i8* %D) { } define void @st1lane_8h(<8 x i16> %A, i16* %D) { -; CHECK: st1lane_8h +; CHECK-LABEL: st1lane_8h ; CHECK: st1.h %tmp = extractelement <8 x i16> %A, i32 1 store i16 %tmp, i16* %D @@ -17,44 +17,92 @@ define void @st1lane_8h(<8 x i16> %A, i16* %D) { } define void @st1lane_4s(<4 x i32> %A, i32* %D) { -; CHECK: st1lane_4s +; CHECK-LABEL: st1lane_4s ; CHECK: st1.s %tmp = extractelement <4 x i32> %A, i32 1 store i32 %tmp, i32* %D ret void } +define void @st1lane_4s_float(<4 x float> %A, float* %D) { +; CHECK-LABEL: st1lane_4s_float +; CHECK: st1.s + %tmp = extractelement <4 x float> %A, i32 1 + store float %tmp, float* %D + ret void +} + define void @st1lane_2d(<2 x i64> %A, i64* %D) { -; CHECK: st1lane_2d +; CHECK-LABEL: st1lane_2d ; CHECK: st1.d %tmp = extractelement <2 x i64> %A, i32 1 store i64 %tmp, i64* %D ret void } +define void @st1lane_2d_double(<2 x double> %A, double* %D) { +; CHECK-LABEL: st1lane_2d_double +; CHECK: st1.d + %tmp = extractelement <2 x double> %A, i32 1 + store double %tmp, double* %D + ret void +} + +define void @st1lane_8b(<8 x i8> %A, i8* %D) { +; CHECK-LABEL: st1lane_8b +; CHECK: st1.b + %tmp = extractelement <8 x i8> %A, i32 1 + store i8 %tmp, i8* %D + ret void +} + +define void @st1lane_4h(<4 x i16> %A, i16* %D) { +; CHECK-LABEL: st1lane_4h +; CHECK: st1.h + %tmp = extractelement <4 x i16> %A, i32 1 + store i16 %tmp, i16* %D + ret void +} + +define void @st1lane_2s(<2 x i32> %A, i32* %D) { +; CHECK-LABEL: st1lane_2s +; CHECK: st1.s + %tmp = extractelement <2 x i32> %A, i32 1 + store i32 %tmp, i32* %D + ret void +} + +define void @st1lane_2s_float(<2 x float> %A, float* %D) { +; CHECK-LABEL: st1lane_2s_float +; CHECK: st1.s + %tmp = extractelement <2 x float> %A, i32 1 + store float %tmp, float* %D + ret void +} + define void @st2lane_16b(<16 x i8> %A, <16 x i8> %B, i8* %D) { -; CHECK: st2lane_16b +; CHECK-LABEL: st2lane_16b ; CHECK: st2.b call void @llvm.arm64.neon.st2lane.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, i64 1, i8* %D) ret void } define void @st2lane_8h(<8 x i16> %A, <8 x i16> %B, i16* %D) { -; CHECK: st2lane_8h +; CHECK-LABEL: st2lane_8h ; CHECK: st2.h call void @llvm.arm64.neon.st2lane.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, i64 1, i16* %D) ret void } define void @st2lane_4s(<4 x i32> %A, <4 x i32> %B, i32* %D) { -; CHECK: st2lane_4s +; CHECK-LABEL: st2lane_4s ; CHECK: st2.s call void @llvm.arm64.neon.st2lane.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, i64 1, i32* %D) ret void } define void @st2lane_2d(<2 x i64> %A, <2 x i64> %B, i64* %D) { -; CHECK: st2lane_2d +; CHECK-LABEL: st2lane_2d ; CHECK: st2.d call void @llvm.arm64.neon.st2lane.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, i64 1, i64* %D) ret void @@ -66,28 +114,28 @@ declare void @llvm.arm64.neon.st2lane.v4i32.p0i32(<4 x i32>, <4 x i32>, i64, i32 declare void @llvm.arm64.neon.st2lane.v2i64.p0i64(<2 x i64>, <2 x i64>, i64, i64*) nounwind readnone define void @st3lane_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i8* %D) { -; CHECK: st3lane_16b +; CHECK-LABEL: st3lane_16b ; CHECK: st3.b call void @llvm.arm64.neon.st3lane.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i64 1, i8* %D) ret void } define void @st3lane_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i16* %D) { -; CHECK: st3lane_8h +; CHECK-LABEL: st3lane_8h ; CHECK: st3.h call void @llvm.arm64.neon.st3lane.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i64 1, i16* %D) ret void } define void @st3lane_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i32* %D) { -; CHECK: st3lane_4s +; CHECK-LABEL: st3lane_4s ; CHECK: st3.s call void @llvm.arm64.neon.st3lane.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i64 1, i32* %D) ret void } define void @st3lane_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64* %D) { -; CHECK: st3lane_2d +; CHECK-LABEL: st3lane_2d ; CHECK: st3.d call void @llvm.arm64.neon.st3lane.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64 1, i64* %D) ret void @@ -99,28 +147,28 @@ declare void @llvm.arm64.neon.st3lane.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32 declare void @llvm.arm64.neon.st3lane.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64>, i64, i64*) nounwind readnone define void @st4lane_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %E) { -; CHECK: st4lane_16b +; CHECK-LABEL: st4lane_16b ; CHECK: st4.b call void @llvm.arm64.neon.st4lane.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i64 1, i8* %E) ret void } define void @st4lane_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %E) { -; CHECK: st4lane_8h +; CHECK-LABEL: st4lane_8h ; CHECK: st4.h call void @llvm.arm64.neon.st4lane.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i64 1, i16* %E) ret void } define void @st4lane_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %E) { -; CHECK: st4lane_4s +; CHECK-LABEL: st4lane_4s ; CHECK: st4.s call void @llvm.arm64.neon.st4lane.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i64 1, i32* %E) ret void } define void @st4lane_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %E) { -; CHECK: st4lane_2d +; CHECK-LABEL: st4lane_2d ; CHECK: st4.d call void @llvm.arm64.neon.st4lane.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64 1, i64* %E) ret void @@ -133,21 +181,21 @@ declare void @llvm.arm64.neon.st4lane.v2i64.p0i64(<2 x i64>, <2 x i64>, <2 x i64 define void @st2_8b(<8 x i8> %A, <8 x i8> %B, i8* %P) nounwind { -; CHECK: st2_8b +; CHECK-LABEL: st2_8b ; CHECK st2.8b call void @llvm.arm64.neon.st2.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, i8* %P) ret void } define void @st3_8b(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, i8* %P) nounwind { -; CHECK: st3_8b +; CHECK-LABEL: st3_8b ; CHECK st3.8b call void @llvm.arm64.neon.st3.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, i8* %P) ret void } define void @st4_8b(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %P) nounwind { -; CHECK: st4_8b +; CHECK-LABEL: st4_8b ; CHECK st4.8b call void @llvm.arm64.neon.st4.v8i8.p0i8(<8 x i8> %A, <8 x i8> %B, <8 x i8> %C, <8 x i8> %D, i8* %P) ret void @@ -158,21 +206,21 @@ declare void @llvm.arm64.neon.st3.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, i8*) n declare void @llvm.arm64.neon.st4.v8i8.p0i8(<8 x i8>, <8 x i8>, <8 x i8>, <8 x i8>, i8*) nounwind readonly define void @st2_16b(<16 x i8> %A, <16 x i8> %B, i8* %P) nounwind { -; CHECK: st2_16b +; CHECK-LABEL: st2_16b ; CHECK st2.16b call void @llvm.arm64.neon.st2.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, i8* %P) ret void } define void @st3_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i8* %P) nounwind { -; CHECK: st3_16b +; CHECK-LABEL: st3_16b ; CHECK st3.16b call void @llvm.arm64.neon.st3.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, i8* %P) ret void } define void @st4_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %P) nounwind { -; CHECK: st4_16b +; CHECK-LABEL: st4_16b ; CHECK st4.16b call void @llvm.arm64.neon.st4.v16i8.p0i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, i8* %P) ret void @@ -183,21 +231,21 @@ declare void @llvm.arm64.neon.st3.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, i8 declare void @llvm.arm64.neon.st4.v16i8.p0i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, i8*) nounwind readonly define void @st2_4h(<4 x i16> %A, <4 x i16> %B, i16* %P) nounwind { -; CHECK: st2_4h +; CHECK-LABEL: st2_4h ; CHECK st2.4h call void @llvm.arm64.neon.st2.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, i16* %P) ret void } define void @st3_4h(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, i16* %P) nounwind { -; CHECK: st3_4h +; CHECK-LABEL: st3_4h ; CHECK st3.4h call void @llvm.arm64.neon.st3.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, i16* %P) ret void } define void @st4_4h(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %P) nounwind { -; CHECK: st4_4h +; CHECK-LABEL: st4_4h ; CHECK st4.4h call void @llvm.arm64.neon.st4.v4i16.p0i16(<4 x i16> %A, <4 x i16> %B, <4 x i16> %C, <4 x i16> %D, i16* %P) ret void @@ -208,21 +256,21 @@ declare void @llvm.arm64.neon.st3.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, i declare void @llvm.arm64.neon.st4.v4i16.p0i16(<4 x i16>, <4 x i16>, <4 x i16>, <4 x i16>, i16*) nounwind readonly define void @st2_8h(<8 x i16> %A, <8 x i16> %B, i16* %P) nounwind { -; CHECK: st2_8h +; CHECK-LABEL: st2_8h ; CHECK st2.8h call void @llvm.arm64.neon.st2.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, i16* %P) ret void } define void @st3_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i16* %P) nounwind { -; CHECK: st3_8h +; CHECK-LABEL: st3_8h ; CHECK st3.8h call void @llvm.arm64.neon.st3.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, i16* %P) ret void } define void @st4_8h(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %P) nounwind { -; CHECK: st4_8h +; CHECK-LABEL: st4_8h ; CHECK st4.8h call void @llvm.arm64.neon.st4.v8i16.p0i16(<8 x i16> %A, <8 x i16> %B, <8 x i16> %C, <8 x i16> %D, i16* %P) ret void @@ -233,21 +281,21 @@ declare void @llvm.arm64.neon.st3.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, i declare void @llvm.arm64.neon.st4.v8i16.p0i16(<8 x i16>, <8 x i16>, <8 x i16>, <8 x i16>, i16*) nounwind readonly define void @st2_2s(<2 x i32> %A, <2 x i32> %B, i32* %P) nounwind { -; CHECK: st2_2s +; CHECK-LABEL: st2_2s ; CHECK st2.2s call void @llvm.arm64.neon.st2.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, i32* %P) ret void } define void @st3_2s(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32* %P) nounwind { -; CHECK: st3_2s +; CHECK-LABEL: st3_2s ; CHECK st3.2s call void @llvm.arm64.neon.st3.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, i32* %P) ret void } define void @st4_2s(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %P) nounwind { -; CHECK: st4_2s +; CHECK-LABEL: st4_2s ; CHECK st4.2s call void @llvm.arm64.neon.st4.v2i32.p0i32(<2 x i32> %A, <2 x i32> %B, <2 x i32> %C, <2 x i32> %D, i32* %P) ret void @@ -258,21 +306,21 @@ declare void @llvm.arm64.neon.st3.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, i declare void @llvm.arm64.neon.st4.v2i32.p0i32(<2 x i32>, <2 x i32>, <2 x i32>, <2 x i32>, i32*) nounwind readonly define void @st2_4s(<4 x i32> %A, <4 x i32> %B, i32* %P) nounwind { -; CHECK: st2_4s +; CHECK-LABEL: st2_4s ; CHECK st2.4s call void @llvm.arm64.neon.st2.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, i32* %P) ret void } define void @st3_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i32* %P) nounwind { -; CHECK: st3_4s +; CHECK-LABEL: st3_4s ; CHECK st3.4s call void @llvm.arm64.neon.st3.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, i32* %P) ret void } define void @st4_4s(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %P) nounwind { -; CHECK: st4_4s +; CHECK-LABEL: st4_4s ; CHECK st4.4s call void @llvm.arm64.neon.st4.v4i32.p0i32(<4 x i32> %A, <4 x i32> %B, <4 x i32> %C, <4 x i32> %D, i32* %P) ret void @@ -283,21 +331,21 @@ declare void @llvm.arm64.neon.st3.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, i declare void @llvm.arm64.neon.st4.v4i32.p0i32(<4 x i32>, <4 x i32>, <4 x i32>, <4 x i32>, i32*) nounwind readonly define void @st2_1d(<1 x i64> %A, <1 x i64> %B, i64* %P) nounwind { -; CHECK: st2_1d +; CHECK-LABEL: st2_1d ; CHECK st1.2d call void @llvm.arm64.neon.st2.v1i64.p0i64(<1 x i64> %A, <1 x i64> %B, i64* %P) ret void } define void @st3_1d(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, i64* %P) nounwind { -; CHECK: st3_1d +; CHECK-LABEL: st3_1d ; CHECK st1.3d call void @llvm.arm64.neon.st3.v1i64.p0i64(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, i64* %P) ret void } define void @st4_1d(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64* %P) nounwind { -; CHECK: st4_1d +; CHECK-LABEL: st4_1d ; CHECK st1.4d call void @llvm.arm64.neon.st4.v1i64.p0i64(<1 x i64> %A, <1 x i64> %B, <1 x i64> %C, <1 x i64> %D, i64* %P) ret void @@ -308,21 +356,21 @@ declare void @llvm.arm64.neon.st3.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, i declare void @llvm.arm64.neon.st4.v1i64.p0i64(<1 x i64>, <1 x i64>, <1 x i64>, <1 x i64>, i64*) nounwind readonly define void @st2_2d(<2 x i64> %A, <2 x i64> %B, i64* %P) nounwind { -; CHECK: st2_2d +; CHECK-LABEL: st2_2d ; CHECK st2.2d call void @llvm.arm64.neon.st2.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, i64* %P) ret void } define void @st3_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64* %P) nounwind { -; CHECK: st3_2d +; CHECK-LABEL: st3_2d ; CHECK st2.3d call void @llvm.arm64.neon.st3.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, i64* %P) ret void } define void @st4_2d(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %P) nounwind { -; CHECK: st4_2d +; CHECK-LABEL: st4_2d ; CHECK st2.4d call void @llvm.arm64.neon.st4.v2i64.p0i64(<2 x i64> %A, <2 x i64> %B, <2 x i64> %C, <2 x i64> %D, i64* %P) ret void |

