[HEXAGON] Fix semantics of ordered FP compares (#131089) · llvm/llvm-project@d60baf3 (original) (raw)
`@@ -721,23 +721,13 @@ def: OpR_RR_pat<A2_vcmpwgtu, setugt, v2i1, V2I32>;
`
721
721
`def: OpR_RR_pat<F2_sfcmpeq, seteq, i1, F32>;
`
722
722
`def: OpR_RR_pat<F2_sfcmpgt, setgt, i1, F32>;
`
723
723
`def: OpR_RR_pat<F2_sfcmpge, setge, i1, F32>;
`
724
``
`-
def: OpR_RR_pat<F2_sfcmpeq, setoeq, i1, F32>;
`
725
``
`-
def: OpR_RR_pat<F2_sfcmpgt, setogt, i1, F32>;
`
726
``
`-
def: OpR_RR_pat<F2_sfcmpge, setoge, i1, F32>;
`
727
``
`-
def: OpR_RR_pat<F2_sfcmpgt, RevCmp, i1, F32>;
`
728
``
`-
def: OpR_RR_pat<F2_sfcmpge, RevCmp, i1, F32>;
`
729
724
`def: OpR_RR_pat<F2_sfcmpgt, RevCmp, i1, F32>;
`
730
725
`def: OpR_RR_pat<F2_sfcmpge, RevCmp, i1, F32>;
`
731
726
`def: OpR_RR_pat<F2_sfcmpuo, setuo, i1, F32>;
`
732
727
``
733
728
`def: OpR_RR_pat<F2_dfcmpeq, seteq, i1, F64>;
`
734
729
`def: OpR_RR_pat<F2_dfcmpgt, setgt, i1, F64>;
`
735
730
`def: OpR_RR_pat<F2_dfcmpge, setge, i1, F64>;
`
736
``
`-
def: OpR_RR_pat<F2_dfcmpeq, setoeq, i1, F64>;
`
737
``
`-
def: OpR_RR_pat<F2_dfcmpgt, setogt, i1, F64>;
`
738
``
`-
def: OpR_RR_pat<F2_dfcmpge, setoge, i1, F64>;
`
739
``
`-
def: OpR_RR_pat<F2_dfcmpgt, RevCmp, i1, F64>;
`
740
``
`-
def: OpR_RR_pat<F2_dfcmpge, RevCmp, i1, F64>;
`
741
731
`def: OpR_RR_pat<F2_dfcmpgt, RevCmp, i1, F64>;
`
742
732
`def: OpR_RR_pat<F2_dfcmpge, RevCmp, i1, F64>;
`
743
733
`def: OpR_RR_pat<F2_dfcmpuo, setuo, i1, F64>;
`
`@@ -900,15 +890,35 @@ def: OpmR_RR_pat<Cmpud, RevCmp, i1, F64>;
`
900
890
`def: OpmR_RR_pat<Cmpud, RevCmp, i1, F64>;
`
901
891
`def: OpmR_RR_pat<Cmpudn, setune, i1, F64>;
`
902
892
``
903
``
`-
def: OpmR_RR_pat<Outn, setone, i1, F32>;
`
904
``
`-
def: OpmR_RR_pat<Outn, setne, i1, F32>;
`
``
893
`+
class T4<InstHexagon MI1, InstHexagon MI2, InstHexagon MI3, InstHexagon MI4>
`
``
894
`+
: OutPatFrag<(ops node:$Rs, node:$Rt),
`
``
895
`+
(MI1 (MI2 (MI3 Rs,Rs, Rs,Rt), (MI4 Rs,Rs, Rs,Rt)))>;
`
905
896
``
906
``
`-
def: OpmR_RR_pat<Outn, setone, i1, F64>;
`
907
``
`-
def: OpmR_RR_pat<Outn, setne, i1, F64>;
`
``
897
`+
class Cmpof: T3<C2_andn, MI, F2_sfcmpuo>;
`
``
898
`+
class Cmpod: T3<C2_andn, MI, F2_dfcmpuo>;
`
``
899
+
``
900
`+
class Cmpofn: T4<C2_not, C2_or, MI, F2_sfcmpuo>;
`
``
901
`+
class Cmpodn: T4<C2_not, C2_or, MI, F2_dfcmpuo>;
`
``
902
+
``
903
`+
def: OpmR_RR_pat<Cmpof, setoeq, i1, F32>;
`
``
904
`+
def: OpmR_RR_pat<Cmpof, setoge, i1, F32>;
`
``
905
`+
def: OpmR_RR_pat<Cmpof, setogt, i1, F32>;
`
``
906
`+
def: OpmR_RR_pat<Cmpof, RevCmp, i1, F32>;
`
``
907
`+
def: OpmR_RR_pat<Cmpof, RevCmp, i1, F32>;
`
``
908
`+
def: OpmR_RR_pat<Cmpofn, setone, i1, F32>;
`
``
909
+
``
910
`+
def: OpmR_RR_pat<Cmpod, setoeq, i1, F64>;
`
``
911
`+
def: OpmR_RR_pat<Cmpod, setoge, i1, F64>;
`
``
912
`+
def: OpmR_RR_pat<Cmpod, setogt, i1, F64>;
`
``
913
`+
def: OpmR_RR_pat<Cmpod, RevCmp, i1, F64>;
`
``
914
`+
def: OpmR_RR_pat<Cmpod, RevCmp, i1, F64>;
`
``
915
`+
def: OpmR_RR_pat<Cmpodn, setone, i1, F64>;
`
908
916
``
909
917
`def: OpmR_RR_pat<Outn, seto, i1, F32>;
`
910
918
`def: OpmR_RR_pat<Outn, seto, i1, F64>;
`
911
919
``
``
920
`+
def: OpmR_RR_pat<Outn, setne, i1, F32>;
`
``
921
`+
def: OpmR_RR_pat<Outn, setne, i1, F64>;
`
912
922
``
913
923
`// --(6) Select ----------------------------------------------------------
`
914
924
`//
`