From: Uros Bizjak Date: Fri, 14 Jan 2022 15:05:17 +0000 (+0100) Subject: i386: Mark some of strict_low_part insn constraints earlyclobbered X-Git-Tag: basepoints/gcc-13~1726 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ffb7d4b2b76746e4189979f9d27d80be2195308a;p=thirdparty%2Fgcc.git i386: Mark some of strict_low_part insn constraints earlyclobbered While there is practically impossible that input registers are matched with in-out register, better mark the output operand of the split alternative as earlyclobbered - we do output early to the output operand when the insn is split. 2022-01-14 Uroš Bizjak gcc/ChangeLog: * config/i386/i386.md (*add_1_slp"): Mark alternative 1 output operand earlyclobbered. (*sub_1_slp): Ditto. (*and_1_slp): Ditto. (*_1_slp): Ditto. (*neg_1_slp): Ditto. (*one_cmpl_1_slp): Ditto. (*ashl3_1_slp): Ditto. (*3_1_slp): Ditto. (*3_1_slp): Ditto. --- diff --git a/gcc/config/i386/i386.md b/gcc/config/i386/i386.md index 9477ca9b41db..7b1694314ea8 100644 --- a/gcc/config/i386/i386.md +++ b/gcc/config/i386/i386.md @@ -5902,7 +5902,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*add_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (plus:SWI12 (match_operand:SWI12 1 "nonimmediate_operand" "%0,!") (match_operand:SWI12 2 "general_operand" "mn,mn"))) (clobber (reg:CC FLAGS_REG))] @@ -6856,7 +6856,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*sub_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (minus:SWI12 (match_operand:SWI12 1 "register_operand" "0,!") (match_operand:SWI12 2 "general_operand" "mn,mn"))) (clobber (reg:CC FLAGS_REG))] @@ -9905,7 +9905,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*and_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (and:SWI12 (match_operand:SWI12 1 "nonimmediate_operand" "%0,!") (match_operand:SWI12 2 "general_operand" "mn,mn"))) (clobber (reg:CC FLAGS_REG))] @@ -10542,7 +10542,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (any_or:SWI12 (match_operand:SWI12 1 "nonimmediate_operand" "%0,!") (match_operand:SWI12 2 "general_operand" "mn,mn"))) (clobber (reg:CC FLAGS_REG))] @@ -10896,7 +10896,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*neg_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (neg:SWI12 (match_operand:SWI12 1 "register_operand" "0,!"))) (clobber (reg:CC FLAGS_REG))] "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" @@ -11489,7 +11489,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*one_cmpl_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (not:SWI12 (match_operand:SWI12 1 "register_operand" "0,!")))] "!TARGET_PARTIAL_REG_STALL || optimize_function_for_size_p (cfun)" "@ @@ -12185,7 +12185,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*ashl3_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (ashift:SWI12 (match_operand:SWI12 1 "register_operand" "0,!") (match_operand:QI 2 "nonmemory_operand" "cI,cI"))) (clobber (reg:CC FLAGS_REG))] @@ -13062,7 +13062,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*3_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (any_shiftrt:SWI12 (match_operand:SWI12 1 "register_operand" "0,!") (match_operand:QI 2 "nonmemory_operand" "cI,cI"))) (clobber (reg:CC FLAGS_REG))] @@ -13606,7 +13606,7 @@ ;; Alternative 1 is needed to work around LRA limitation, see PR82524. (define_insn_and_split "*3_1_slp" - [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,")) + [(set (strict_low_part (match_operand:SWI12 0 "register_operand" "+,&")) (any_rotate:SWI12 (match_operand:SWI12 1 "register_operand" "0,!") (match_operand:QI 2 "nonmemory_operand" "cI,cI"))) (clobber (reg:CC FLAGS_REG))]