Loop invariant code corrupting xstormy16 insn

Geoff Keating geoffk@geoffk.org
Tue Jun 5 09:13:00 GMT 2007


On 05/06/2007, at 1:43 AM, Nick Clifton wrote:

> Hi Zdenek, Hi Daniel, Hi Geoff,
>
>   I think that I have found a small bug in the loop invariant code.
>   The problem is exhibited when building newlib for the xstormy16-elf
>   toolchain although it may happen with other targets as well.  The
>   problem occurs when an insn contains an r-value use of a register
>   that is going to hoisted as well as a clobber of that register, like
>   this:
>
>     (parallel [
>               (set (pc)
>                    (if_then_else (lt:SI (reg:SI 45)    <---
>                                         (reg:SI 26))
>                                  (label_ref:HI 129)
>                                  (pc)))
>               (clobber (reg:SI 45))                    <-- must be  
> the same
>               (clobber (scratch:BI))
>               ])
>
>   The important point here is that the register referenced in the
>   first clobber must match the register used as the first argument of
>   the condition operation.  (This comes from the "ineqbranchsi"
>   pattern in the xstormy16 machine description).
>
>   The problem is that the loop-invariant optimization was deciding
>   that (reg:SI 45) could be hoisted out of the loop, whereas really it
>   should be left alone.  I have been looking at the loop invariant
>   code trying to figure out what needs to be changed, but so far I
>   have not been able to puzzle it out.

Well, it's certainly not the case that register 45 is loop-invariant,  
because it's changed in the loop by the clobber.  Maybe the loop- 
invariant code isn't noticing the clobber?

>   I think that the real problem might be the clobbers in the
>   ineqbranchsi pattern, but I do not know how it could be changed to
>   fix this.

I don't see anything obviously wrong with this instruction.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/pkcs7-signature
Size: 2460 bytes
Desc: not available
URL: <http://gcc.gnu.org/pipermail/gcc-bugs/attachments/20070605/f90b5ebd/attachment.p7s>


More information about the Gcc-bugs mailing list