]> granicus.if.org Git - clang/commitdiff
Testing with a full OpenCL compiler (based on clang) reveals r71734 missed
authorDavid Tweed <david.tweed@arm.com>
Thu, 10 Jan 2013 09:11:33 +0000 (09:11 +0000)
committerDavid Tweed <david.tweed@arm.com>
Thu, 10 Jan 2013 09:11:33 +0000 (09:11 +0000)
difference between type widths of a vector and the width of one of its elements
in the case of vector shifts. Use correct witdth in the vector case.

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

lib/CodeGen/CGExprScalar.cpp

index ae7518a2b947b706ba3dc273b57a9cccb329e4d4..fb5f58ddbb2058548b8ff69d41a0284e2e056858 100644 (file)
@@ -2368,8 +2368,12 @@ Value *ScalarExprEmitter::EmitSub(const BinOpInfo &op) {
 }
 
 Value *ScalarExprEmitter::GetWidthMinusOneValue(Value* LHS,Value* RHS) {
-  unsigned Width = cast<llvm::IntegerType>(LHS->getType())->getBitWidth();
-  return llvm::ConstantInt::get(RHS->getType(), Width - 1);
+  llvm::IntegerType *Ty;
+  if (llvm::VectorType *VT = dyn_cast<llvm::VectorType>(LHS->getType()))
+    Ty = cast<llvm::IntegerType>(VT->getElementType());
+  else
+    Ty = cast<llvm::IntegerType>(LHS->getType());
+  return llvm::ConstantInt::get(RHS->getType(), Ty->getBitWidth() - 1);
 }
 
 Value *ScalarExprEmitter::EmitShl(const BinOpInfo &Ops) {