spu.c (spu_machine_dependent_reorg): Make sure branch label on hint instruction is correct.
* spu.c (spu_machine_dependent_reorg): Make sure branch label on hint instruction is correct. From-SVN: r146852
This commit is contained in:
parent
060717fcc5
commit
6e37f6d40e
|
@ -1,3 +1,9 @@
|
||||||
|
2009-04-27 Trevor Smigiel <trevor_smigiel@playstation.sony.com>
|
||||||
|
|
||||||
|
* spu.c (spu_machine_dependent_reorg): Make sure branch label on hint
|
||||||
|
instruction is correct.
|
||||||
|
|
||||||
|
|
||||||
2009-04-27 Trevor Smigiel <trevor_smigiel@playstation.sony.com>
|
2009-04-27 Trevor Smigiel <trevor_smigiel@playstation.sony.com>
|
||||||
|
|
||||||
Allow non-constant arguments to conversion intrinsics.
|
Allow non-constant arguments to conversion intrinsics.
|
||||||
|
|
|
@ -2764,6 +2764,25 @@ spu_machine_dependent_reorg (void)
|
||||||
|
|
||||||
pad_bb ();
|
pad_bb ();
|
||||||
|
|
||||||
|
for (insn = get_insns (); insn; insn = NEXT_INSN (insn))
|
||||||
|
if (NONJUMP_INSN_P (insn) && INSN_CODE (insn) == CODE_FOR_hbr)
|
||||||
|
{
|
||||||
|
/* Adjust the LABEL_REF in a hint when we have inserted a nop
|
||||||
|
between its branch label and the branch . We don't move the
|
||||||
|
label because GCC expects it at the beginning of the block. */
|
||||||
|
rtx unspec = SET_SRC (XVECEXP (PATTERN (insn), 0, 0));
|
||||||
|
rtx label_ref = XVECEXP (unspec, 0, 0);
|
||||||
|
rtx label = XEXP (label_ref, 0);
|
||||||
|
rtx branch;
|
||||||
|
int offset = 0;
|
||||||
|
for (branch = NEXT_INSN (label);
|
||||||
|
!JUMP_P (branch) && !CALL_P (branch);
|
||||||
|
branch = NEXT_INSN (branch))
|
||||||
|
if (NONJUMP_INSN_P (branch))
|
||||||
|
offset += get_attr_length (branch);
|
||||||
|
if (offset > 0)
|
||||||
|
XVECEXP (unspec, 0, 0) = plus_constant (label_ref, offset);
|
||||||
|
}
|
||||||
|
|
||||||
if (spu_flag_var_tracking)
|
if (spu_flag_var_tracking)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in New Issue