From: Andrew Stubbs Date: Wed, 27 Mar 2019 17:06:26 +0000 (+0000) Subject: Fix scc clobber in movdi_symbol. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=c2709ec42b1bc7644e95f65f417be54101080602;p=gcc.git Fix scc clobber in movdi_symbol. 2019-03-27 Andrew Stubbs gcc/ * config/gcn/gcn.md (CC_SAVE_REG): New constant. (movdi): Call gen_movdi_symbol_save_scc. (gen_movdi_symbol_save_scc): New insn and split. From-SVN: r269970 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 132af149fe7..8801525a06c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2019-03-27 Andrew Stubbs + + * config/gcn/gcn.md (CC_SAVE_REG): New constant. + (movdi): Call gen_movdi_symbol_save_scc. + (gen_movdi_symbol_save_scc): New insn and split. + 2019-03-27 Peter Bergner PR rtl-optimization/89313 diff --git a/gcc/config/gcn/gcn.md b/gcc/config/gcn/gcn.md index 4573a4ce32f..2b805a73c56 100644 --- a/gcc/config/gcn/gcn.md +++ b/gcc/config/gcn/gcn.md @@ -24,6 +24,7 @@ ; Named registers (define_constants [(FIRST_SGPR_REG 0) + (CC_SAVE_REG 22) (LAST_SGPR_REG 101) (FLAT_SCRATCH_REG 102) (FLAT_SCRATCH_LO_REG 102) @@ -403,7 +404,10 @@ && (GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == LABEL_REF)) { - emit_insn (gen_movdi_symbol (operands[0], operands[1])); + if (lra_in_progress) + emit_insn (gen_movdi_symbol_save_scc (operands[0], operands[1])); + else + emit_insn (gen_movdi_symbol (operands[0], operands[1])); DONE; } }) @@ -826,6 +830,19 @@ [(set_attr "type" "mult") (set_attr "length" "32")]) +(define_insn_and_split "movdi_symbol_save_scc" + [(set (match_operand:DI 0 "nonimmediate_operand" "=Sg") + (match_operand:DI 1 "general_operand" "Y")) + (clobber (reg:BI CC_SAVE_REG))] + "GET_CODE (operands[1]) == SYMBOL_REF || GET_CODE (operands[1]) == LABEL_REF + && (lra_in_progress || reload_completed)" + "#" + "reload_completed" + [(set (reg:BI CC_SAVE_REG) (reg:BI SCC_REG)) + (parallel [(set (match_dup 0) (match_dup 1)) + (clobber (reg:BI SCC_REG))]) + (set (reg:BI SCC_REG) (reg:BI CC_SAVE_REG))]) + (define_insn "gcn_indirect_call" [(call (mem (match_operand:DI 0 "register_operand" "Sg")) (match_operand 1 "" ""))