https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110183

Stefan Schulze Frielinghaus <stefansf at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
         Resolution|---                         |FIXED
                 CC|                            |stefansf at gcc dot gnu.org
             Status|UNCONFIRMED                 |RESOLVED

--- Comment #1 from Stefan Schulze Frielinghaus <stefansf at gcc dot gnu.org> 
---
Bisect turned into a treasure hunt.  First bisect stopped at
r14-4621-g24eaada73def58 which just changes the test.  Using the old test the
next bisect stopped at r15-787-g57e04879389f9c which just changes some LOAD ON
CONDITION metrics.  Reverting this change the final bisect stopped at
r15-3602-g9ebc9fbdddfe1e which is the real deal.  Without this commit the mode
of a pseudo is changed:

(insn 24 23 0 (set (strict_low_part (subreg:SI (reg:DI 73) 4))
        (subreg:SI (reg/f:DI 79) 4)) "pr106101.c":43:23 discrim 1 -1
     (nil))
...
(insn 37 36 0 (set (mem:SI (const_int 4 [0x4]) [1 MEM[(int *)0B + 4B]+0 S4
A32])
        (reg/v:SI 73 [ yyval ])) "pr106101.c":53:12 -1
     (nil))

Here we are referring to pseudo 73 in two different modes which is wrong. 
Later on during web we then end up with a wrong insn

(insn 37 36 38 7 (set (mem:SI (const_int 4 [0x4]) [1 MEM[(int *)0B + 4B]+0 S4
A32])
        (reg/f:DI 73 [ *_5 ])) "pr106101.c":53:12 1509 {*movsi_zarch}
     (expr_list:REG_DEAD (reg/v:SI 73 [ yyval ])
        (nil)))

for which we eventually ICE.  Fixed in r15-3602-g9ebc9fbdddfe1e.

Reply via email to