[llvm] r174675 - Have InstCombine call SipmlifyCall when handling calls. Test case included.
Michael Ilseman
milseman at apple.com
Thu Feb 7 15:01:35 PST 2013
Author: milseman
Date: Thu Feb 7 17:01:35 2013
New Revision: 174675
URL: http://llvm.org/viewvc/llvm-project?rev=174675&view=rev
Log:
Have InstCombine call SipmlifyCall when handling calls. Test case included.
Modified:
llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
llvm/trunk/test/Transforms/InstCombine/intrinsics.ll
Modified: llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp?rev=174675&r1=174674&r2=174675&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp Thu Feb 7 17:01:35 2013
@@ -13,6 +13,7 @@
#include "InstCombine.h"
#include "llvm/ADT/Statistic.h"
+#include "llvm/Analysis/InstructionSimplify.h"
#include "llvm/Analysis/MemoryBuiltins.h"
#include "llvm/IR/DataLayout.h"
#include "llvm/Support/CallSite.h"
@@ -210,6 +211,11 @@ Instruction *InstCombiner::visitCallInst
return &CI;
}
+ CallSite CS(&CI);
+ if (Value *V = SimplifyCall(CS.getCalledValue(), CS.arg_begin(), CS.arg_end(),
+ TD))
+ return ReplaceInstUsesWith(CI, V);
+
IntrinsicInst *II = dyn_cast<IntrinsicInst>(&CI);
if (!II) return visitCallSite(&CI);
Modified: llvm/trunk/test/Transforms/InstCombine/intrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/intrinsics.ll?rev=174675&r1=174674&r2=174675&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/intrinsics.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/intrinsics.ll Thu Feb 7 17:01:35 2013
@@ -152,8 +152,8 @@ entry:
ret void
; CHECK: @powi
; CHECK: %A = fdiv double 1.0{{.*}}, %V
-; CHECK: store volatile double %A,
-; CHECK: store volatile double 1.0
+; CHECK: store volatile double %A,
+; CHECK: store volatile double 1.0
; CHECK: store volatile double %V
}
@@ -256,3 +256,15 @@ define i32 @cttz_select(i32 %Value) noun
; CHECK: @cttz_select
; CHECK: select i1 %tobool, i32 %cttz, i32 32
}
+
+; Test that SimplifyCall is getting invoked by InstCombine
+declare float @llvm.fabs.f32(float) nounwind readnone
+define float @simplify_idempotent(float %a) {
+; CHECK: @simplify_idempotent
+; CHECK: fabs
+; CHECK-NOT: fabs
+ %a0 = call float @llvm.fabs.f32(float %a)
+ %a1 = call float @llvm.fabs.f32(float %a0)
+
+ ret float %a1
+}
\ No newline at end of file
More information about the llvm-commits
mailing list