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

             Bug #: 53303
           Summary: Reload/RA issue on paradoxical subreg of subword
                    regsiter for big endian targets
    Classification: Unclassified
           Product: gcc
           Version: 4.6.3
            Status: UNCONFIRMED
          Severity: critical
          Priority: P3
         Component: middle-end
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: aurelien.buhrig....@gmail.com


There is a RA issue with paradoxical subreg of sub-word register on big endian
targets.

It occurs on a private target but seems also to occur on the sparc 64-bit
target for 32-bit FP registers, and perhaps on hp-pa.

http://gcc.gnu.org/ml/gcc/2012-05/msg00028.html

The given workarounds do not work for my backend.

The target has SImode word_mode and for such an insn (generated during
combine):
(set (subreg:SI (reg:QI 21) 0)
     (lshiftrt:SI (reg/v:SI 24) (const_int 31 [0x1f]))

reg:QI 21 is reloaded into (reg:QI 0 r0 [orig:21] [21]).

r0 is a HI register, which makes find_dummy_reload generating a segfault after
computing  the subreg:SI regno, which is then -1.


I quickly had a look at assign_hard_reg (ira-color.c) but it seems the
information about such paradoxical subreg is not available from ira_allocno_t
nor ira_object_t when choosing the hard reg, and I'm not sure what to do.

Reply via email to