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

Ramana Radhakrishnan <ramana at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |NEW
   Last reconfirmed|                            |2011.06.14 00:37:35
     Ever Confirmed|0                           |1

--- Comment #2 from Ramana Radhakrishnan <ramana at gcc dot gnu.org> 2011-06-14 
00:37:35 UTC ---
Hmmm the *ldrd pattern appears to allow this which is just unpredictable
behaviour. 




(insn:TI 42 38 43 2 (parallel [
            (set (reg/v/f:SI 4 r4 [orig:143 regs ] [143])
                (mem/f/c/i:SI (plus:SI (reg/f:SI 26 afp)
                        (const_int 12 [0xc])) [3 regs+0 S4 A32]))
            (set (reg/v:SI 4 r4 [orig:144 stop ] [144])
                (mem/c/i:SI (plus:SI (reg/f:SI 26 afp)
                        (const_int 16 [0x10])) [2 stop+0 S4 A32]))
        ]) ../../../gcc-4.7~/libiberty/regex.c:4959 396 {*ldrd}
     (expr_list:REG_UNUSED (reg/v/f:SI 4 r4 [orig:143 regs ] [143])
        (nil)))

You can't have Rt == Rt2 in Thumb2 - that is just broken behaviour. 


at the very least you need the following patch to get builds going further. 


Index: arm.c
===================================================================
--- arm.c    (revision 174940)
+++ arm.c    (working copy)
@@ -23865,6 +23865,9 @@

   if (TARGET_ARM)
     max_offset = 255;
+  
+  if (regno1 == regno2)
+    return false;

   if (off1 != NULL_RTX)
     offset1 = INTVAL (off1);

Reply via email to