Fix scc clobber in movdi_symbol.

2019-03-27  Andrew Stubbs  <ams@codesourcery.com>

	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
This commit is contained in:
Andrew Stubbs 2019-03-27 17:06:26 +00:00 committed by Andrew Stubbs
parent 6732373ed2
commit c2709ec42b
2 changed files with 24 additions and 1 deletions

View file

@ -1,3 +1,9 @@
2019-03-27 Andrew Stubbs <ams@codesourcery.com>
* 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 <bergner@linux.ibm.com>
PR rtl-optimization/89313

View file

@ -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 "" ""))