This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Patch ARM] Fix PR19599 tail


Hi,

This fixes up the issues with PR target/19599 and the issues we've had around it. This fixes up some of the current issues we have around this. I'll follow up with a separate patch around longjmps.

This puts in predicates for bx where needed - missed out CCFSM (sigh :( ), replaces uses of "Ss" with another two letter constraint in the U space rather than inventing a new one and gets rid of the issues where we missed handling HFAs in tail calls with values (sigh :( ). Ofcourse I considered using 's' and 'i' but they are unusable in general because of this in reload:

                case 's':
                    if (CONST_SCALAR_INT_P (operand))
                      break;
                  case 'i':
                    if (CONSTANT_P (operand)
&& (! flag_pic || LEGITIMATE_PIC_OPERAND_P (operand)))
                      win = 1;
                    break;


and our definition of LEGITIMATE_PIC_OPERAND_P doesn't allow a symbol ref. So be it.

Regression tested on arm-none-linux-gnueabi arm / thumb multilibs v7-a , bootstrapped and checked it all works fine. Applied.

regards
Ramana


2013-07-25  Ramana Radhakrishnan  <ramana.radhakrishnan@arm.com>

        PR target/19599
        PR target/57731
        PR target/57748
        * config/arm/arm.md ("*sibcall_value_insn): Replace use of
        Ss with US. Adjust output for v5 and v4t.
        (*sibcall_value_insn): Likewise and loosen predicate on
        operand0.
        * config/arm/constraints.md ("Ss"): Rename to US.

Attachment: tailcall-tail-committed.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]