rtlanal: fix subreg handling in set_noop_p ()
The following s390 rtx is errneously considered a no-op: (set (subreg:DF (reg:TF %f0) 8) (subreg:DF (reg:V1TF %f0) 8)) Here, SET_DEST is a second register in a floating-point register pair, and SET_SRC is the second half of a vector register, so they refer to different bits. Fix by treating subregs of registers in different modes conservatively. gcc/ChangeLog: 2020-09-11 Ilya Leoshkevich <iii@linux.ibm.com> * rtlanal.c (set_noop_p): Treat subregs of registers in different modes conservatively.
This commit is contained in:
parent
d876184c09
commit
d1a31689a7
1 changed files with 4 additions and 0 deletions
|
@ -1619,6 +1619,10 @@ set_noop_p (const_rtx set)
|
|||
return 0;
|
||||
src = SUBREG_REG (src);
|
||||
dst = SUBREG_REG (dst);
|
||||
if (GET_MODE (src) != GET_MODE (dst))
|
||||
/* It is hard to tell whether subregs refer to the same bits, so act
|
||||
conservatively and return 0. */
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* It is a NOOP if destination overlaps with selected src vector
|
||||
|
|
Loading…
Add table
Reference in a new issue