summaryrefslogtreecommitdiffstats
path: root/llvm/test/Transforms/SimplifyCFG
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2013-01-24 12:39:29 +0000
committerChandler Carruth <chandlerc@gmail.com>2013-01-24 12:39:29 +0000
commit5f4519309fff8f388b76896ac3f53e5de0a12668 (patch)
treefd245ea9b4cd85d2e2cd243e55a64e4e0db5bf1d /llvm/test/Transforms/SimplifyCFG
parent01bffaad03e2139524cb2a011a1a13d4e40d991d (diff)
downloadbcm5719-llvm-5f4519309fff8f388b76896ac3f53e5de0a12668.tar.gz
bcm5719-llvm-5f4519309fff8f388b76896ac3f53e5de0a12668.zip
Plug TTI into the speculation logic, giving it a real cost interface
that can be specialized by targets. The goal here is not to be more aggressive, but to just be more accurate with very obvious cases. There are instructions which are known to be truly free and which were not being modeled as such in this code -- see the regression test which is distilled from an inner loop of zlib. Everywhere the TTI cost model is insufficiently conservative I've added explicit checks with FIXME comments to go add proper modelling of these cost factors. If this causes regressions, the likely solution is to make TTI even more conservative in its cost estimates, but test cases will help here. llvm-svn: 173342
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG')
-rw-r--r--llvm/test/Transforms/SimplifyCFG/SpeculativeExec.ll29
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/SpeculativeExec.ll b/llvm/test/Transforms/SimplifyCFG/SpeculativeExec.ll
index 7e27f415f76..bcef8480405 100644
--- a/llvm/test/Transforms/SimplifyCFG/SpeculativeExec.ll
+++ b/llvm/test/Transforms/SimplifyCFG/SpeculativeExec.ll
@@ -108,3 +108,32 @@ end:
ret i8* %x10
}
+
+define i16 @test5(i1* %dummy, i16 %a, i16 %b) {
+; Test that we speculate no-op instructions.
+; CHECK: @test5
+
+entry:
+ %cond1 = load volatile i1* %dummy
+ br i1 %cond1, label %if, label %end
+
+if:
+ %cond2 = load volatile i1* %dummy
+ %a.conv = sext i16 %a to i32
+ %b.conv = sext i16 %b to i32
+ %cmp = icmp ult i32 %a.conv, %b.conv
+ br i1 %cond2, label %then, label %end
+
+then:
+ %sub = sub i32 %a.conv, %b.conv
+ %sub.conv = trunc i32 %sub to i16
+ br label %end
+
+end:
+ %x = phi i16 [ %a, %entry ], [ %b, %if ], [ %sub.conv, %then ]
+; CHECK-NOT: phi
+; CHECK: select i1
+
+ ret i16 %x
+}
+
OpenPOWER on IntegriCloud