On 9 October 2015 at 18:11, James Greenhalgh <james.greenha...@arm.com> wrote:
> On Thu, Oct 08, 2015 at 01:29:34PM +0100, Richard Biener wrote:
>> > Thanks again for the comments Richard!
>> >
>> > A new algorithmic optimisation:
>> >
>> > ((X inner_op C0) outer_op C1)
>> > With X being a tree where value_range has reasoned certain bits to always 
>> > be
>> > zero throughout its computed value range, we will call this the zero_mask,
>> > and with inner_op = {|,^}, outer_op = {|,^} and inner_op != outer_op.
>> > if (inner_op == '^') C0 &= ~C1;
>> > if ((C0 & ~zero_mask) == 0) then emit (X outer_op (C0 outer_op C1)
>> > if ((C1 & ~zero_mask) == 0) then emit (X inner_op (C0 outer_op C1)
>> >
>> > And extended '(X & C2) << C1 into (X << C1) & (C2 << C1)' and
>> > '(X & C2) >> C1 into (X >> C1) & (C2 >> C1)' to also accept the bitwise or
>> > and xor operators:
>> > '(X {&,^,|} C2) << C1 into (X << C1) {&,^,|} (C2 << C1)' and
>> > '(X {&,^,|} C2) >> C1 into (X >> C1) & (C2 >> C1)'.
>> >
>> > The second transformation enables more applications of the first. Also some
>> > targets may benefit from delaying shift operations. I am aware that such an
>> > optimization, in combination with one or more optimizations that cause the
>> > reverse transformation, may lead to an infinite loop. Though such behavior
>> > has not been detected during regression testing and bootstrapping on
>> > aarch64.
>> >
>> > gcc/ChangeLog:
>> >
>> > 2015-10-05 Andre Vieira <andre.simoesdiasvie...@arm.com>
>> >
>> > * match.pd: Added a new pattern
>> > ((X inner_op C0) outer_op C1)
>> > and expanded existing one
>> > (X {|,^,&} C0) {<<,>>} C1 -> (X {<<,>>} C1) {|,^,&} (C0 {<<,>>} C1)
>> >
>> > gcc/testsuite/ChangeLog:
>> >
>> > 2015-10-05 Andre Vieira <andre.simoesdiasvie...@arm.com>
>> >
>> > Hale Wang <hale.w...@arm.com>
>> >
>> > * gcc.dg/tree-ssa/forwprop-33.c: New test.
>>
>> Ok.
>>
>> Thanks,
>> Richard.
>>
>
> As Andre does not have commit rights, I've committed this on his behalf as
> revision 228661. Please watch for any fallout over the weekend.
>

Since this commit I'm seeing:
FAIL: gcc.target/arm/xor-and.c scan-assembler orr
on most arm targets.

See: 
http://people.linaro.org/~christophe.lyon/cross-validation/gcc/trunk/228661/report-build-info.html

Since that's already a few days old, I suspect you are already aware of that?

Christophe.


> Andre, please check your ChangeLog format in future. In the end I
> committed this:
>
> gcc/ChangeLog
>
> 2015-10-09  Andre Vieira  <andre.simoesdiasvie...@arm.com>
>
>         * match.pd: ((X inner_op C0) outer_op C1) New pattern.
>         ((X & C2) << C1): Expand to...
>         (X {&,^,|} C2 << C1): ...This.
>         ((X & C2) >> C1): Expand to...
>         (X {&,^,|} C2 >> C1): ...This.
>
> gcc/testsuite/ChangeLog
>
> 2015-10-09  Andre Vieira  <andre.simoesdiasvie...@arm.com>
>             Hale Wang  <hale.w...@arm.com>
>
>         * gcc.dg/tree-ssa/forwprop-33.c: New.
>
> Thanks,
> James
>

Reply via email to