https://gcc.gnu.org/g:25dba615e3c191f0a7264538b6d260e91ca2624a
commit r15-2471-g25dba615e3c191f0a7264538b6d260e91ca2624a Author: Lingling Kong <lingling.k...@intel.com> Date: Thu Aug 1 11:05:41 2024 +0800 i386: Remove ndd support for *add<mode>_4 [PR113744] *add<mode>_4 and *adddi_4 are for shorter opcode from cmp to inc/dec or add $128. But NDD code is longer than the cmp code, so there is no need to support ndd. gcc/ChangeLog: PR target/113744 * config/i386/i386.md (*add<mode>_4): Remove ndd support. (*adddi_4): Ditto. Co-Authored-By: Hu, Lin1 <lin1...@intel.com> Diff: --- gcc/config/i386/i386.md | 40 +++++++++++++++------------------------- 1 file changed, 15 insertions(+), 25 deletions(-) diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index fb10fdc9f96d..3c293c146569 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -7146,35 +7146,31 @@ (define_insn "*adddi_4" [(set (reg FLAGS_REG) (compare - (match_operand:DI 1 "nonimmediate_operand" "0,rm") - (match_operand:DI 2 "x86_64_immediate_operand" "e,e"))) - (clobber (match_scratch:DI 0 "=r,r"))] + (match_operand:DI 1 "nonimmediate_operand" "0") + (match_operand:DI 2 "x86_64_immediate_operand" "e"))) + (clobber (match_scratch:DI 0 "=r"))] "TARGET_64BIT && ix86_match_ccmode (insn, CCGCmode)" { - bool use_ndd = get_attr_isa (insn) == ISA_APX_NDD; switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == constm1_rtx) - return use_ndd ? "inc{q}\t{%1, %0|%0, %1}" : "inc{q}\t%0"; + return "inc{q}\t%0"; else { gcc_assert (operands[2] == const1_rtx); - return use_ndd ? "dec{q}\t{%1, %0|%0, %1}" : "dec{q}\t%0"; + return "dec{q}\t%0"; } default: if (x86_maybe_negate_const_int (&operands[2], DImode)) - return use_ndd ? "add{q}\t{%2, %1, %0|%0, %1, %2}" - : "add{q}\t{%2, %0|%0, %2}"; + return "add{q}\t{%2, %0|%0, %2}"; - return use_ndd ? "sub{q}\t{%2, %1, %0|%0, %1, %2}" - : "sub{q}\t{%2, %0|%0, %2}"; + return "sub{q}\t{%2, %0|%0, %2}"; } } - [(set_attr "isa" "*,apx_ndd") - (set (attr "type") + [(set (attr "type") (if_then_else (match_operand:DI 2 "incdec_operand") (const_string "incdec") (const_string "alu"))) @@ -7195,36 +7191,30 @@ (define_insn "*add<mode>_4" [(set (reg FLAGS_REG) (compare - (match_operand:SWI124 1 "nonimmediate_operand" "0,rm") + (match_operand:SWI124 1 "nonimmediate_operand" "0") (match_operand:SWI124 2 "const_int_operand"))) - (clobber (match_scratch:SWI124 0 "=<r>,r"))] + (clobber (match_scratch:SWI124 0 "=<r>"))] "ix86_match_ccmode (insn, CCGCmode)" { - bool use_ndd = get_attr_isa (insn) == ISA_APX_NDD; switch (get_attr_type (insn)) { case TYPE_INCDEC: if (operands[2] == constm1_rtx) - return use_ndd ? "inc{<imodesuffix>}\t{%1, %0|%0, %1}" - : "inc{<imodesuffix>}\t%0"; + return "inc{<imodesuffix>}\t%0"; else { gcc_assert (operands[2] == const1_rtx); - return use_ndd ? "dec{<imodesuffix>}\t{%1, %0|%0, %1}" - : "dec{<imodesuffix>}\t%0"; + return "dec{<imodesuffix>}\t%0"; } default: if (x86_maybe_negate_const_int (&operands[2], <MODE>mode)) - return use_ndd ? "add{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}" - : "add{<imodesuffix>}\t{%2, %0|%0, %2}"; + return "add{<imodesuffix>}\t{%2, %0|%0, %2}"; - return use_ndd ? "sub{<imodesuffix>}\t{%2, %1, %0|%0, %1, %2}" - : "sub{<imodesuffix>}\t{%2, %0|%0, %2}"; + return "sub{<imodesuffix>}\t{%2, %0|%0, %2}"; } } - [(set_attr "isa" "*,apx_ndd") - (set (attr "type") + [(set (attr "type") (if_then_else (match_operand:<MODE> 2 "incdec_operand") (const_string "incdec") (const_string "alu")))