From: Nick Lewycky Date: Fri, 23 May 2008 03:26:47 +0000 (+0000) Subject: Fix a recently added optimization to not crash on vectors. X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=39ac3b57bca013e31733a81f8c257fa7ea34c103;p=oota-llvm.git Fix a recently added optimization to not crash on vectors. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@51471 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp index 13dbc115261..a398884e592 100644 --- a/lib/Transforms/Scalar/InstructionCombining.cpp +++ b/lib/Transforms/Scalar/InstructionCombining.cpp @@ -3276,8 +3276,16 @@ Instruction *InstCombiner::commonIDivTransforms(BinaryOperator &I) { Value *Op0 = I.getOperand(0), *Op1 = I.getOperand(1); // (sdiv X, X) --> 1 (udiv X, X) --> 1 - if (Op0 == Op1) - return ReplaceInstUsesWith(I, ConstantInt::get(I.getType(), 1)); + if (Op0 == Op1) { + if (const VectorType *Ty = dyn_cast(I.getType())) { + ConstantInt *CI = ConstantInt::get(Ty->getElementType(), 1); + std::vector Elts(Ty->getNumElements(), CI); + return ReplaceInstUsesWith(I, ConstantVector::get(Elts)); + } + + ConstantInt *CI = ConstantInt::get(I.getType(), 1); + return ReplaceInstUsesWith(I, CI); + } if (Instruction *Common = commonDivTransforms(I)) return Common; diff --git a/test/Transforms/InstCombine/2008-05-22-IDivVector.ll b/test/Transforms/InstCombine/2008-05-22-IDivVector.ll new file mode 100644 index 00000000000..ad70b658d3c --- /dev/null +++ b/test/Transforms/InstCombine/2008-05-22-IDivVector.ll @@ -0,0 +1,6 @@ +; RUN: llvm-as < %s | opt -instcombine -disable-output + +define <3 x i8> @f(<3 x i8> %i) { + %A = sdiv <3 x i8> %i, %i + ret <3 x i8> %A +}