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

             Bug #: 50582
           Summary: Instruct GCC that added_clobbers_hard_reg_p shouldn't
                    consider a specific register
    Classification: Unclassified
           Product: gcc
           Version: 4.6.1
            Status: UNCONFIRMED
          Severity: enhancement
          Priority: P3
         Component: other
        AssignedTo: unassig...@gcc.gnu.org
        ReportedBy: paulo.ma...@csr.com


As noted in :
http://gcc.gnu.org/ml/gcc/2011-09/msg00313.html

`insn_invalid_p' calls `added_clobbers_hard_reg_p' with the comment:
/* If we have to add CLOBBERs, fail if we have to add ones that reference 
hard registers since our callers can't know if they are live or not. 
Otherwise, add them. */

Backends like rx and mn10300 implement CC_REGNUM as a register containing
flags, however, none of their move instructions clobbers CC_REGNUM. If a
backend move clobbers CC_REGNUM a move instruction (set r0 r1) is deemed as
invalid because the pattern for it is:
(parallel [(set r0 r1)
           (clobber CC_REGNUM)])

However, this shouldn't be the case. The backend should be able to inform
genemit.c which registers shouldn't be considered hard registers for the
purpose of `added_clobbers_hard_reg_p'.

Reply via email to