@@ -801,9 +801,9 @@ def X86lock_sub_nocf : PatFrag<(ops node:$lhs, node:$rhs),
801
801
return hasNoCarryFlagUses(SDValue(N, 0));
802
802
}]>;
803
803
804
- let Predicates = [UseIncDec] in {
805
- let Defs = [EFLAGS], mayLoad = 1, mayStore = 1, isCodeGenOnly = 1,
806
- SchedRW = [WriteALURMW] in {
804
+ let Defs = [EFLAGS], mayLoad = 1, mayStore = 1, isCodeGenOnly = 1,
805
+ SchedRW = [WriteALURMW] in {
806
+ let Predicates = [UseIncDec] in {
807
807
def LOCK_INC8m : I<0xFE, MRM0m, (outs), (ins i8mem :$dst),
808
808
"inc{b}\t$dst",
809
809
[(set EFLAGS, (X86lock_add_nocf addr:$dst, (i8 1)))]>,
@@ -816,10 +816,6 @@ let Predicates = [UseIncDec] in {
816
816
"inc{l}\t$dst",
817
817
[(set EFLAGS, (X86lock_add_nocf addr:$dst, (i32 1)))]>,
818
818
OpSize32, LOCK;
819
- def LOCK_INC64m : RI<0xFF, MRM0m, (outs), (ins i64mem:$dst),
820
- "inc{q}\t$dst",
821
- [(set EFLAGS, (X86lock_add_nocf addr:$dst, (i64 1)))]>,
822
- LOCK;
823
819
824
820
def LOCK_DEC8m : I<0xFE, MRM1m, (outs), (ins i8mem :$dst),
825
821
"dec{b}\t$dst",
@@ -833,20 +829,33 @@ let Predicates = [UseIncDec] in {
833
829
"dec{l}\t$dst",
834
830
[(set EFLAGS, (X86lock_sub_nocf addr:$dst, (i32 1)))]>,
835
831
OpSize32, LOCK;
832
+ }
833
+
834
+ let Predicates = [UseIncDec, In64BitMode] in {
835
+ def LOCK_INC64m : RI<0xFF, MRM0m, (outs), (ins i64mem:$dst),
836
+ "inc{q}\t$dst",
837
+ [(set EFLAGS, (X86lock_add_nocf addr:$dst, (i64 1)))]>,
838
+ LOCK;
836
839
def LOCK_DEC64m : RI<0xFF, MRM1m, (outs), (ins i64mem:$dst),
837
840
"dec{q}\t$dst",
838
841
[(set EFLAGS, (X86lock_sub_nocf addr:$dst, (i64 1)))]>,
839
842
LOCK;
840
843
}
844
+ }
841
845
846
+ let Predicates = [UseIncDec] in {
842
847
// Additional patterns for -1 constant.
843
848
def : Pat<(X86lock_add addr:$dst, (i8 -1)), (LOCK_DEC8m addr:$dst)>;
844
849
def : Pat<(X86lock_add addr:$dst, (i16 -1)), (LOCK_DEC16m addr:$dst)>;
845
850
def : Pat<(X86lock_add addr:$dst, (i32 -1)), (LOCK_DEC32m addr:$dst)>;
846
- def : Pat<(X86lock_add addr:$dst, (i64 -1)), (LOCK_DEC64m addr:$dst)>;
847
851
def : Pat<(X86lock_sub addr:$dst, (i8 -1)), (LOCK_INC8m addr:$dst)>;
848
852
def : Pat<(X86lock_sub addr:$dst, (i16 -1)), (LOCK_INC16m addr:$dst)>;
849
853
def : Pat<(X86lock_sub addr:$dst, (i32 -1)), (LOCK_INC32m addr:$dst)>;
854
+ }
855
+
856
+ let Predicates = [UseIncDec, In64BitMode] in {
857
+ // Additional patterns for -1 constant.
858
+ def : Pat<(X86lock_add addr:$dst, (i64 -1)), (LOCK_DEC64m addr:$dst)>;
850
859
def : Pat<(X86lock_sub addr:$dst, (i64 -1)), (LOCK_INC64m addr:$dst)>;
851
860
}
852
861
0 commit comments