1010//
1111//===----------------------------------------------------------------------===//
1212
13- def SDT_CMPFP : SDTypeProfile<1, 2, [
14- SDTCisVT<0, FlagsVT>, // out flags
15- SDTCisFP<1>, // lhs
16- SDTCisSameAs<2, 1> // rhs
17- ]>;
18-
19- def SDT_CMPFP0 : SDTypeProfile<1, 1, [
20- SDTCisVT<0, FlagsVT>, // out flags
21- SDTCisFP<1> // operand
22- ]>;
23-
13+ def SDT_CMPFP0 : SDTypeProfile<0, 1, [SDTCisFP<0>]>;
2414def SDT_VMOVDRR : SDTypeProfile<1, 2, [SDTCisVT<0, f64>, SDTCisVT<1, i32>,
2515 SDTCisSameAs<1, 2>]>;
2616def SDT_VMOVRRD : SDTypeProfile<2, 1, [SDTCisVT<0, i32>, SDTCisSameAs<0, 1>,
2717 SDTCisVT<2, f64>]>;
2818
2919def SDT_VMOVSR : SDTypeProfile<1, 1, [SDTCisVT<0, f32>, SDTCisVT<1, i32>]>;
3020
31- def arm_cmpfp : SDNode<"ARMISD::CMPFP", SDT_CMPFP>;
32- def arm_cmpfp0 : SDNode<"ARMISD::CMPFPw0", SDT_CMPFP0>;
33- def arm_cmpfpe : SDNode<"ARMISD::CMPFPE", SDT_CMPFP>;
34- def arm_cmpfpe0 : SDNode<"ARMISD::CMPFPEw0", SDT_CMPFP0>;
35-
36- def arm_fmstat : SDNode<"ARMISD::FMSTAT",
37- SDTypeProfile<0, 1, [
38- SDTCisVT<0, FlagsVT> // in flags
39- ]>,
40- [SDNPOutGlue] // TODO: Change Glue to a normal result.
41- >;
42-
21+ def arm_fmstat : SDNode<"ARMISD::FMSTAT", SDTNone, [SDNPInGlue, SDNPOutGlue]>;
22+ def arm_cmpfp : SDNode<"ARMISD::CMPFP", SDT_ARMCmp, [SDNPOutGlue]>;
23+ def arm_cmpfp0 : SDNode<"ARMISD::CMPFPw0", SDT_CMPFP0, [SDNPOutGlue]>;
24+ def arm_cmpfpe : SDNode<"ARMISD::CMPFPE", SDT_ARMCmp, [SDNPOutGlue]>;
25+ def arm_cmpfpe0: SDNode<"ARMISD::CMPFPEw0",SDT_CMPFP0, [SDNPOutGlue]>;
4326def arm_fmdrr : SDNode<"ARMISD::VMOVDRR", SDT_VMOVDRR>;
4427def arm_fmrrd : SDNode<"ARMISD::VMOVRRD", SDT_VMOVRRD>;
4528def arm_vmovsr : SDNode<"ARMISD::VMOVSR", SDT_VMOVSR>;
@@ -623,12 +606,12 @@ let Defs = [FPSCR_NZCV] in {
623606def VCMPED : ADuI<0b11101, 0b11, 0b0100, 0b11, 0,
624607 (outs), (ins DPR:$Dd, DPR:$Dm),
625608 IIC_fpCMP64, "vcmpe", ".f64\t$Dd, $Dm", "",
626- [(set FPSCR_NZCV, ( arm_cmpfpe DPR:$Dd, (f64 DPR:$Dm) ))]>;
609+ [(arm_cmpfpe DPR:$Dd, (f64 DPR:$Dm))]>;
627610
628611def VCMPES : ASuI<0b11101, 0b11, 0b0100, 0b11, 0,
629612 (outs), (ins SPR:$Sd, SPR:$Sm),
630613 IIC_fpCMP32, "vcmpe", ".f32\t$Sd, $Sm", "",
631- [(set FPSCR_NZCV, ( arm_cmpfpe SPR:$Sd, SPR:$Sm) )]> {
614+ [(arm_cmpfpe SPR:$Sd, SPR:$Sm)]> {
632615 // Some single precision VFP instructions may be executed on both NEON and
633616 // VFP pipelines on A8.
634617 let D = VFPNeonA8Domain;
@@ -637,17 +620,17 @@ def VCMPES : ASuI<0b11101, 0b11, 0b0100, 0b11, 0,
637620def VCMPEH : AHuI<0b11101, 0b11, 0b0100, 0b11, 0,
638621 (outs), (ins HPR:$Sd, HPR:$Sm),
639622 IIC_fpCMP16, "vcmpe", ".f16\t$Sd, $Sm",
640- [(set FPSCR_NZCV, ( arm_cmpfpe (f16 HPR:$Sd), (f16 HPR:$Sm) ))]>;
623+ [(arm_cmpfpe (f16 HPR:$Sd), (f16 HPR:$Sm))]>;
641624
642625def VCMPD : ADuI<0b11101, 0b11, 0b0100, 0b01, 0,
643626 (outs), (ins DPR:$Dd, DPR:$Dm),
644627 IIC_fpCMP64, "vcmp", ".f64\t$Dd, $Dm", "",
645- [(set FPSCR_NZCV, ( arm_cmpfp DPR:$Dd, (f64 DPR:$Dm) ))]>;
628+ [(arm_cmpfp DPR:$Dd, (f64 DPR:$Dm))]>;
646629
647630def VCMPS : ASuI<0b11101, 0b11, 0b0100, 0b01, 0,
648631 (outs), (ins SPR:$Sd, SPR:$Sm),
649632 IIC_fpCMP32, "vcmp", ".f32\t$Sd, $Sm", "",
650- [(set FPSCR_NZCV, ( arm_cmpfp SPR:$Sd, SPR:$Sm) )]> {
633+ [(arm_cmpfp SPR:$Sd, SPR:$Sm)]> {
651634 // Some single precision VFP instructions may be executed on both NEON and
652635 // VFP pipelines on A8.
653636 let D = VFPNeonA8Domain;
@@ -656,7 +639,7 @@ def VCMPS : ASuI<0b11101, 0b11, 0b0100, 0b01, 0,
656639def VCMPH : AHuI<0b11101, 0b11, 0b0100, 0b01, 0,
657640 (outs), (ins HPR:$Sd, HPR:$Sm),
658641 IIC_fpCMP16, "vcmp", ".f16\t$Sd, $Sm",
659- [(set FPSCR_NZCV, ( arm_cmpfp (f16 HPR:$Sd), (f16 HPR:$Sm) ))]>;
642+ [(arm_cmpfp (f16 HPR:$Sd), (f16 HPR:$Sm))]>;
660643} // Defs = [FPSCR_NZCV]
661644
662645//===----------------------------------------------------------------------===//
@@ -686,15 +669,15 @@ let Defs = [FPSCR_NZCV] in {
686669def VCMPEZD : ADuI<0b11101, 0b11, 0b0101, 0b11, 0,
687670 (outs), (ins DPR:$Dd),
688671 IIC_fpCMP64, "vcmpe", ".f64\t$Dd, #0", "",
689- [(set FPSCR_NZCV, ( arm_cmpfpe0 (f64 DPR:$Dd) ))]> {
672+ [(arm_cmpfpe0 (f64 DPR:$Dd))]> {
690673 let Inst{3-0} = 0b0000;
691674 let Inst{5} = 0;
692675}
693676
694677def VCMPEZS : ASuI<0b11101, 0b11, 0b0101, 0b11, 0,
695678 (outs), (ins SPR:$Sd),
696679 IIC_fpCMP32, "vcmpe", ".f32\t$Sd, #0", "",
697- [(set FPSCR_NZCV, ( arm_cmpfpe0 SPR:$Sd) )]> {
680+ [(arm_cmpfpe0 SPR:$Sd)]> {
698681 let Inst{3-0} = 0b0000;
699682 let Inst{5} = 0;
700683
@@ -706,23 +689,23 @@ def VCMPEZS : ASuI<0b11101, 0b11, 0b0101, 0b11, 0,
706689def VCMPEZH : AHuI<0b11101, 0b11, 0b0101, 0b11, 0,
707690 (outs), (ins HPR:$Sd),
708691 IIC_fpCMP16, "vcmpe", ".f16\t$Sd, #0",
709- [(set FPSCR_NZCV, ( arm_cmpfpe0 (f16 HPR:$Sd) ))]> {
692+ [(arm_cmpfpe0 (f16 HPR:$Sd))]> {
710693 let Inst{3-0} = 0b0000;
711694 let Inst{5} = 0;
712695}
713696
714697def VCMPZD : ADuI<0b11101, 0b11, 0b0101, 0b01, 0,
715698 (outs), (ins DPR:$Dd),
716699 IIC_fpCMP64, "vcmp", ".f64\t$Dd, #0", "",
717- [(set FPSCR_NZCV, ( arm_cmpfp0 (f64 DPR:$Dd) ))]> {
700+ [(arm_cmpfp0 (f64 DPR:$Dd))]> {
718701 let Inst{3-0} = 0b0000;
719702 let Inst{5} = 0;
720703}
721704
722705def VCMPZS : ASuI<0b11101, 0b11, 0b0101, 0b01, 0,
723706 (outs), (ins SPR:$Sd),
724707 IIC_fpCMP32, "vcmp", ".f32\t$Sd, #0", "",
725- [(set FPSCR_NZCV, ( arm_cmpfp0 SPR:$Sd) )]> {
708+ [(arm_cmpfp0 SPR:$Sd)]> {
726709 let Inst{3-0} = 0b0000;
727710 let Inst{5} = 0;
728711
@@ -734,7 +717,7 @@ def VCMPZS : ASuI<0b11101, 0b11, 0b0101, 0b01, 0,
734717def VCMPZH : AHuI<0b11101, 0b11, 0b0101, 0b01, 0,
735718 (outs), (ins HPR:$Sd),
736719 IIC_fpCMP16, "vcmp", ".f16\t$Sd, #0",
737- [(set FPSCR_NZCV, ( arm_cmpfp0 (f16 HPR:$Sd) ))]> {
720+ [(arm_cmpfp0 (f16 HPR:$Sd))]> {
738721 let Inst{3-0} = 0b0000;
739722 let Inst{5} = 0;
740723}
@@ -2509,8 +2492,7 @@ let DecoderMethod = "DecodeForVMRSandVMSR" in {
25092492 let Defs = [CPSR], Uses = [FPSCR_NZCV], Predicates = [HasFPRegs],
25102493 Rt = 0b1111 /* apsr_nzcv */ in
25112494 def FMSTAT : MovFromVFP<0b0001 /* fpscr */, (outs), (ins),
2512- "vmrs", "\tAPSR_nzcv, fpscr",
2513- [(arm_fmstat FPSCR_NZCV)]>;
2495+ "vmrs", "\tAPSR_nzcv, fpscr", [(arm_fmstat)]>;
25142496
25152497 // Application level FPSCR -> GPR
25162498 let hasSideEffects = 1, Uses = [FPSCR], Predicates = [HasFPRegs] in
0 commit comments