diff options
author | Suyog Sarda <suyog.sarda@samsung.com> | 2015-01-09 10:23:48 +0000 |
---|---|---|
committer | Suyog Sarda <suyog.sarda@samsung.com> | 2015-01-09 10:23:48 +0000 |
commit | 85d0473650a694606126932eaf021ad7d4f1dc64 (patch) | |
tree | df0a5aa0ca0d1898192b9aa2884e40c1e4f021bc /llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | |
parent | 949ff4d9f2eac092bce2e0d73f1262f829ae4d78 (diff) | |
download | bcm5719-llvm-85d0473650a694606126932eaf021ad7d4f1dc64.tar.gz bcm5719-llvm-85d0473650a694606126932eaf021ad7d4f1dc64.zip |
Assumption that "VectorizedValue" will always be an Instruction is not correct.
It can be a constant or a vector argument.
ex :
define i32 @hadd(<4 x i32> %a) #0 {
entry:
%vecext = extractelement <4 x i32> %a, i32 0
%vecext1 = extractelement <4 x i32> %a, i32 1
%add = add i32 %vecext, %vecext1
%vecext2 = extractelement <4 x i32> %a, i32 2
%add3 = add i32 %add, %vecext2
%vecext4 = extractelement <4 x i32> %a, i32 3
%add5 = add i32 %add3, %vecext4
ret i32 %add5
}
llvm-svn: 225517
Diffstat (limited to 'llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp')
-rw-r--r-- | llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp index 2b411d441d4..c8b8ff22de0 100644 --- a/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp +++ b/llvm/lib/Transforms/Vectorize/SLPVectorizer.cpp @@ -3502,11 +3502,10 @@ private: /// \brief Emit a horizontal reduction of the vectorized value. Value *emitReduction(Value *VectorizedValue, IRBuilder<> &Builder) { assert(VectorizedValue && "Need to have a vectorized tree node"); - Instruction *ValToReduce = dyn_cast<Instruction>(VectorizedValue); assert(isPowerOf2_32(ReduxWidth) && "We only handle power-of-two reductions for now"); - Value *TmpVec = ValToReduce; + Value *TmpVec = VectorizedValue; for (unsigned i = ReduxWidth / 2; i != 0; i >>= 1) { if (IsPairwiseReduction) { Value *LeftMask = |