@@ -138,6 +138,23 @@ def extract_high_dup_v8i16 :
138
138
def extract_high_dup_v4i32 :
139
139
BinOpFrag<(extract_subvector (v4i32 (AArch64duplane32 (v4i32 node:$LHS), node:$RHS)), (i64 2))>;
140
140
141
+ def dup_v8i16 :
142
+ PatFrags<(ops node:$LHS, node:$RHS),
143
+ [(v4i16 (extract_subvector (v8i16 (AArch64duplane16 (v8i16 node:$LHS), node:$RHS)), (i64 0))),
144
+ (v4i16 (AArch64duplane16 (v8i16 node:$LHS), node:$RHS))]>;
145
+ def dup_v4i32 :
146
+ PatFrags<(ops node:$LHS, node:$RHS),
147
+ [(v2i32 (extract_subvector (v4i32 (AArch64duplane32 (v4i32 node:$LHS), node:$RHS)), (i64 0))),
148
+ (v2i32 (AArch64duplane32 (v4i32 node:$LHS), node:$RHS))]>;
149
+ def dup_v8f16 :
150
+ PatFrags<(ops node:$LHS, node:$RHS),
151
+ [(v4f16 (extract_subvector (v8f16 (AArch64duplane16 (v8f16 node:$LHS), node:$RHS)), (i64 0))),
152
+ (v4f16 (AArch64duplane16 (v8f16 node:$LHS), node:$RHS))]>;
153
+ def dup_v4f32 :
154
+ PatFrags<(ops node:$LHS, node:$RHS),
155
+ [(v2f32 (extract_subvector (v4f32 (AArch64duplane32 (v4f32 node:$LHS), node:$RHS)), (i64 0))),
156
+ (v2f32 (AArch64duplane32 (v4f32 node:$LHS), node:$RHS))]>;
157
+
141
158
//===----------------------------------------------------------------------===//
142
159
// Asm Operand Classes.
143
160
//
@@ -8443,7 +8460,7 @@ multiclass SIMDFPIndexed<bit U, bits<4> opc, string asm,
8443
8460
asm, ".4h", ".4h", ".4h", ".h",
8444
8461
[(set (v4f16 V64:$Rd),
8445
8462
(OpNode (v4f16 V64:$Rn),
8446
- (v4f16 (AArch64duplane16 ( v8f16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
8463
+ (dup_v8f16 ( v8f16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
8447
8464
bits<3> idx;
8448
8465
let Inst{11} = idx{2};
8449
8466
let Inst{21} = idx{1};
@@ -8470,7 +8487,7 @@ multiclass SIMDFPIndexed<bit U, bits<4> opc, string asm,
8470
8487
asm, ".2s", ".2s", ".2s", ".s",
8471
8488
[(set (v2f32 V64:$Rd),
8472
8489
(OpNode (v2f32 V64:$Rn),
8473
- (v2f32 (AArch64duplane32 ( v4f32 V128:$Rm), VectorIndexS:$idx) )))]> {
8490
+ (dup_v4f32 ( v4f32 V128:$Rm), VectorIndexS:$idx)))]> {
8474
8491
bits<2> idx;
8475
8492
let Inst{11} = idx{1};
8476
8493
let Inst{21} = idx{0};
@@ -8781,7 +8798,7 @@ multiclass SIMDIndexedHS<bit U, bits<4> opc, string asm,
8781
8798
asm, ".4h", ".4h", ".4h", ".h",
8782
8799
[(set (v4i16 V64:$Rd),
8783
8800
(OpNode (v4i16 V64:$Rn),
8784
- (v4i16 (AArch64duplane16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
8801
+ (dup_v8i16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
8785
8802
bits<3> idx;
8786
8803
let Inst{11} = idx{2};
8787
8804
let Inst{21} = idx{1};
@@ -8807,7 +8824,7 @@ multiclass SIMDIndexedHS<bit U, bits<4> opc, string asm,
8807
8824
asm, ".2s", ".2s", ".2s", ".s",
8808
8825
[(set (v2i32 V64:$Rd),
8809
8826
(OpNode (v2i32 V64:$Rn),
8810
- (v2i32 (AArch64duplane32 ( v4i32 V128:$Rm), VectorIndexS:$idx) )))]> {
8827
+ (dup_v4i32 ( v4i32 V128:$Rm), VectorIndexS:$idx)))]> {
8811
8828
bits<2> idx;
8812
8829
let Inst{11} = idx{1};
8813
8830
let Inst{21} = idx{0};
@@ -8855,7 +8872,7 @@ multiclass SIMDVectorIndexedHS<bit U, bits<4> opc, string asm,
8855
8872
asm, ".4h", ".4h", ".4h", ".h",
8856
8873
[(set (v4i16 V64:$Rd),
8857
8874
(OpNode (v4i16 V64:$Rn),
8858
- (v4i16 (AArch64duplane16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
8875
+ (dup_v8i16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
8859
8876
bits<3> idx;
8860
8877
let Inst{11} = idx{2};
8861
8878
let Inst{21} = idx{1};
@@ -8881,7 +8898,7 @@ multiclass SIMDVectorIndexedHS<bit U, bits<4> opc, string asm,
8881
8898
asm, ".2s", ".2s", ".2s", ".s",
8882
8899
[(set (v2i32 V64:$Rd),
8883
8900
(OpNode (v2i32 V64:$Rn),
8884
- (v2i32 (AArch64duplane32 ( v4i32 V128:$Rm), VectorIndexS:$idx) )))]> {
8901
+ (dup_v4i32 ( v4i32 V128:$Rm), VectorIndexS:$idx)))]> {
8885
8902
bits<2> idx;
8886
8903
let Inst{11} = idx{1};
8887
8904
let Inst{21} = idx{0};
@@ -8907,7 +8924,7 @@ multiclass SIMDVectorIndexedHSTied<bit U, bits<4> opc, string asm,
8907
8924
asm, ".4h", ".4h", ".4h", ".h",
8908
8925
[(set (v4i16 V64:$dst),
8909
8926
(OpNode (v4i16 V64:$Rd),(v4i16 V64:$Rn),
8910
- (v4i16 (AArch64duplane16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
8927
+ (dup_v8i16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
8911
8928
bits<3> idx;
8912
8929
let Inst{11} = idx{2};
8913
8930
let Inst{21} = idx{1};
@@ -8933,7 +8950,7 @@ multiclass SIMDVectorIndexedHSTied<bit U, bits<4> opc, string asm,
8933
8950
asm, ".2s", ".2s", ".2s", ".s",
8934
8951
[(set (v2i32 V64:$dst),
8935
8952
(OpNode (v2i32 V64:$Rd), (v2i32 V64:$Rn),
8936
- (v2i32 (AArch64duplane32 ( v4i32 V128:$Rm), VectorIndexS:$idx) )))]> {
8953
+ (dup_v4i32 ( v4i32 V128:$Rm), VectorIndexS:$idx)))]> {
8937
8954
bits<2> idx;
8938
8955
let Inst{11} = idx{1};
8939
8956
let Inst{21} = idx{0};
@@ -8960,7 +8977,7 @@ multiclass SIMDIndexedLongSD<bit U, bits<4> opc, string asm,
8960
8977
asm, ".4s", ".4s", ".4h", ".h",
8961
8978
[(set (v4i32 V128:$Rd),
8962
8979
(OpNode (v4i16 V64:$Rn),
8963
- (v4i16 (AArch64duplane16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
8980
+ (dup_v8i16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
8964
8981
bits<3> idx;
8965
8982
let Inst{11} = idx{2};
8966
8983
let Inst{21} = idx{1};
@@ -8987,7 +9004,7 @@ multiclass SIMDIndexedLongSD<bit U, bits<4> opc, string asm,
8987
9004
asm, ".2d", ".2d", ".2s", ".s",
8988
9005
[(set (v2i64 V128:$Rd),
8989
9006
(OpNode (v2i32 V64:$Rn),
8990
- (v2i32 (AArch64duplane32 ( v4i32 V128:$Rm), VectorIndexS:$idx) )))]> {
9007
+ (dup_v4i32 ( v4i32 V128:$Rm), VectorIndexS:$idx)))]> {
8991
9008
bits<2> idx;
8992
9009
let Inst{11} = idx{1};
8993
9010
let Inst{21} = idx{0};
@@ -9033,8 +9050,8 @@ multiclass SIMDIndexedLongSQDMLXSDTied<bit U, bits<4> opc, string asm,
9033
9050
(Accum (v4i32 V128:$Rd),
9034
9051
(v4i32 (int_aarch64_neon_sqdmull
9035
9052
(v4i16 V64:$Rn),
9036
- (v4i16 (AArch64duplane16 (v8i16 V128_lo:$Rm),
9037
- VectorIndexH:$idx) )))))]> {
9053
+ (dup_v8i16 (v8i16 V128_lo:$Rm),
9054
+ VectorIndexH:$idx)))))]> {
9038
9055
bits<3> idx;
9039
9056
let Inst{11} = idx{2};
9040
9057
let Inst{21} = idx{1};
@@ -9064,8 +9081,7 @@ multiclass SIMDIndexedLongSQDMLXSDTied<bit U, bits<4> opc, string asm,
9064
9081
(Accum (v2i64 V128:$Rd),
9065
9082
(v2i64 (int_aarch64_neon_sqdmull
9066
9083
(v2i32 V64:$Rn),
9067
- (v2i32 (AArch64duplane32 (v4i32 V128:$Rm),
9068
- VectorIndexS:$idx))))))]> {
9084
+ (dup_v4i32 (v4i32 V128:$Rm), VectorIndexS:$idx)))))]> {
9069
9085
bits<2> idx;
9070
9086
let Inst{11} = idx{1};
9071
9087
let Inst{21} = idx{0};
@@ -9110,9 +9126,8 @@ multiclass SIMDIndexedLongSQDMLXSDTied<bit U, bits<4> opc, string asm,
9110
9126
(i32 (vector_extract
9111
9127
(v4i32 (int_aarch64_neon_sqdmull
9112
9128
(v4i16 V64:$Rn),
9113
- (v4i16 (AArch64duplane16
9114
- (v8i16 V128_lo:$Rm),
9115
- VectorIndexH:$idx)))),
9129
+ (dup_v8i16 (v8i16 V128_lo:$Rm),
9130
+ VectorIndexH:$idx))),
9116
9131
(i64 0))))),
9117
9132
(!cast<Instruction>(NAME # v1i32_indexed)
9118
9133
FPR32Op:$Rd,
@@ -9145,7 +9160,7 @@ multiclass SIMDVectorIndexedLongSD<bit U, bits<4> opc, string asm,
9145
9160
asm, ".4s", ".4s", ".4h", ".h",
9146
9161
[(set (v4i32 V128:$Rd),
9147
9162
(OpNode (v4i16 V64:$Rn),
9148
- (v4i16 (AArch64duplane16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
9163
+ (dup_v8i16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
9149
9164
bits<3> idx;
9150
9165
let Inst{11} = idx{2};
9151
9166
let Inst{21} = idx{1};
@@ -9172,7 +9187,7 @@ multiclass SIMDVectorIndexedLongSD<bit U, bits<4> opc, string asm,
9172
9187
asm, ".2d", ".2d", ".2s", ".s",
9173
9188
[(set (v2i64 V128:$Rd),
9174
9189
(OpNode (v2i32 V64:$Rn),
9175
- (v2i32 (AArch64duplane32 ( v4i32 V128:$Rm), VectorIndexS:$idx) )))]> {
9190
+ (dup_v4i32 ( v4i32 V128:$Rm), VectorIndexS:$idx)))]> {
9176
9191
bits<2> idx;
9177
9192
let Inst{11} = idx{1};
9178
9193
let Inst{21} = idx{0};
@@ -9201,7 +9216,7 @@ multiclass SIMDVectorIndexedLongSDTied<bit U, bits<4> opc, string asm,
9201
9216
asm, ".4s", ".4s", ".4h", ".h",
9202
9217
[(set (v4i32 V128:$dst),
9203
9218
(OpNode (v4i32 V128:$Rd), (v4i16 V64:$Rn),
9204
- (v4i16 (AArch64duplane16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx) )))]> {
9219
+ (dup_v8i16 ( v8i16 V128_lo:$Rm), VectorIndexH:$idx)))]> {
9205
9220
bits<3> idx;
9206
9221
let Inst{11} = idx{2};
9207
9222
let Inst{21} = idx{1};
@@ -9228,7 +9243,7 @@ multiclass SIMDVectorIndexedLongSDTied<bit U, bits<4> opc, string asm,
9228
9243
asm, ".2d", ".2d", ".2s", ".s",
9229
9244
[(set (v2i64 V128:$dst),
9230
9245
(OpNode (v2i64 V128:$Rd), (v2i32 V64:$Rn),
9231
- (v2i32 (AArch64duplane32 ( v4i32 V128:$Rm), VectorIndexS:$idx) )))]> {
9246
+ (dup_v4i32 ( v4i32 V128:$Rm), VectorIndexS:$idx)))]> {
9232
9247
bits<2> idx;
9233
9248
let Inst{11} = idx{1};
9234
9249
let Inst{21} = idx{0};
@@ -10850,8 +10865,8 @@ multiclass SIMDIndexedSQRDMLxHSDTied<bit U, bits<4> opc, string asm,
10850
10865
asm, ".4h", ".4h", ".4h", ".h",
10851
10866
[(set (v4i16 V64:$dst),
10852
10867
(v4i16 (op (v4i16 V64:$Rd), (v4i16 V64:$Rn),
10853
- (v4i16 (AArch64duplane16 (v8i16 V128_lo:$Rm),
10854
- VectorIndexH:$idx) ))))]> {
10868
+ (dup_v8i16 (v8i16 V128_lo:$Rm),
10869
+ VectorIndexH:$idx))))]> {
10855
10870
bits<3> idx;
10856
10871
let Inst{11} = idx{2};
10857
10872
let Inst{21} = idx{1};
@@ -10876,8 +10891,7 @@ multiclass SIMDIndexedSQRDMLxHSDTied<bit U, bits<4> opc, string asm,
10876
10891
asm, ".2s", ".2s", ".2s", ".s",
10877
10892
[(set (v2i32 V64:$dst),
10878
10893
(v2i32 (op (v2i32 V64:$Rd), (v2i32 V64:$Rn),
10879
- (v2i32 (AArch64duplane32 (v4i32 V128:$Rm),
10880
- VectorIndexS:$idx)))))]> {
10894
+ (dup_v4i32 (v4i32 V128:$Rm), VectorIndexS:$idx))))]> {
10881
10895
bits<2> idx;
10882
10896
let Inst{11} = idx{1};
10883
10897
let Inst{21} = idx{0};
0 commit comments