]> granicus.if.org Git - clang/commitdiff
OpenCL 1.0 Support: fix a bug with lvalue swizzles
authorNate Begeman <natebegeman@mac.com>
Fri, 26 Jun 2009 21:12:50 +0000 (21:12 +0000)
committerNate Begeman <natebegeman@mac.com>
Fri, 26 Jun 2009 21:12:50 +0000 (21:12 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@74324 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGExpr.cpp

index 51c5b3d7dde1a99959a9eba09ccd9405e2d59b36..a21140765c20332c48d9da078a40678fe04d719b 100644 (file)
@@ -606,11 +606,12 @@ void CodeGenFunction::EmitStoreThroughExtVectorComponentLValue(RValue Src,
        cast<llvm::VectorType>(Vec->getType())->getNumElements();
     if (NumDstElts == NumSrcElts) {
       // Use shuffle vector is the src and destination are the same number
-      // of elements
-      llvm::SmallVector<llvm::Constant*, 4> Mask;
+      // of elements and restore the vector mask since it is on the side
+      // it will be stored.
+      llvm::SmallVector<llvm::Constant*, 4> 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());