@@ -4307,18 +4307,23 @@ multiclass NeonI_Scalar2SameMisc_accum_BHSD_size<bit u, bits<5> opcode,
4307
4307
4308
4308
class Neon_Scalar2SameMisc_fcvtxn_D_size_patterns<SDPatternOperator opnode,
4309
4309
Instruction INSTD>
4310
- : Pat<(v1f32 (opnode (v1f64 FPR64:$Rn))),
4310
+ : Pat<(f32 (opnode (f64 FPR64:$Rn))),
4311
4311
(INSTD FPR64:$Rn)>;
4312
4312
4313
4313
multiclass Neon_Scalar2SameMisc_fcvt_SD_size_patterns<SDPatternOperator opnode,
4314
4314
Instruction INSTS,
4315
4315
Instruction INSTD> {
4316
- def : Pat<(v1i32 (opnode (v1f32 FPR32:$Rn))),
4316
+ def : Pat<(v1i32 (opnode (f32 FPR32:$Rn))),
4317
4317
(INSTS FPR32:$Rn)>;
4318
- def : Pat<(v1i64 (opnode (v1f64 FPR64:$Rn))),
4318
+ def : Pat<(v1i64 (opnode (f64 FPR64:$Rn))),
4319
4319
(INSTD FPR64:$Rn)>;
4320
4320
}
4321
4321
4322
+ class Neon_Scalar2SameMisc_vcvt_D_size_patterns<SDPatternOperator opnode,
4323
+ Instruction INSTD>
4324
+ : Pat<(v1i64 (opnode (v1f64 FPR64:$Rn))),
4325
+ (INSTD FPR64:$Rn)>;
4326
+
4322
4327
multiclass Neon_Scalar2SameMisc_cvt_SD_size_patterns<SDPatternOperator Sopnode,
4323
4328
SDPatternOperator Dopnode,
4324
4329
Instruction INSTS,
@@ -4982,44 +4987,56 @@ def : Neon_Scalar2SameMisc_fcvtxn_D_size_patterns<int_aarch64_neon_fcvtxn,
4982
4987
FCVTXN>;
4983
4988
4984
4989
defm FCVTNS : NeonI_Scalar2SameMisc_SD_size<0b0, 0b0, 0b11010, "fcvtns">;
4985
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtns ,
4990
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtns ,
4986
4991
FCVTNSss, FCVTNSdd>;
4992
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtns, FCVTNSdd>;
4987
4993
4988
4994
defm FCVTNU : NeonI_Scalar2SameMisc_SD_size<0b1, 0b0, 0b11010, "fcvtnu">;
4989
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtnu ,
4995
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtnu ,
4990
4996
FCVTNUss, FCVTNUdd>;
4997
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtnu, FCVTNUdd>;
4991
4998
4992
4999
defm FCVTMS : NeonI_Scalar2SameMisc_SD_size<0b0, 0b0, 0b11011, "fcvtms">;
4993
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtms ,
5000
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtms ,
4994
5001
FCVTMSss, FCVTMSdd>;
5002
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtms, FCVTMSdd>;
4995
5003
4996
5004
defm FCVTMU : NeonI_Scalar2SameMisc_SD_size<0b1, 0b0, 0b11011, "fcvtmu">;
4997
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtmu ,
5005
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtmu ,
4998
5006
FCVTMUss, FCVTMUdd>;
5007
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtmu, FCVTMUdd>;
4999
5008
5000
5009
defm FCVTAS : NeonI_Scalar2SameMisc_SD_size<0b0, 0b0, 0b11100, "fcvtas">;
5001
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtas ,
5010
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtas ,
5002
5011
FCVTASss, FCVTASdd>;
5012
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtas, FCVTASdd>;
5003
5013
5004
5014
defm FCVTAU : NeonI_Scalar2SameMisc_SD_size<0b1, 0b0, 0b11100, "fcvtau">;
5005
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtau ,
5015
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtau ,
5006
5016
FCVTAUss, FCVTAUdd>;
5017
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtau, FCVTAUdd>;
5007
5018
5008
5019
defm FCVTPS : NeonI_Scalar2SameMisc_SD_size<0b0, 0b1, 0b11010, "fcvtps">;
5009
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtps ,
5020
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtps ,
5010
5021
FCVTPSss, FCVTPSdd>;
5022
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtps, FCVTPSdd>;
5011
5023
5012
5024
defm FCVTPU : NeonI_Scalar2SameMisc_SD_size<0b1, 0b1, 0b11010, "fcvtpu">;
5013
- defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_arm_neon_vcvtpu ,
5025
+ defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtpu ,
5014
5026
FCVTPUss, FCVTPUdd>;
5027
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_arm_neon_vcvtpu, FCVTPUdd>;
5015
5028
5016
5029
defm FCVTZS : NeonI_Scalar2SameMisc_SD_size<0b0, 0b1, 0b11011, "fcvtzs">;
5017
5030
defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtzs,
5018
5031
FCVTZSss, FCVTZSdd>;
5032
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_aarch64_neon_vcvtzs,
5033
+ FCVTZSdd>;
5019
5034
5020
5035
defm FCVTZU : NeonI_Scalar2SameMisc_SD_size<0b1, 0b1, 0b11011, "fcvtzu">;
5021
5036
defm : Neon_Scalar2SameMisc_fcvt_SD_size_patterns<int_aarch64_neon_fcvtzu,
5022
5037
FCVTZUss, FCVTZUdd>;
5038
+ def : Neon_Scalar2SameMisc_vcvt_D_size_patterns<int_aarch64_neon_vcvtzu,
5039
+ FCVTZUdd>;
5023
5040
5024
5041
// Patterns For Convert Instructions Between v1f64 and v1i64
5025
5042
class Neon_Scalar2SameMisc_cvtf_v1f64_pattern<SDPatternOperator opnode,
@@ -8297,12 +8314,12 @@ multiclass NeonI_2VMisc_D_Narrow<string asmop, string prefix, bit U,
8297
8314
let Constraints = "$src = $Rd";
8298
8315
}
8299
8316
8300
- def : Pat<(v2f32 (int_aarch64_neon_fcvtxn (v2f64 VPR128:$Rn))),
8317
+ def : Pat<(v2f32 (int_aarch64_neon_vcvtxn (v2f64 VPR128:$Rn))),
8301
8318
(!cast<Instruction>(prefix # "2d2s") VPR128:$Rn)>;
8302
8319
8303
8320
def : Pat<(v4f32 (concat_vectors
8304
8321
(v2f32 VPR64:$src),
8305
- (v2f32 (int_aarch64_neon_fcvtxn (v2f64 VPR128:$Rn))))),
8322
+ (v2f32 (int_aarch64_neon_vcvtxn (v2f64 VPR128:$Rn))))),
8306
8323
(!cast<Instruction>(prefix # "2d4s")
8307
8324
(v4f32 (SUBREG_TO_REG (i32 0), VPR64:$src, sub_64)),
8308
8325
VPR128:$Rn)>;
0 commit comments