From: Nate Begeman Date: Fri, 26 Jun 2009 21:12:50 +0000 (+0000) Subject: OpenCL 1.0 Support: fix a bug with lvalue swizzles X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6e5dd866469d577811f3080f43407c12a21db83f;p=clang OpenCL 1.0 Support: fix a bug with lvalue swizzles git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74324 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CGExpr.cpp b/lib/CodeGen/CGExpr.cpp index 51c5b3d7dd..a21140765c 100644 --- a/lib/CodeGen/CGExpr.cpp +++ b/lib/CodeGen/CGExpr.cpp @@ -606,11 +606,12 @@ void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src, cast(Vec->getType())->getNumElements(); if (NumDstElts == NumSrcElts) { // Use shuffle vector is the src and destination are the same number - // of elements - llvm::SmallVector Mask; + // of elements and restore the vector mask since it is on the side + // it will be stored. + llvm::SmallVector Mask(NumDstElts); for (unsigned i = 0; i != NumSrcElts; ++i) { unsigned InIdx = getAccessedFieldNo(i, Elts); - Mask.push_back(llvm::ConstantInt::get(llvm::Type::Int32Ty, InIdx)); + Mask[InIdx] = llvm::ConstantInt::get(llvm::Type::Int32Ty, i); } llvm::Value *MaskV = llvm::ConstantVector::get(&Mask[0], Mask.size());