Commit 244b1afb by Richard Earnshaw Committed by Richard Earnshaw

arm.c (note_invalid_constants): Try to extract the constant pool value using…

arm.c (note_invalid_constants): Try to extract the constant pool value using avoid_constant_pool_reference...

* arm.c (note_invalid_constants): Try to extract the constant
pool value using avoid_constant_pool_reference; only use
get_pool_constant if that returns the original reference.

From-SVN: r72883
parent bb885938
2003-10-24 Richard Earnshaw <rearnsha@arm.com>
* arm.c (note_invalid_constants): Try to extract the constant
pool value using avoid_constant_pool_reference; only use
get_pool_constant if that returns the original reference.
2003-10-24 Jan Hubicka <jh@suse.cz>
PR c++/12624
......
......@@ -6894,9 +6894,23 @@ note_invalid_constants (rtx insn, HOST_WIDE_INT address, int do_pushes)
&& CONSTANT_POOL_ADDRESS_P (XEXP (op, 0)))
{
if (do_pushes)
push_minipool_fix (insn, address, recog_data.operand_loc[opno],
recog_data.operand_mode[opno],
get_pool_constant (XEXP (op, 0)));
{
rtx cop = avoid_constant_pool_reference (op);
/* Casting the address of something to a mode narrower
than a word can cause avoid_constant_pool_reference()
to return the pool reference itself. That's no good to
us here. Lets just hope that we can use the
constant pool value directly. */
if (op == cop)
op = get_pool_constant (XEXP (op, 0));
else
op = cop;
push_minipool_fix (insn, address,
recog_data.operand_loc[opno],
recog_data.operand_mode[opno], op);
}
result = true;
}
......
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