re PR rtl-optimization/88033 (ICE on valid code at -O2 and -O3 on x86-64-linux-gnu: in remove_some_program_points_and_update_live_ranges, at lra-lives.c:1179)
gcc/ PR rtl-optimization/88033 * ira-lives.c (non_conflicting_reg_copy_p): Skip copies from a register to itself. Use HARD_REGISTER_NUM_P. gcc/testsuite/ PR rtl-optimization/88033 * gcc.target/i386/pr88033.c: New test. From-SVN: r266282
This commit is contained in:
parent
1fd319753c
commit
4b0f04fba5
|
@ -1,3 +1,9 @@
|
|||
2018-11-19 Peter Bergner <bergner@linux.ibm.com>
|
||||
|
||||
PR rtl-optimization/88033
|
||||
* ira-lives.c (non_conflicting_reg_copy_p): Skip copies from a register
|
||||
to itself. Use HARD_REGISTER_NUM_P.
|
||||
|
||||
2018-11-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* tree-vect-loop.c (vect_transform_loop): Disable further unrolling
|
||||
|
|
|
@ -1083,11 +1083,17 @@ non_conflicting_reg_copy_p (rtx_insn *insn)
|
|||
int src_regno = REGNO (SET_SRC (set));
|
||||
machine_mode mode = GET_MODE (SET_DEST (set));
|
||||
|
||||
/* By definition, a register does not conflict with itself, therefore we
|
||||
do not have to handle it specially. Returning NULL_RTX now, helps
|
||||
simplify the callers of this function. */
|
||||
if (dst_regno == src_regno)
|
||||
return NULL_RTX;
|
||||
|
||||
/* Computing conflicts for register pairs is difficult to get right, so
|
||||
for now, disallow it. */
|
||||
if ((dst_regno < FIRST_PSEUDO_REGISTER
|
||||
if ((HARD_REGISTER_NUM_P (dst_regno)
|
||||
&& hard_regno_nregs (dst_regno, mode) != 1)
|
||||
|| (src_regno < FIRST_PSEUDO_REGISTER
|
||||
|| (HARD_REGISTER_NUM_P (src_regno)
|
||||
&& hard_regno_nregs (src_regno, mode) != 1))
|
||||
return NULL_RTX;
|
||||
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
2018-11-19 Peter Bergner <bergner@linux.ibm.com>
|
||||
|
||||
PR rtl-optimization/88033
|
||||
* gcc.target/i386/pr88033.c: New test.
|
||||
|
||||
2018-11-19 Kyrylo Tkachov <kyrylo.tkachov@arm.com>
|
||||
|
||||
* gcc.target/aarch64/sve/unroll-1.c: New test.
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2" } */
|
||||
|
||||
int
|
||||
main (long a, long *b, long c)
|
||||
{
|
||||
if (!c)
|
||||
return 0;
|
||||
int g;
|
||||
*b = (g & ~3000000000) < 0 ? a : a - g;
|
||||
while (1)
|
||||
;
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue