From aa1d638800b28e1de11daf6a340f8810ba2e07ac Mon Sep 17 00:00:00 2001 From: James Molloy Date: Tue, 10 May 2016 12:27:23 +0000 Subject: 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. llvm-svn: 269051 --- llvm/lib/Analysis/VectorUtils.cpp | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) (limited to 'llvm/lib/Analysis/VectorUtils.cpp') diff --git a/llvm/lib/Analysis/VectorUtils.cpp b/llvm/lib/Analysis/VectorUtils.cpp index 2c03f1a05ce..23a0de856bc 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. -- cgit v1.2.3