From 47c9909a26b078717fc90a7a3f37075f0d4939ee Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Sun, 18 May 2008 04:11:26 +0000 Subject: [PATCH] Fix PR2339 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51226 91177308-0d34-0410-b5e6-96231b3b80d8 --- .../Scalar/InstructionCombining.cpp | 2 +- .../InstCombine/2008-05-17-InfLoop.ll | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 test/Transforms/InstCombine/2008-05-17-InfLoop.ll diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 32f80871ce4..8c5e1369ded 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -2856,7 +2856,7 @@ Instruction *InstCombiner::visitMul(BinaryOperator &I) { if (BinaryOperator *Op0I = dyn_cast(Op0)) if (Op0I->getOpcode() == Instruction::Add && Op0I->hasOneUse() && - isa(Op0I->getOperand(1))) { + isa(Op0I->getOperand(1)) && isa(Op1)) { // Canonicalize (X+C1)*C2 -> X*C2+C1*C2. Instruction *Add = BinaryOperator::CreateMul(Op0I->getOperand(0), Op1, "tmp"); diff --git a/test/Transforms/InstCombine/2008-05-17-InfLoop.ll b/test/Transforms/InstCombine/2008-05-17-InfLoop.ll new file mode 100644 index 00000000000..9cfbd6f2c5e --- /dev/null +++ b/test/Transforms/InstCombine/2008-05-17-InfLoop.ll @@ -0,0 +1,23 @@ +; RUN: llvm-as < %s | opt -instcombine -disable-output +; PR2339 +target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:32:64-f32:32:32-f64:32:64-v64:64:64-v128:128:128-a0:0:64-s0:0:64-f80:32:32" +target triple = "i686-pc-linux-gnu" + +declare void @BZALLOC(i32) + +define void @f(i32) { +entry: + %blockSize100k = alloca i32 ; [#uses=2] + store i32 %0, i32* %blockSize100k + %n = alloca i32 ; [#uses=2] + load i32* %blockSize100k ; :1 [#uses=1] + store i32 %1, i32* %n + load i32* %n ; :2 [#uses=1] + add i32 %2, 2 ; :3 [#uses=1] + mul i32 %3, ptrtoint (i32* getelementptr (i32* null, i32 1) to i32) ; :4 [#uses=1] + call void @BZALLOC( i32 %4 ) + br label %return + +return: ; preds = %entry + ret void +}