llvm-project/llvm/test/Transforms/Reassociate
Sanjay Patel ca36eb4e33 [Reassociate] swap binop operands to increase factoring potential
If we have a pair of binops feeding another pair of binops, rearrange the operands so 
the matching pair are together because that allows easy factorization folds to happen 
in instcombine:
((X << S) & Y) & (Z << S) --> ((X << S) & (Z << S)) & Y (reassociation)

--> ((X & Z) << S) & Y (factorize shift from 'and' ops optimization)

This is part of solving PR37098:
https://bugs.llvm.org/show_bug.cgi?id=37098

Note that there's an instcombine version of this patch attached there, but we're trying
to make instcombine have less responsibility to improve compile-time efficiency.

For reasons I still don't completely understand, reassociate does this kind of transform
sometimes, but misses everything in my motivating cases.

This patch on its own is gluing an independent cleanup chunk to the end of the existing 
RewriteExprTree() loop. We can build on it and do something stronger to better order the 
full expression tree like D40049. That might be an alternative to the proposal to add a 
separate reassociation pass like D41574.

Differential Revision: https://reviews.llvm.org/D45842

llvm-svn: 341288
2018-09-02 14:22:54 +00:00
..
2002-05-15-AgressiveSubMove.ll
2002-05-15-MissedTree.ll
2002-05-15-SubReassociate.ll
2002-07-09-DominanceProblem.ll
2003-08-12-InfiniteLoop.ll
2005-09-01-ArrayOutOfBounds.ll
2006-04-27-ReassociateVector.ll
2011-01-26-UseAfterFree.ll
2012-05-08-UndefLeak.ll
2012-06-08-InfiniteLoop.ll
absorption.ll [Reassociate] add test for missing FP constant analysis; NFC 2018-07-03 15:56:04 +00:00
add_across_block_crash.ll
basictest.ll [Reassociate] regenerate checks; NFC 2018-07-03 16:01:41 +00:00
binop-identity.ll [Constants] add identity constants for fadd/fmul 2018-07-03 17:12:59 +00:00
canonicalize-neg-const.ll
commute.ll
crash.ll
crash2.ll [Reassociate] fix test to be independent of FP undef 2018-03-08 22:05:27 +00:00
deadcode.ll
erase_inst_made_change.ll
factorize-again.ll [ConstantFold] fp_binop undef, undef --> undef 2018-03-08 20:42:49 +00:00
fast-AgressiveSubMove.ll
fast-ArrayOutOfBounds.ll
fast-MissedTree.ll [InstCombine] Enable Add/Sub simplifications with only 'reassoc' FMF 2018-04-14 19:18:28 +00:00
fast-ReassociateVector.ll
fast-SubReassociate.ll [InstCombine] Enable Add/Sub simplifications with only 'reassoc' FMF 2018-04-14 19:18:28 +00:00
fast-basictest.ll [InstCombine] Enable Add/Sub simplifications with only 'reassoc' FMF 2018-04-14 19:18:28 +00:00
fast-fp-commute.ll
fast-mightymul.ll
fast-multistep.ll
fp-commute.ll
fp-expr.ll [ConstantFold] fp_binop undef, undef --> undef 2018-03-08 20:42:49 +00:00
infloop-deadphi.ll [Reassociate] Prevent infinite loops when processing PHIs. 2018-05-11 15:45:36 +00:00
inverses.ll
keep-debug-loc.ll
long-chains.ll [reassociate] Fix excessive revisits when processing long chains of reassociatable instructions. 2018-05-02 17:59:16 +00:00
looptest.ll
matching-binops.ll [Reassociate] swap binop operands to increase factoring potential 2018-09-02 14:22:54 +00:00
mightymul.ll
min_int.ll
mixed-fast-nonfast-fp.ll
mulfactor.ll
multistep.ll
negation.ll
negation1.ll
no-op.ll
optional-flags.ll
otherops.ll
pr12245.ll
pr21205.ll
pr28367.ll
propagate-flags.ll
reassoc-intermediate-fnegs.ll [Constants] add identity constants for fadd/fmul 2018-07-03 17:12:59 +00:00
reassociate-deadinst.ll
reassociate_dbgvalue_discard.ll [DebugInfo] Add DILabel metadata and intrinsic llvm.dbg.label. 2018-05-09 02:40:45 +00:00
repeats.ll
secondary.ll
shift-factor.ll
shifttest.ll
subtest.ll
vaarg_movable.ll
wrap-flags.ll
xor_reassoc.ll