llvm/unittests
Simon Pilgrim 02e6cb0f2d [APInt] Add APInt::setBits() method to set all bits in range
The current pattern for setting bits in range is typically:

Mask |= APInt::getBitsSet(MaskSizeInBits, LoPos, HiPos);

Which can be particularly slow for large APInts (MaskSizeInBits > 64) as they require the allocation memory for the temporary variable.

This is one of the key compile time issues identified in PR32037.

This patch adds the APInt::setBits() helper method which avoids the temporary memory allocation completely, this first implementation uses setBit() internally instead but already significantly reduces the regression in PR32037 (~10% drop). Additional optimization may be possible.

I investigated whether there is need for APInt::clearBits() and APInt::flipBits() equivalents but haven't seen these patterns to be particularly common, but reusing the code would be trivial.

Differential Revision: https://reviews.llvm.org/D30265

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@296102 91177308-0d34-0410-b5e6-96231b3b80d8
2017-02-24 10:15:29 +00:00
..
ADT [APInt] Add APInt::setBits() method to set all bits in range 2017-02-24 10:15:29 +00:00
Analysis
AsmParser
Bitcode
CodeGen
DebugInfo Fix unit tests after r296049. 2017-02-24 00:25:17 +00:00
ExecutionEngine
IR [IR] Add a Instruction::dropPoisonGeneratingFlags helper 2017-02-23 22:50:52 +00:00
LineEditor
Linker
MC
MI Test if we can use raw strings on all platforms compiling LLVM. 2017-02-23 01:09:01 +00:00
Object
ObjectYAML
Option
ProfileData
Support
Target
Transforms Move updating functions to MemorySSAUpdater. 2017-02-22 22:19:55 +00:00
XRay
CMakeLists.txt