Fix an asan error where NumElements > 32 for at least one case in
authorKaelyn Takata <rikka@google.com>
Wed, 25 Nov 2015 00:03:29 +0000 (00:03 +0000)
committerKaelyn Takata <rikka@google.com>
Wed, 25 Nov 2015 00:03:29 +0000 (00:03 +0000)
test/CodeGen/X86/avg.ll.

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

lib/Target/X86/X86ISelLowering.cpp

index 0bf5ee68d1341e5174dc71316e58f465cf73edc6..26e69507617ca5bd658ed140b2ce6b2688f4b5f5 100644 (file)
@@ -6244,7 +6244,7 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
 
   unsigned NumZero  = 0;
   unsigned NumNonZero = 0;
-  unsigned NonZeros = 0;
+  uint64_t NonZeros = 0;
   bool IsAllConstants = true;
   SmallSet<SDValue, 8> Values;
   for (unsigned i = 0; i < NumElems; ++i) {
@@ -6258,7 +6258,8 @@ X86TargetLowering::LowerBUILD_VECTOR(SDValue Op, SelectionDAG &DAG) const {
     if (X86::isZeroNode(Elt))
       NumZero++;
     else {
-      NonZeros |= (1 << i);
+      assert(i < sizeof(NonZeros) * 8); // Make sure the shift is within range.
+      NonZeros |= ((uint64_t)1 << i);
       NumNonZero++;
     }
   }