[Bug target/59826] New: ICE caused by mishandling PLD rtx on ARM cortex-m4 target

terry.guo at arm dot com gcc-bugzilla@gcc.gnu.org
Wed Jan 15 12:16:00 GMT 2014


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59826

            Bug ID: 59826
           Summary: ICE caused by mishandling PLD rtx on ARM cortex-m4
                    target
           Product: gcc
           Version: 4.8.3
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: terry.guo at arm dot com

Created attachment 31840
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=31840&action=edit
case to reproduce the ICE

When use upstream 4.8 gcc to compile attached case with command:
"arm-none-eabi-gcc -mthumb -fprefetch-loop-arrays crash.c -O2 -S
-mcpu=cortex-m4", we will get ICE:

crash.c: In function 'genxScrubText':
crash.c:32:1: internal compiler error: in reg_overlap_mentioned_p, at
rtlanal.c:1469
 }
 ^

The option -fprefetch-loop-arrays causes gcc to generate rtx for ARM PLD
instruction like:

(insn 99 100 105 10 (prefetch (plus:SI (reg/v/f:SI 3 r3 [orig:143 last ] [143])
            (const_int 34 [0x22]))
        (const_int 0 [0])
        (const_int 3 [0x3])) 343 {prefetch}
     (nil))

When check data dependencies between this rtx and others, gcc mishandles it as
a normal SET rtx and thus end up with ICE.

Trunk gcc hasn't such issue due to code improvement at
http://gcc.gnu.org/ml/gcc-patches/2013-11/msg00533.html.



More information about the Gcc-bugs mailing list