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]

Re: [PATCH][ARM] PR target/70008


Hi Richard,

I think we could incorporate your feedback by changing the predicate on operand 1 to "arm_rhs_operand" which allows "s_register_operand" or "arm_immediate_operand". Everything else in my patch would stay the same including splitting the thumb2 pattern out into it's own insn. I'm testing this change now. Let me know if this direction is okay with you.

On 02/29/2016 08:29 AM, Richard Earnshaw (lists) wrote:
On 29/02/16 11:21, Michael Collison wrote:

On 2/29/2016 4:06 AM, Kyrill Tkachov wrote:
Hi Michael,

On 29/02/16 04:47, Michael Collison wrote:
This patches address PR 70008, where a reverse subtract with carry
instruction can be generated in thumb2 mode. It was tested with no
regressions in arm and thumb modes on the following targets:

arm-none-linux-gnueabi
arm-none-linux-gnuabihf
armeb-none-linux-gnuabihf
arm-none-eabi

Okay for trunk?

2016-02-28  Michael Collison <michael.collison@linaro.org>

     PR target/70008
     * config/arm/arm.md (*subsi3_carryin): Only match pattern if
     TARGET_ARM due to 'rsc' instruction alternative.
     * config/arm/thumb2.md (*thumb2_subsi3_carryin): New pattern.


The *subsi3_carrying pattern has the arch attribute:
    (set_attr "arch" "*,a")

That means that the second alternative that generates the RSC
instruction is only enabled
for ARM mode. Do you have a testcase where this doesn't happen and
this pattern generates
the second alternative for Thumb2?
No I don't have a test case; i noticed the pattern when working on the
overflow project. I did not realize
that an attribute could affect the matching of an alternative. I will
close the bug.


Thanks,
Kyrill
This is all true, but there is a potential performance issue with this
pattern though, that could lead to sub-optimal code.

The predicate accepts reg-or-int, but in ARM state only simple
'const-ok-for-arm' immediates are permitted by the predicates, and in
thumb code, no immediates are permitted at all.  This could potentially
result in sub-optimal code due to late splitting of the pattern.  It
would be better if the predicate understood these limitations and
restricted immediates accordingly.

R.


--
Michael Collison
Linaro Toolchain Working Group
michael.collison@linaro.org


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