[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