@@ -4800,23 +4800,23 @@ multiclass sve_int_index_ii<string asm, SDPatternOperator op, SDPatternOperator
4800
4800
def _S : sve_int_index_ii<0b10, asm, ZPR32, simm5_32b>;
4801
4801
def _D : sve_int_index_ii<0b11, asm, ZPR64, simm5_64b>;
4802
4802
4803
- def : Pat<(nxv16i8 (op simm5_8b:$imm5, simm5_8b:$imm5b)),
4803
+ def : Pat<(nxv16i8 (op simm5_8b:$imm5b)),
4804
+ (!cast<Instruction>(NAME # "_B") (i32 0), simm5_8b:$imm5b)>;
4805
+ def : Pat<(nxv8i16 (op simm5_16b:$imm5b)),
4806
+ (!cast<Instruction>(NAME # "_H") (i32 0), simm5_16b:$imm5b)>;
4807
+ def : Pat<(nxv4i32 (op simm5_32b:$imm5b)),
4808
+ (!cast<Instruction>(NAME # "_S") (i32 0), simm5_32b:$imm5b)>;
4809
+ def : Pat<(nxv2i64 (op simm5_64b:$imm5b)),
4810
+ (!cast<Instruction>(NAME # "_D") (i64 0), simm5_64b:$imm5b)>;
4811
+
4812
+ // add(step_vector(step), dup(X)) -> index(X, step).
4813
+ def : Pat<(add (nxv16i8 (oneuseop simm5_8b:$imm5b)), (nxv16i8 (AArch64dup(simm5_8b:$imm5)))),
4804
4814
(!cast<Instruction>(NAME # "_B") simm5_8b:$imm5, simm5_8b:$imm5b)>;
4805
- def : Pat<(nxv8i16 (op simm5_16b:$imm5, simm5_16b:$imm5b )),
4815
+ def : Pat<(add ( nxv8i16 (oneuseop simm5_16b:$imm5b)), (nxv8i16 (AArch64dup( simm5_16b:$imm5)) )),
4806
4816
(!cast<Instruction>(NAME # "_H") simm5_16b:$imm5, simm5_16b:$imm5b)>;
4807
- def : Pat<(nxv4i32 (op simm5_32b:$imm5, simm5_32b:$imm5b )),
4817
+ def : Pat<(add ( nxv4i32 (oneuseop simm5_32b:$imm5b)), (nxv4i32 (AArch64dup( simm5_32b:$imm5)) )),
4808
4818
(!cast<Instruction>(NAME # "_S") simm5_32b:$imm5, simm5_32b:$imm5b)>;
4809
- def : Pat<(nxv2i64 (op simm5_64b:$imm5, simm5_64b:$imm5b)),
4810
- (!cast<Instruction>(NAME # "_D") simm5_64b:$imm5, simm5_64b:$imm5b)>;
4811
-
4812
- // add(index_vector(zero, step), dup(X)) -> index_vector(X, step).
4813
- def : Pat<(add (nxv16i8 (oneuseop (i32 0), simm5_8b:$imm5b)), (nxv16i8 (AArch64dup(simm5_8b:$imm5)))),
4814
- (!cast<Instruction>(NAME # "_B") simm5_8b:$imm5, simm5_8b:$imm5b)>;
4815
- def : Pat<(add (nxv8i16 (oneuseop (i32 0), simm5_16b:$imm5b)), (nxv8i16 (AArch64dup(simm5_16b:$imm5)))),
4816
- (!cast<Instruction>(NAME # "_H") simm5_16b:$imm5, simm5_16b:$imm5b)>;
4817
- def : Pat<(add (nxv4i32 (oneuseop (i32 0), simm5_32b:$imm5b)), (nxv4i32 (AArch64dup(simm5_32b:$imm5)))),
4818
- (!cast<Instruction>(NAME # "_S") simm5_32b:$imm5, simm5_32b:$imm5b)>;
4819
- def : Pat<(add (nxv2i64 (oneuseop (i64 0), simm5_64b:$imm5b)), (nxv2i64 (AArch64dup(simm5_64b:$imm5)))),
4819
+ def : Pat<(add (nxv2i64 (oneuseop simm5_64b:$imm5b)), (nxv2i64 (AArch64dup(simm5_64b:$imm5)))),
4820
4820
(!cast<Instruction>(NAME # "_D") simm5_64b:$imm5, simm5_64b:$imm5b)>;
4821
4821
}
4822
4822
@@ -4843,43 +4843,43 @@ multiclass sve_int_index_ir<string asm, SDPatternOperator op, SDPatternOperator
4843
4843
def _S : sve_int_index_ir<0b10, asm, ZPR32, GPR32, simm5_32b>;
4844
4844
def _D : sve_int_index_ir<0b11, asm, ZPR64, GPR64, simm5_64b>;
4845
4845
4846
- def : Pat<(nxv16i8 (op simm5_8b:$imm5, GPR32:$Rm)),
4847
- (!cast<Instruction>(NAME # "_B") simm5_8b:$imm5 , GPR32:$Rm)>;
4848
- def : Pat<(nxv8i16 (op simm5_16b:$imm5, GPR32:$Rm)),
4849
- (!cast<Instruction>(NAME # "_H") simm5_16b:$imm5 , GPR32:$Rm)>;
4850
- def : Pat<(nxv4i32 (op simm5_32b:$imm5, GPR32:$Rm)),
4851
- (!cast<Instruction>(NAME # "_S") simm5_32b:$imm5 , GPR32:$Rm)>;
4852
- def : Pat<(nxv2i64 (op simm5_64b:$imm5, GPR64:$Rm)),
4853
- (!cast<Instruction>(NAME # "_D") simm5_64b:$imm5 , GPR64:$Rm)>;
4846
+ def : Pat<(nxv16i8 (op GPR32:$Rm)),
4847
+ (!cast<Instruction>(NAME # "_B") (i32 0) , GPR32:$Rm)>;
4848
+ def : Pat<(nxv8i16 (op GPR32:$Rm)),
4849
+ (!cast<Instruction>(NAME # "_H") (i32 0) , GPR32:$Rm)>;
4850
+ def : Pat<(nxv4i32 (op GPR32:$Rm)),
4851
+ (!cast<Instruction>(NAME # "_S") (i32 0) , GPR32:$Rm)>;
4852
+ def : Pat<(nxv2i64 (op GPR64:$Rm)),
4853
+ (!cast<Instruction>(NAME # "_D") (i64 0) , GPR64:$Rm)>;
4854
4854
4855
- // add(index_vector(zero, step), dup(X)) -> index_vector (X, step).
4856
- def : Pat<(add (nxv16i8 (oneuseop (i32 0), GPR32:$Rm)), (nxv16i8 (AArch64dup(simm5_8b:$imm5)))),
4855
+ // add(step_vector( step), dup(X)) -> index (X, step).
4856
+ def : Pat<(add (nxv16i8 (oneuseop GPR32:$Rm)), (nxv16i8 (AArch64dup(simm5_8b:$imm5)))),
4857
4857
(!cast<Instruction>(NAME # "_B") simm5_8b:$imm5, GPR32:$Rm)>;
4858
- def : Pat<(add (nxv8i16 (oneuseop (i32 0), GPR32:$Rm)), (nxv8i16 (AArch64dup(simm5_16b:$imm5)))),
4858
+ def : Pat<(add (nxv8i16 (oneuseop GPR32:$Rm)), (nxv8i16 (AArch64dup(simm5_16b:$imm5)))),
4859
4859
(!cast<Instruction>(NAME # "_H") simm5_16b:$imm5, GPR32:$Rm)>;
4860
- def : Pat<(add (nxv4i32 (oneuseop (i32 0), GPR32:$Rm)), (nxv4i32 (AArch64dup(simm5_32b:$imm5)))),
4860
+ def : Pat<(add (nxv4i32 (oneuseop GPR32:$Rm)), (nxv4i32 (AArch64dup(simm5_32b:$imm5)))),
4861
4861
(!cast<Instruction>(NAME # "_S") simm5_32b:$imm5, GPR32:$Rm)>;
4862
- def : Pat<(add (nxv2i64 (oneuseop (i64 0), GPR64:$Rm)), (nxv2i64 (AArch64dup(simm5_64b:$imm5)))),
4862
+ def : Pat<(add (nxv2i64 (oneuseop GPR64:$Rm)), (nxv2i64 (AArch64dup(simm5_64b:$imm5)))),
4863
4863
(!cast<Instruction>(NAME # "_D") simm5_64b:$imm5, GPR64:$Rm)>;
4864
4864
4865
- // mul(index_vector(0, 1), dup(Y)) -> index_vector (0, Y).
4866
- def : Pat<(mulop (nxv16i1 (AArch64ptrue 31)), (nxv16i8 (oneuseop (i32 0), (i32 1))), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))),
4865
+ // mul(step_vector( 1), dup(Y)) -> index (0, Y).
4866
+ def : Pat<(mulop (nxv16i1 (AArch64ptrue 31)), (nxv16i8 (oneuseop (i32 1))), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))),
4867
4867
(!cast<Instruction>(NAME # "_B") (i32 0), GPR32:$Rm)>;
4868
- def : Pat<(mulop (nxv8i1 (AArch64ptrue 31)), (nxv8i16 (oneuseop (i32 0), (i32 1))), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))),
4868
+ def : Pat<(mulop (nxv8i1 (AArch64ptrue 31)), (nxv8i16 (oneuseop (i32 1))), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))),
4869
4869
(!cast<Instruction>(NAME # "_H") (i32 0), GPR32:$Rm)>;
4870
- def : Pat<(mulop (nxv4i1 (AArch64ptrue 31)), (nxv4i32 (oneuseop (i32 0), (i32 1))), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))),
4870
+ def : Pat<(mulop (nxv4i1 (AArch64ptrue 31)), (nxv4i32 (oneuseop (i32 1))), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))),
4871
4871
(!cast<Instruction>(NAME # "_S") (i32 0), GPR32:$Rm)>;
4872
- def : Pat<(mulop (nxv2i1 (AArch64ptrue 31)), (nxv2i64 (oneuseop (i64 0), (i64 1))), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))),
4872
+ def : Pat<(mulop (nxv2i1 (AArch64ptrue 31)), (nxv2i64 (oneuseop (i64 1))), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))),
4873
4873
(!cast<Instruction>(NAME # "_D") (i64 0), GPR64:$Rm)>;
4874
4874
4875
- // add(mul(index_vector(0, 1), dup(Y), dup(X)) -> index_vector (X, Y).
4876
- def : Pat<(add (muloneuseop (nxv16i1 (AArch64ptrue 31)), (nxv16i8 (oneuseop (i32 0), (i32 1))), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))), (nxv16i8 (AArch64dup(simm5_8b:$imm5)))),
4875
+ // add(mul(step_vector( 1), dup(Y), dup(X)) -> index (X, Y).
4876
+ def : Pat<(add (muloneuseop (nxv16i1 (AArch64ptrue 31)), (nxv16i8 (oneuseop (i32 1))), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))), (nxv16i8 (AArch64dup(simm5_8b:$imm5)))),
4877
4877
(!cast<Instruction>(NAME # "_B") simm5_8b:$imm5, GPR32:$Rm)>;
4878
- def : Pat<(add (muloneuseop (nxv8i1 (AArch64ptrue 31)), (nxv8i16 (oneuseop (i32 0), (i32 1))), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))), (nxv8i16 (AArch64dup(simm5_16b:$imm5)))),
4878
+ def : Pat<(add (muloneuseop (nxv8i1 (AArch64ptrue 31)), (nxv8i16 (oneuseop (i32 1))), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))), (nxv8i16 (AArch64dup(simm5_16b:$imm5)))),
4879
4879
(!cast<Instruction>(NAME # "_H") simm5_16b:$imm5, GPR32:$Rm)>;
4880
- def : Pat<(add (muloneuseop (nxv4i1 (AArch64ptrue 31)), (nxv4i32 (oneuseop (i32 0), (i32 1))), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))), (nxv4i32 (AArch64dup(simm5_32b:$imm5)))),
4880
+ def : Pat<(add (muloneuseop (nxv4i1 (AArch64ptrue 31)), (nxv4i32 (oneuseop (i32 1))), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))), (nxv4i32 (AArch64dup(simm5_32b:$imm5)))),
4881
4881
(!cast<Instruction>(NAME # "_S") simm5_32b:$imm5, GPR32:$Rm)>;
4882
- def : Pat<(add (muloneuseop (nxv2i1 (AArch64ptrue 31)), (nxv2i64 (oneuseop (i64 0), (i64 1))), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))), (nxv2i64 (AArch64dup(simm5_64b:$imm5)))),
4882
+ def : Pat<(add (muloneuseop (nxv2i1 (AArch64ptrue 31)), (nxv2i64 (oneuseop (i64 1))), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))), (nxv2i64 (AArch64dup(simm5_64b:$imm5)))),
4883
4883
(!cast<Instruction>(NAME # "_D") simm5_64b:$imm5, GPR64:$Rm)>;
4884
4884
}
4885
4885
@@ -4906,23 +4906,14 @@ multiclass sve_int_index_ri<string asm, SDPatternOperator op, SDPatternOperator
4906
4906
def _S : sve_int_index_ri<0b10, asm, ZPR32, GPR32, simm5_32b>;
4907
4907
def _D : sve_int_index_ri<0b11, asm, ZPR64, GPR64, simm5_64b>;
4908
4908
4909
- def : Pat<(nxv16i8 (op GPR32:$Rm, simm5_8b:$imm5)),
4909
+ // add(step_vector(step), dup(X)) -> index(X, step).
4910
+ def : Pat<(add (nxv16i8 (oneuseop simm5_8b:$imm5)), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))),
4910
4911
(!cast<Instruction>(NAME # "_B") GPR32:$Rm, simm5_8b:$imm5)>;
4911
- def : Pat<(nxv8i16 (op GPR32:$Rm, simm5_16b:$imm5 )),
4912
+ def : Pat<(add ( nxv8i16 (oneuseop simm5_16b:$imm5)), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)) )),
4912
4913
(!cast<Instruction>(NAME # "_H") GPR32:$Rm, simm5_16b:$imm5)>;
4913
- def : Pat<(nxv4i32 (op GPR32:$Rm, simm5_32b:$imm5 )),
4914
+ def : Pat<(add ( nxv4i32 (oneuseop simm5_32b:$imm5)), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)) )),
4914
4915
(!cast<Instruction>(NAME # "_S") GPR32:$Rm, simm5_32b:$imm5)>;
4915
- def : Pat<(nxv2i64 (op GPR64:$Rm, simm5_64b:$imm5)),
4916
- (!cast<Instruction>(NAME # "_D") GPR64:$Rm, simm5_64b:$imm5)>;
4917
-
4918
- // add(index_vector(zero, step), dup(X)) -> index_vector(X, step).
4919
- def : Pat<(add (nxv16i8 (oneuseop (i32 0), simm5_8b:$imm5)), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))),
4920
- (!cast<Instruction>(NAME # "_B") GPR32:$Rm, simm5_8b:$imm5)>;
4921
- def : Pat<(add (nxv8i16 (oneuseop (i32 0), simm5_16b:$imm5)), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))),
4922
- (!cast<Instruction>(NAME # "_H") GPR32:$Rm, simm5_16b:$imm5)>;
4923
- def : Pat<(add (nxv4i32 (oneuseop (i32 0), simm5_32b:$imm5)), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))),
4924
- (!cast<Instruction>(NAME # "_S") GPR32:$Rm, simm5_32b:$imm5)>;
4925
- def : Pat<(add (nxv2i64 (oneuseop (i64 0), simm5_64b:$imm5)), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))),
4916
+ def : Pat<(add (nxv2i64 (oneuseop simm5_64b:$imm5)), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))),
4926
4917
(!cast<Instruction>(NAME # "_D") GPR64:$Rm, simm5_64b:$imm5)>;
4927
4918
}
4928
4919
@@ -4949,29 +4940,24 @@ multiclass sve_int_index_rr<string asm, SDPatternOperator op, SDPatternOperator
4949
4940
def _S : sve_int_index_rr<0b10, asm, ZPR32, GPR32>;
4950
4941
def _D : sve_int_index_rr<0b11, asm, ZPR64, GPR64>;
4951
4942
4952
- def : SVE_2_Op_Pat<nxv16i8, op, i32, i32, !cast<Instruction>(NAME # _B)>;
4953
- def : SVE_2_Op_Pat<nxv8i16, op, i32, i32, !cast<Instruction>(NAME # _H)>;
4954
- def : SVE_2_Op_Pat<nxv4i32, op, i32, i32, !cast<Instruction>(NAME # _S)>;
4955
- def : SVE_2_Op_Pat<nxv2i64, op, i64, i64, !cast<Instruction>(NAME # _D)>;
4956
-
4957
- // add(index_vector(zero, step), dup(X)) -> index_vector(X, step).
4958
- def : Pat<(add (nxv16i8 (oneuseop (i32 0), GPR32:$Rm)), (nxv16i8 (AArch64dup(i32 GPR32:$Rn)))),
4943
+ // add(step_vector(step), dup(X)) -> index(X, step).
4944
+ def : Pat<(add (nxv16i8 (oneuseop GPR32:$Rm)), (nxv16i8 (AArch64dup(i32 GPR32:$Rn)))),
4959
4945
(!cast<Instruction>(NAME # "_B") GPR32:$Rn, GPR32:$Rm)>;
4960
- def : Pat<(add (nxv8i16 (oneuseop (i32 0), GPR32:$Rm)), (nxv8i16 (AArch64dup(i32 GPR32:$Rn)))),
4946
+ def : Pat<(add (nxv8i16 (oneuseop GPR32:$Rm)), (nxv8i16 (AArch64dup(i32 GPR32:$Rn)))),
4961
4947
(!cast<Instruction>(NAME # "_H") GPR32:$Rn, GPR32:$Rm)>;
4962
- def : Pat<(add (nxv4i32 (oneuseop (i32 0), GPR32:$Rm)), (nxv4i32 (AArch64dup(i32 GPR32:$Rn)))),
4948
+ def : Pat<(add (nxv4i32 (oneuseop GPR32:$Rm)), (nxv4i32 (AArch64dup(i32 GPR32:$Rn)))),
4963
4949
(!cast<Instruction>(NAME # "_S") GPR32:$Rn, GPR32:$Rm)>;
4964
- def : Pat<(add (nxv2i64 (oneuseop (i64 0), GPR64:$Rm)), (nxv2i64 (AArch64dup(i64 GPR64:$Rn)))),
4950
+ def : Pat<(add (nxv2i64 (oneuseop GPR64:$Rm)), (nxv2i64 (AArch64dup(i64 GPR64:$Rn)))),
4965
4951
(!cast<Instruction>(NAME # "_D") GPR64:$Rn, GPR64:$Rm)>;
4966
4952
4967
- // add(mul(index_vector(0, 1), dup(Y), dup(X)) -> index_vector (X, Y).
4968
- def : Pat<(add (mulop (nxv16i1 (AArch64ptrue 31)), (nxv16i8 (oneuseop (i32 0), (i32 1))), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))), (nxv16i8 (AArch64dup(i32 GPR32:$Rn)))),
4953
+ // add(mul(step_vector( 1), dup(Y), dup(X)) -> index (X, Y).
4954
+ def : Pat<(add (mulop (nxv16i1 (AArch64ptrue 31)), (nxv16i8 (oneuseop (i32 1))), (nxv16i8 (AArch64dup(i32 GPR32:$Rm)))), (nxv16i8 (AArch64dup(i32 GPR32:$Rn)))),
4969
4955
(!cast<Instruction>(NAME # "_B") GPR32:$Rn, GPR32:$Rm)>;
4970
- def : Pat<(add (mulop (nxv8i1 (AArch64ptrue 31)), (nxv8i16 (oneuseop (i32 0), (i32 1))), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))),(nxv8i16 (AArch64dup(i32 GPR32:$Rn)))),
4956
+ def : Pat<(add (mulop (nxv8i1 (AArch64ptrue 31)), (nxv8i16 (oneuseop (i32 1))), (nxv8i16 (AArch64dup(i32 GPR32:$Rm)))),(nxv8i16 (AArch64dup(i32 GPR32:$Rn)))),
4971
4957
(!cast<Instruction>(NAME # "_H") GPR32:$Rn, GPR32:$Rm)>;
4972
- def : Pat<(add (mulop (nxv4i1 (AArch64ptrue 31)), (nxv4i32 (oneuseop (i32 0), (i32 1))), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))),(nxv4i32 (AArch64dup(i32 GPR32:$Rn)))),
4958
+ def : Pat<(add (mulop (nxv4i1 (AArch64ptrue 31)), (nxv4i32 (oneuseop (i32 1))), (nxv4i32 (AArch64dup(i32 GPR32:$Rm)))),(nxv4i32 (AArch64dup(i32 GPR32:$Rn)))),
4973
4959
(!cast<Instruction>(NAME # "_S") GPR32:$Rn, GPR32:$Rm)>;
4974
- def : Pat<(add (mulop (nxv2i1 (AArch64ptrue 31)), (nxv2i64 (oneuseop (i64 0), (i64 1))), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))),(nxv2i64 (AArch64dup(i64 GPR64:$Rn)))),
4960
+ def : Pat<(add (mulop (nxv2i1 (AArch64ptrue 31)), (nxv2i64 (oneuseop (i64 1))), (nxv2i64 (AArch64dup(i64 GPR64:$Rm)))),(nxv2i64 (AArch64dup(i64 GPR64:$Rn)))),
4975
4961
(!cast<Instruction>(NAME # "_D") GPR64:$Rn, GPR64:$Rm)>;
4976
4962
}
4977
4963
0 commit comments