[llvm-commits] [llvm] r131798 - in /llvm/trunk: lib/Transforms/InstCombine/InstCombineCalls.cpp test/Transforms/InstCombine/intrinsics.ll

Benjamin Kramer benny.kra at googlemail.com
Sat May 21 11:31:42 PDT 2011


Author: d0k
Date: Sat May 21 13:31:42 2011
New Revision: 131798

URL: http://llvm.org/viewvc/llvm-project?rev=131798&view=rev
Log:
Revert "InstCombine: Turn mul.with.overflow(X, 2) into the cheaper add.with.overflow(X, X)"

It's better to do this in codegen, mul.with.overflow(X, 2) is more canonical because it has only one use on "X".

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=131798&r1=131797&r2=131798&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp (original)
+++ llvm/trunk/lib/Transforms/InstCombine/InstCombineCalls.cpp Sat May 21 13:31:42 2011
@@ -535,20 +535,6 @@
         Constant *Struct = ConstantStruct::get(II->getContext(), V, 2, false);
         return InsertValueInst::Create(Struct, II->getArgOperand(0), 0);
       }
-
-      // [su]mul.with.overflow(X, 2) -> [su]add.with.overflow(X, X)
-      if (RHSI->equalsInt(2)) {
-        Intrinsic::ID Add =
-          II->getIntrinsicID() == Intrinsic::smul_with_overflow ?
-          Intrinsic::sadd_with_overflow : Intrinsic::uadd_with_overflow;
-
-        Module *M = II->getParent()->getParent()->getParent();
-        const Type *Ty = RHSI->getType();
-        Function *F = Intrinsic::getDeclaration(M, Add, &Ty, 1);
-
-        Value *Ops[] = { II->getArgOperand(0), II->getArgOperand(0) };
-        return CallInst::Create(F, Ops, Ops+2);
-      }
     }
     break;
   case Intrinsic::ppc_altivec_lvx:

Modified: llvm/trunk/test/Transforms/InstCombine/intrinsics.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/InstCombine/intrinsics.ll?rev=131798&r1=131797&r2=131798&view=diff
==============================================================================
--- llvm/trunk/test/Transforms/InstCombine/intrinsics.ll (original)
+++ llvm/trunk/test/Transforms/InstCombine/intrinsics.ll Sat May 21 13:31:42 2011
@@ -114,7 +114,6 @@
 
 %ov.result.32 = type { i32, i1 }
 declare %ov.result.32 @llvm.umul.with.overflow.i32(i32, i32) nounwind readnone
-declare %ov.result.32 @llvm.smul.with.overflow.i32(i32, i32) nounwind readnone
 
 define i32 @umultest3(i32 %n) nounwind {
   %shr = lshr i32 %n, 2
@@ -140,26 +139,6 @@
 ; CHECK: umul.with.overflow
 }
 
-define i32 @umultest5(i32 %n) nounwind {
-  %mul = call %ov.result.32 @llvm.umul.with.overflow.i32(i32 %n, i32 2)
-  %ov = extractvalue %ov.result.32 %mul, 1
-  %res = extractvalue %ov.result.32 %mul, 0
-  %ret = select i1 %ov, i32 -1, i32 %res
-  ret i32 %ret
-; CHECK: @umultest5
-; CHECK: llvm.uadd.with.overflow.i32(i32 %n, i32 %n)
-}
-
-define i32 @smultest1(i32 %n) nounwind {
-  %mul = call %ov.result.32 @llvm.smul.with.overflow.i32(i32 %n, i32 2)
-  %ov = extractvalue %ov.result.32 %mul, 1
-  %res = extractvalue %ov.result.32 %mul, 0
-  %ret = select i1 %ov, i32 -1, i32 %res
-  ret i32 %ret
-; CHECK: @smultest1
-; CHECK: llvm.sadd.with.overflow.i32(i32 %n, i32 %n)
-}
-
 define void @powi(double %V, double *%P) {
 entry:
   %A = tail call double @llvm.powi.f64(double %V, i32 -1) nounwind





More information about the llvm-commits mailing list