]> granicus.if.org Git - clang/commitdiff
minor tweak to anders patch: (only) ocu vectors support splatting, but
authorChris Lattner <sabre@nondot.org>
Sat, 2 Feb 2008 04:51:41 +0000 (04:51 +0000)
committerChris Lattner <sabre@nondot.org>
Sat, 2 Feb 2008 04:51:41 +0000 (04:51 +0000)
ocu vectors should not treat bitcasts from int <-> vector as a splat
unless it is of the element type.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46664 91177308-0d34-0410-b5e6-96231b3b80d8

CodeGen/CGExprScalar.cpp

index c812e21437af0b4896330102388553893e6b6b30..6db7beed0bd0ce089e1c227dbbc0d63ed6bb0a98 100644 (file)
@@ -371,18 +371,15 @@ Value *ScalarExprEmitter::EmitScalarConversion(Value *Src, QualType SrcType,
   }
   
   // A scalar source can be splatted to an OCU vector of the same element type
-  if (DstType->isOCUVectorType() && !isa<VectorType>(SrcType)) {
-    const llvm::VectorType *VT = cast<llvm::VectorType>(DstTy);
-    assert((VT->getElementType() == Src->getType()) &&
-           "Vector element type must match scalar type to splat.");
+  if (DstType->isOCUVectorType() && !isa<VectorType>(SrcType) &&
+      cast<llvm::VectorType>(DstTy)->getElementType() == Src->getType())
     return CGF.EmitVector(&Src, DstType->getAsVectorType()->getNumElements(), 
                           true);
-  }
 
+  // Allow bitcast from vector to integer/fp of the same size.
   if (isa<llvm::VectorType>(Src->getType()) ||
-      isa<llvm::VectorType>(DstTy)) {
+      isa<llvm::VectorType>(DstTy))
     return Builder.CreateBitCast(Src, DstTy, "conv");
-  }
       
   // Finally, we have the arithmetic types: real int/float.
   if (isa<llvm::IntegerType>(Src->getType())) {