amdgcn: align TImode registers
This prevents execution failures caused by partially overlapping input and output registers. This is the same solution already used for DImode. gcc/ChangeLog: * config/gcn/gcn.c (gcn_hard_regno_mode_ok): Align TImode registers. * config/gcn/gcn.md: Assert that TImode registers do not early clobber.
This commit is contained in:
parent
054fc495fa
commit
8ae0de5621
@ -475,7 +475,8 @@ gcn_hard_regno_mode_ok (unsigned int regno, machine_mode mode)
|
||||
return (vgpr_1reg_mode_p (mode)
|
||||
|| (!((regno - FIRST_VGPR_REG) & 1) && vgpr_2reg_mode_p (mode))
|
||||
/* TImode is used by DImode compare_and_swap. */
|
||||
|| mode == TImode);
|
||||
|| (mode == TImode
|
||||
&& !((regno - FIRST_VGPR_REG) & 3)));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -677,6 +677,8 @@
|
||||
(set (match_dup 4) (match_dup 5))
|
||||
(set (match_dup 6) (match_dup 7))]
|
||||
{
|
||||
gcc_assert (rtx_equal_p (operands[0], operands[1])
|
||||
|| !reg_overlap_mentioned_p (operands[0], operands[1]));
|
||||
operands[6] = gcn_operand_part (TImode, operands[0], 3);
|
||||
operands[7] = gcn_operand_part (TImode, operands[1], 3);
|
||||
operands[4] = gcn_operand_part (TImode, operands[0], 2);
|
||||
|
Loading…
Reference in New Issue
Block a user