[PATCH] D24529: SpeculativeExecution: Allow speculating calls

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Tue Sep 13 16:16:56 PDT 2016


arsenm created this revision.
arsenm added a subscriber: llvm-commits.
Herald added a subscriber: wdng.

Cheap intrinsics should be freely speculated

https://reviews.llvm.org/D24529

Files:
  lib/Transforms/Scalar/SpeculativeExecution.cpp
  test/Transforms/SpeculativeExecution/spec-calls.ll

Index: test/Transforms/SpeculativeExecution/spec-calls.ll
===================================================================
--- /dev/null
+++ test/Transforms/SpeculativeExecution/spec-calls.ll
@@ -0,0 +1,64 @@
+; RUN: opt < %s -S -speculative-execution \
+; RUN:   -spec-exec-max-speculation-cost 4 -spec-exec-max-not-hoisted 3 \
+; RUN:   | FileCheck %s
+
+declare float @llvm.fabs.f32(float) nounwind readnone
+declare i32 @llvm.ctlz.i32(i32, i1) nounwind readnone
+
+declare float @unknown(float)
+declare float @unknown_readnone(float) nounwind readnone
+
+; CHECK-LABEL: @ifThen_fabs(
+; CHECK: call float @llvm.fabs.f32(
+; CHECK: br i1 true
+define void @ifThen_fabs() {
+  br i1 true, label %a, label %b
+
+a:
+  %x = call float @llvm.fabs.f32(float 1.0)
+  br label %b
+
+b:
+  ret void
+}
+
+; CHECK-LABEL: @ifThen_ctlz(
+; CHECK: call i32 @llvm.ctlz.i32(
+; CHECK: br i1 true
+define void @ifThen_ctlz() {
+  br i1 true, label %a, label %b
+
+a:
+  %x = call i32 @llvm.ctlz.i32(i32 0, i1 true)
+  br label %b
+
+b:
+  ret void
+}
+
+; CHECK-LABEL: @ifThen_call_sideeffects(
+; CHECK: br i1 true
+; CHECK: call float @unknown(
+define void @ifThen_call_sideeffects() {
+  br i1 true, label %a, label %b
+
+a:
+  %x = call float @unknown(float 1.0)
+  br label %b
+
+b:
+  ret void
+}
+
+; CHECK-LABEL: @ifThen_call_readnone(
+; CHECK: br i1 true
+; CHECK: call float @unknown_readnone(
+define void @ifThen_call_readnone() {
+  br i1 true, label %a, label %b
+a:
+  %x = call float @unknown_readnone(float 1.0)
+  br label %b
+
+b:
+  ret void
+}
Index: lib/Transforms/Scalar/SpeculativeExecution.cpp
===================================================================
--- lib/Transforms/Scalar/SpeculativeExecution.cpp
+++ lib/Transforms/Scalar/SpeculativeExecution.cpp
@@ -224,6 +224,7 @@
     case Instruction::Xor:
     case Instruction::ZExt:
     case Instruction::SExt:
+    case Instruction::Call:
       return TTI.getUserCost(I);
 
     default:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D24529.71255.patch
Type: text/x-patch
Size: 1968 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160913/f4d11a21/attachment.bin>


More information about the llvm-commits mailing list