forked from OSchip/llvm-project
328199ec26
Summary: 1/ Operand folding during complex pattern matching for LEAs has been extended, such that it promotes Scale to accommodate similar operand appearing in the DAG e.g. T1 = A + B T2 = T1 + 10 T3 = T2 + A For above DAG rooted at T3, X86AddressMode will now look like Base = B , Index = A , Scale = 2 , Disp = 10 2/ During OptimizeLEAPass down the pipeline factorization is now performed over LEAs so that if there is an opportunity then complex LEAs (having 3 operands) could be factored out e.g. leal 1(%rax,%rcx,1), %rdx leal 1(%rax,%rcx,2), %rcx will be factored as following leal 1(%rax,%rcx,1), %rdx leal (%rdx,%rcx) , %edx 3/ Aggressive operand folding for AM based selection for LEAs is sensitive to loops, thus avoiding creation of any complex LEAs within a loop. 4/ Simplify LEA converts (lea (BASE,1,INDEX,0) --> add (BASE, INDEX) which offers better through put. PR32755 will be taken care of by this pathc. Previous patch revisions : r313343 , r314886 Reviewers: lsaba, RKSimon, craig.topper, qcolombet, jmolloy, jbhateja Reviewed By: lsaba, RKSimon, jbhateja Subscribers: jmolloy, spatel, igorb, llvm-commits Differential Revision: https://reviews.llvm.org/D35014 llvm-svn: 319543 |
||
---|---|---|
.. | ||
AArch64 | ||
AMDGPU | ||
ARM | ||
NVPTX | ||
X86 | ||
2005-08-15-AddRecIV.ll | ||
2005-08-17-OutOfLoopVariant.ll | ||
2005-09-12-UsesOutOutsideOfLoop.ll | ||
2007-04-23-UseIterator.ll | ||
2008-08-13-CmpStride.ll | ||
2008-09-09-Overflow.ll | ||
2009-01-13-nonconstant-stride-outside-loop.ll | ||
2009-04-28-no-reduce-mul.ll | ||
2011-07-19-CritEdgeBreakCrash.ll | ||
2011-10-03-CritEdgeMerge.ll | ||
2011-10-06-ReusePhi.ll | ||
2011-10-13-SCEVChain.ll | ||
2011-10-14-IntPtr.ll | ||
2011-12-19-PostincQuadratic.ll | ||
2012-01-02-nopreheader.ll | ||
2012-01-16-nopreheader.ll | ||
2012-03-15-nopreheader.ll | ||
2012-03-26-constexpr.ll | ||
2012-07-13-ExpandUDiv.ll | ||
2012-07-18-LimitReassociate.ll | ||
2013-01-05-IndBr.ll | ||
2013-01-14-ReuseCast.ll | ||
addrec-gep-address-space.ll | ||
addrec-gep.ll | ||
address-space-loop.ll | ||
count-to-zero.ll | ||
dead-phi.ll | ||
different-type-ivs.ll | ||
dominate-assert.ll | ||
dont-hoist-simple-loop-constants.ll | ||
dont_insert_redundant_ops.ll | ||
dont_reduce_bytes.ll | ||
dont_reverse.ll | ||
ephemeral.ll | ||
exit_compare_live_range.ll | ||
funclet.ll | ||
hoist-parent-preheader.ll | ||
illegal-addr-modes.ll | ||
invariant_value_first.ll | ||
invariant_value_first_arg.ll | ||
ivchain.ll | ||
negative-scale.ll | ||
nested-reduce.ll | ||
nonintegral.ll | ||
nonlinear-postinc.ll | ||
ops_after_indvar.ll | ||
phi_node_update_multiple_preds.ll | ||
post-inc-icmpzero.ll | ||
post-inc-optsize.ll | ||
pr2537.ll | ||
pr2570.ll | ||
pr3086.ll | ||
pr3399.ll | ||
pr3571.ll | ||
pr12018.ll | ||
pr12048.ll | ||
pr12691.ll | ||
pr18165.ll | ||
pr25541.ll | ||
pr27056.ll | ||
pr31627.ll | ||
preserve-gep-loop-variant.ll | ||
related_indvars.ll | ||
remove_indvar.ll | ||
scaling_factor_cost_crash.ll | ||
scev-insertpt-bug.ll | ||
sext-ind-var.ll | ||
share_code_in_preheader.ll | ||
share_ivs.ll | ||
shl.ll | ||
uglygep-address-space.ll | ||
uglygep.ll | ||
use_postinc_value_outside_loop.ll | ||
var_stride_used_by_compare.ll | ||
variable_stride.ll |