On Thu, Oct 15, 2015 at 3:50 PM, Christophe Lyon <christophe.l...@linaro.org> wrote: > 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?
Please file a bugreport. Thanks, Richard. > 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 >>