From cd3a11f72576b88578f5615ab3d24919b6e60aae Mon Sep 17 00:00:00 2001 From: Hans Wennborg Date: Wed, 26 Sep 2012 14:01:53 +0000 Subject: Address Duncan's comments on r164684: - Put statistics in alphabetical order - Don't use getZextValue when building TableInt, just use APInts - Introduce Create{Z,S}ExtOrTrunc in IRBuilder. llvm-svn: 164696 --- llvm/lib/Transforms/Utils/SimplifyCFG.cpp | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) (limited to 'llvm/lib/Transforms/Utils/SimplifyCFG.cpp') diff --git a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp index d7468a18908..299c0596da3 100644 --- a/llvm/lib/Transforms/Utils/SimplifyCFG.cpp +++ b/llvm/lib/Transforms/Utils/SimplifyCFG.cpp @@ -58,10 +58,10 @@ static cl::opt SinkCommon("simplifycfg-sink-common", cl::Hidden, cl::init(true), cl::desc("Sink common instructions down to the end block")); -STATISTIC(NumSpeculations, "Number of speculative executed instructions"); -STATISTIC(NumLookupTables, "Number of switch instructions turned into lookup tables"); STATISTIC(NumBitMaps, "Number of switch instructions turned into bitmaps"); +STATISTIC(NumLookupTables, "Number of switch instructions turned into lookup tables"); STATISTIC(NumSinkCommons, "Number of common instructions sunk down to the end block"); +STATISTIC(NumSpeculations, "Number of speculative executed instructions"); namespace { /// ValueEqualityComparisonCase - Represents a case of a switch. @@ -3347,7 +3347,8 @@ SwitchLookupTable::SwitchLookupTable(Module &M, APInt TableInt(TableSize * IT->getBitWidth(), 0); for (uint64_t I = TableSize; I > 0; --I) { TableInt <<= IT->getBitWidth(); - TableInt |= cast(TableContents[I - 1])->getZExtValue(); + ConstantInt *Val = cast(TableContents[I - 1]); + TableInt |= Val->getValue().zext(TableInt.getBitWidth()); } BitMap = ConstantInt::get(M.getContext(), TableInt); BitMapElementTy = IT; @@ -3379,12 +3380,7 @@ Value *SwitchLookupTable::BuildLookup(Value *Index, IRBuilder<> &Builder) { // Cast Index to the same type as the bitmap. // Note: The Index is <= the number of elements in the table, so // truncating it to the width of the bitmask is safe. - Value *ShiftAmt = Index; - IntegerType *IndexTy = cast(Index->getType()); - if (IndexTy->getBitWidth() < MapTy->getBitWidth()) - ShiftAmt = Builder.CreateZExt(ShiftAmt, MapTy, "switch.zext"); - else if (IndexTy->getBitWidth() > MapTy->getBitWidth()) - ShiftAmt = Builder.CreateTrunc(ShiftAmt, MapTy, "switch.trunc"); + Value *ShiftAmt = Builder.CreateZExtOrTrunc(Index, MapTy, "switch.cast"); // Multiply the shift amount by the element width. ShiftAmt = Builder.CreateMul(ShiftAmt, -- cgit v1.2.3