Commit 7813231b by John David Anglin Committed by John David Anglin

re PR target/34525 (ICE in extract_insn, at recog.c:1990 on hppa)

	PR target/34525
	* pa.c (legitimize_pic_address): Emit insn to load function label
	forced to memory.

From-SVN: r131126
parent b721df48
2007-12-21 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
PR target/34525
* pa.c (legitimize_pic_address): Emit insn to load function label
forced to memory.
2007-12-21 Andrew Pinski <pinskia@gmail.com>
Rask Ingemann Lambertsen <rask@sygehus.dk>
......@@ -694,19 +694,37 @@ legitimize_pic_address (rtx orig, enum machine_mode mode, rtx reg)
tmp_reg = ((reload_in_progress || reload_completed)
? reg : gen_reg_rtx (Pmode));
/* Force function labels into memory. */
if (function_label_operand (orig, mode))
orig = force_const_mem (mode, orig);
emit_move_insn (tmp_reg,
gen_rtx_PLUS (word_mode, pic_offset_table_rtx,
gen_rtx_HIGH (word_mode, orig)));
pic_ref
= gen_const_mem (Pmode,
gen_rtx_LO_SUM (Pmode, tmp_reg,
gen_rtx_UNSPEC (Pmode,
{
/* Force function label into memory. */
orig = XEXP (force_const_mem (mode, orig), 0);
/* Load plabel address from DLT. */
emit_move_insn (tmp_reg,
gen_rtx_PLUS (word_mode, pic_offset_table_rtx,
gen_rtx_HIGH (word_mode, orig)));
pic_ref
= gen_const_mem (Pmode,
gen_rtx_LO_SUM (Pmode, tmp_reg,
gen_rtx_UNSPEC (Pmode,
gen_rtvec (1, orig),
UNSPEC_DLTIND14R)));
emit_move_insn (reg, pic_ref);
/* Now load address of function descriptor. */
pic_ref = gen_rtx_MEM (Pmode, reg);
}
else
{
/* Load symbol reference from DLT. */
emit_move_insn (tmp_reg,
gen_rtx_PLUS (word_mode, pic_offset_table_rtx,
gen_rtx_HIGH (word_mode, orig)));
pic_ref
= gen_const_mem (Pmode,
gen_rtx_LO_SUM (Pmode, tmp_reg,
gen_rtx_UNSPEC (Pmode,
gen_rtvec (1, orig),
UNSPEC_DLTIND14R)));
}
current_function_uses_pic_offset_table = 1;
mark_reg_pointer (reg, BITS_PER_UNIT);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment