diff options
author | Roman Lebedev <lebedev.ri@gmail.com> | 2019-09-18 19:46:57 +0000 |
---|---|---|
committer | Roman Lebedev <lebedev.ri@gmail.com> | 2019-09-18 19:46:57 +0000 |
commit | dd0170ab24577f76a5c8c78b4f7e068ac29de40c (patch) | |
tree | 845ca00c3f550eb51c1f016072414fa6f8c5aa3a /llvm/test/Transforms/SimplifyCFG | |
parent | ec6b91b6655a92d02c88e942d83366004575a234 (diff) | |
download | bcm5719-llvm-dd0170ab24577f76a5c8c78b4f7e068ac29de40c.tar.gz bcm5719-llvm-dd0170ab24577f76a5c8c78b4f7e068ac29de40c.zip |
[SimplifyCFG] mergeConditionalStoreToAddress(): consider cost, not instruction count
Summary:
As it can be see in the changed test, while `div` is really costly,
we were speculating it. This does not seem correct.
Also, the old code would run for every single insturuction in BB,
instead of eagerly bailing out as soon as there are too many instructions.
This function still has a problem that `PHINodeFoldingThreshold` is
per-basic-block, while it should be for all the basic blocks.
Reviewers: efriedma, craig.topper, dmgreen, jmolloy
Reviewed By: jmolloy
Subscribers: xbolva00, hiraditya, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67315
llvm-svn: 372255
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG')
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/X86/merge-cond-stores-cost.ll | 12 |
1 files changed, 2 insertions, 10 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/merge-cond-stores-cost.ll b/llvm/test/Transforms/SimplifyCFG/X86/merge-cond-stores-cost.ll index bc5567bc529..4a7f7d79184 100644 --- a/llvm/test/Transforms/SimplifyCFG/X86/merge-cond-stores-cost.ll +++ b/llvm/test/Transforms/SimplifyCFG/X86/merge-cond-stores-cost.ll @@ -8,24 +8,16 @@ define void @test_costly(i32* %p, i32 %a, i32 %b, i32 %c, i32 %d) { ; CHECK-NEXT: br i1 [[X1]], label [[FALLTHROUGH:%.*]], label [[YES1:%.*]] ; CHECK: yes1: ; CHECK-NEXT: [[VAL0:%.*]] = sdiv i32 [[D:%.*]], [[C:%.*]] +; CHECK-NEXT: store i32 [[VAL0]], i32* [[P:%.*]] ; CHECK-NEXT: br label [[FALLTHROUGH]] ; CHECK: fallthrough: -; CHECK-NEXT: [[SIMPLIFYCFG_MERGE:%.*]] = phi i32 [ [[VAL0]], [[YES1]] ], [ undef, [[ENTRY:%.*]] ] ; CHECK-NEXT: [[X2:%.*]] = icmp eq i32 [[B:%.*]], 0 ; CHECK-NEXT: br i1 [[X2]], label [[END:%.*]], label [[YES2:%.*]] ; CHECK: yes2: ; CHECK-NEXT: [[VAL1:%.*]] = sdiv i32 [[C]], [[D]] +; CHECK-NEXT: store i32 [[VAL1]], i32* [[P]] ; CHECK-NEXT: br label [[END]] ; CHECK: end: -; CHECK-NEXT: [[SIMPLIFYCFG_MERGE1:%.*]] = phi i32 [ [[VAL1]], [[YES2]] ], [ [[SIMPLIFYCFG_MERGE]], [[FALLTHROUGH]] ] -; CHECK-NEXT: [[TMP0:%.*]] = xor i1 [[X1]], true -; CHECK-NEXT: [[TMP1:%.*]] = xor i1 [[X2]], true -; CHECK-NEXT: [[TMP2:%.*]] = or i1 [[TMP0]], [[TMP1]] -; CHECK-NEXT: br i1 [[TMP2]], label [[TMP3:%.*]], label [[TMP4:%.*]] -; CHECK: 3: -; CHECK-NEXT: store i32 [[SIMPLIFYCFG_MERGE1]], i32* [[P:%.*]], align 4 -; CHECK-NEXT: br label [[TMP4]] -; CHECK: 4: ; CHECK-NEXT: ret void ; entry: |