llvm/lib/VMCore
Stepan Dyatkovskiy 484fc93eff PR1255: Case Ranges
Implemented IntItem - the wrapper around APInt. Why not to use APInt item directly right now?
1. It will very difficult to implement case ranges as series of small patches. We got several large and heavy patches. Each patch will about 90-120 kb. If you replace ConstantInt with APInt in SwitchInst you will need to changes at the same time all Readers,Writers and absolutely all passes that uses SwitchInst.
2. We can implement APInt pool inside and save memory space. E.g. we use several switches that works with 256 bit items (switch on signatures, or strings). We can avoid value duplicates in this case.
3. IntItem can be easyly easily replaced with APInt.
4. Currenly we can interpret IntItem both as ConstantInt and as APInt. It allows to provide SwitchInst methods that works with ConstantInt for non-updated passes.

Why I need it right now? Currently I need to update SimplifyCFG pass (EqualityComparisons). I need to work with APInts directly a lot, so peaces of code
ConstantInt *V = ...;
if (V->getValue().ugt(AnotherV->getValue()) {
  ...
}
will look awful. Much more better this way:
IntItem V = ConstantIntVal->getValue();
if (AnotherV < V) {
}

Of course any reviews are welcome.

P.S.: I'm also going to rename ConstantRangesSet to IntegersSubset, and CRSBuilder to IntegersSubsetMapping (allows to map individual subsets of integers to the BasicBlocks).
Since in future these classes will founded on APInt, it will possible to use them in more generic ways.




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157576 91177308-0d34-0410-b5e6-96231b3b80d8
2012-05-28 12:39:09 +00:00
..
AsmWriter.cpp Add half support to LLVM (for OpenCL) 2012-05-24 15:59:06 +00:00
Attributes.cpp switch AttrListPtr::get to take an ArrayRef, simplifying a lot of clients. 2012-05-28 01:47:44 +00:00
AutoUpgrade.cpp revert my previous patches that introduced an additional parameter to the objectsize intrinsic. 2012-05-22 15:25:31 +00:00
BasicBlock.cpp Add a constified getLandingPad() method. 2012-01-31 00:26:24 +00:00
CMakeLists.txt Fix up cmake build. 2012-03-23 03:55:14 +00:00
ConstantFold.cpp Reapply r155682, making constant folding more consistent, with a fix to work 2012-04-27 17:50:22 +00:00
ConstantFold.h Convert ConstantFoldGetElementPtr to use ArrayRef. 2011-07-19 15:30:30 +00:00
Constants.cpp Reserve space in these vectors to prevent having to grow the array too 2012-02-07 01:27:51 +00:00
ConstantsContext.h Switch this code to use hash_combine_range rather than incremental calls 2012-03-07 03:22:32 +00:00
Core.cpp Introduce llvm-c function LLVMPrintModuleToFile. 2012-05-09 16:54:17 +00:00
DebugLoc.cpp Compute hashes directly with hash_combine instead of taking a detour through FoldingSetNodeID. 2012-04-11 14:06:39 +00:00
Dominators.cpp Def here is an Instruction, so !isa<Instruction>(Def) is always false, 2012-04-13 00:50:57 +00:00
Function.cpp move some code around so that Verifier.cpp can get access to the intrinsic info table. 2012-05-27 18:28:35 +00:00
GCOV.cpp Remove extra semi-colons. 2012-02-22 17:25:00 +00:00
Globals.cpp Micro-optimisation in getAliasedGlobal. 2011-08-01 12:28:01 +00:00
GVMaterializer.cpp Kill ModuleProvider and ghost linkage by inverting the relationship between 2010-01-27 20:34:15 +00:00
InlineAsm.cpp land David Blaikie's patch to de-constify Type, with a few tweaks. 2011-07-18 04:54:35 +00:00
Instruction.cpp Fix a problem with incomplete equality testing of PHINodes in 2012-05-10 15:59:41 +00:00
Instructions.cpp PR1255: Case Ranges 2012-05-28 12:39:09 +00:00
IntrinsicInst.cpp warmup ritual: use high-level argument accessors 2010-06-22 19:46:37 +00:00
IRBuilder.cpp reapply the patches reverted in r149470 that reenable ConstantDataArray, 2012-02-05 02:29:43 +00:00
LeakDetector.cpp Merge System into Support. 2010-11-29 18:16:10 +00:00
LeaksContext.h Fix a bunch of namespace polution. 2010-04-15 17:08:50 +00:00
LLVMBuild.txt LLVMBuild: Remove trailing newline, which irked me. 2011-12-12 19:48:00 +00:00
LLVMContext.cpp Rename "fpaccuracy" metadata to the more generic "fpmath". That's because I'm 2012-04-14 12:36:06 +00:00
LLVMContextImpl.cpp Efficient Constant Uniquing. 2012-02-05 20:54:10 +00:00
LLVMContextImpl.h Cache the hash value of the operands in the MDNode. 2012-04-11 14:06:54 +00:00
Makefile Build system infrastructure for multiple tblgens. 2011-10-06 01:51:51 +00:00
Metadata.cpp Don't forget to reset 'first operand' flag when we're setting the MDNodeOperand value. 2012-04-26 00:38:42 +00:00
Module.cpp simplify code. 2012-05-28 01:37:08 +00:00
Pass.cpp Added TargetPassConfig::disablePass/substitutePass as a general mechanism to override specific passes. 2012-02-15 03:21:47 +00:00
PassManager.cpp Use ArrayRef instead of an explicit vector type. 2012-05-14 07:53:40 +00:00
PassRegistry.cpp Cosmetic changes, as per Nick's review. 2011-09-29 16:46:47 +00:00
PrintModulePass.cpp Now with fewer extraneous semicolons! 2010-10-07 22:25:06 +00:00
SymbolTableListTraitsImpl.h
Type.cpp Revert r155241, which is causing some breakage. 2012-04-20 23:11:38 +00:00
Use.cpp Add missing include of <new> 2012-03-26 14:04:17 +00:00
User.cpp Add some missing anchors. 2011-12-01 08:00:17 +00:00
Value.cpp Move CallbackVHs dtor inline, it can be devirtualized in many cases. Move the other virtual methods out of line as they are only called from within Value.cpp anyway. 2012-05-19 19:15:25 +00:00
ValueSymbolTable.cpp eliminate the Type::getDescription() method, using "<<" instead. This 2011-06-18 21:18:23 +00:00
ValueTypes.cpp Convert assert(0) to llvm_unreachable 2012-02-05 22:14:15 +00:00
Verifier.cpp PR1255: Case Ranges 2012-05-28 12:39:09 +00:00