From: James Molloy Date: Tue, 10 May 2016 12:27:23 +0000 (+0000) Subject: Revert "[VectorUtils] Query number of sign bits to allow more truncations" X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3a22301784a97cdf18c6c934d6769298fb3a6080;p=llvm Revert "[VectorUtils] Query number of sign bits to allow more truncations" This was a fairly simple patch but on closer inspection was seriously flawed and caused PR27690. This reverts commit r268921. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@269051 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Analysis/VectorUtils.cpp b/lib/Analysis/VectorUtils.cpp index 2c03f1a05ce..23a0de856bc 100644 --- a/lib/Analysis/VectorUtils.cpp +++ b/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/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll b/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll index 729592d6f81..c7ced757581 100644 --- a/test/Transforms/LoopVectorize/AArch64/loop-vectorization-factors.ll +++ b/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 - -;