diff --git a/llvm/lib/Analysis/VectorUtils.cpp b/llvm/lib/Analysis/VectorUtils.cpp index 2c03f1a05ced..23a0de856bcc 100644 --- a/llvm/lib/Analysis/VectorUtils.cpp +++ b/llvm/lib/Analysis/VectorUtils.cpp @@ -320,9 +320,6 @@ llvm::computeMinimumValueSizes(ArrayRef Blocks, DemandedBits &DB, SmallPtrSet InstructionSet; MapVector MinBWs; - assert(Blocks.size() > 0 && "Must have at least one block!"); - const DataLayout &DL = Blocks[0]->getModule()->getDataLayout(); - // Determine the roots. We work bottom-up, from truncs or icmps. bool SeenExtFromIllegalType = false; for (auto *BB : Blocks) @@ -366,19 +363,12 @@ llvm::computeMinimumValueSizes(ArrayRef Blocks, DemandedBits &DB, // If we encounter a type that is larger than 64 bits, we can't represent // it so bail out. - APInt NeededBits = DB.getDemandedBits(I); - unsigned BW = NeededBits.getBitWidth(); - if (BW > 64) + if (DB.getDemandedBits(I).getBitWidth() > 64) return MapVector(); - auto NSB = ComputeNumSignBits(I, DL); - - // Query demanded bits for the bits required by the instruction. Remove - // any bits that are equal to the sign bit, because we can truncate the - // instruction without changing their value. - NeededBits &= APInt::getLowBitsSet(BW, BW - NSB); - DBits[Leader] |= NeededBits.getZExtValue(); - DBits[I] |= NeededBits.getZExtValue(); + uint64_t V = DB.getDemandedBits(I).getZExtValue(); + DBits[Leader] |= V; + DBits[I] = V; // Casts, loads and instructions outside of our range terminate a chain // successfully. diff --git a/llvm/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll b/llvm/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll index 729592d6f811..c7ced757581a 100644 --- a/llvm/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll +++ b/llvm/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll @@ -263,41 +263,5 @@ for.body: ; preds = %entry, %for.body br i1 %exitcond, label %for.cond.cleanup, label %for.body } -; CHECK-LABEL: @add_g -; CHECK: load <16 x i8> -; CHECK: xor <16 x i8> -; CHECK: icmp ult <16 x i8> -; CHECK: select <16 x i1> {{.*}}, <16 x i8> -; CHECK: store <16 x i8> -define void @add_g(i8* noalias nocapture readonly %p, i8* noalias nocapture readonly %q, i8* noalias nocapture -%r, i8 %arg1, i32 %len) #0 { - %1 = icmp sgt i32 %len, 0 - br i1 %1, label %.lr.ph, label %._crit_edge - -.lr.ph: ; preds = %0 - %2 = sext i8 %arg1 to i64 - br label %3 - -._crit_edge: ; preds = %3, %0 - ret void - -;