llvm-6502/lib/IR
Pete Cooper a6ff22119f Move OperandList to be allocated prior to User for hung off subclasses.
For hung off uses, we need a Use* to tell use where the operands are.
This was User::OperandList but we want to remove that to save space
of all subclasses which aren't making use of 'hung off uses'.

Hung off uses now allocate their own 'OperandList' Use* in the
User::new which they call.

getOperandList() now uses the hung off uses bit to work out where the
Use* for the OperandList lives.  If a User has hung off uses, then this
bit tells them to go back a single Use* from the User* and use that
value as the OperandList.

If a User has no hung off uses, then we get the first operand by
subtracting (NumOperands * sizeof(Use)) from the User this pointer.

This saves a pointer from User and all subclasses.  Given the average
size of a subclass of User is 112 or 128 bytes, this saves around 7% of space
With malloc tending to align to 16-bytes the real saving is typically more like 3.5%.

On 'opt -O2 verify-uselistorder.lto.bc', peak memory usage prior to this change
is 149MB and after is 143MB so the savings are around 2.5% of peak.

Looking at some passes which allocate many Instructions and Values, parseIR drops
from 54.25MB to 52.21MB while the Inliner calls to Instruction::clone() drops
from 28.20MB to 27.05MB.

Reviewed by Duncan Exon Smith.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239623 91177308-0d34-0410-b5e6-96231b3b80d8
2015-06-12 17:48:18 +00:00
..
AsmWriter.cpp Prefer copy init over direct init. NFC. 2015-06-08 18:58:57 +00:00
AttributeImpl.h
Attributes.cpp Add initial support for the convergent attribute. 2015-05-26 23:48:40 +00:00
AutoUpgrade.cpp
BasicBlock.cpp Set proper debug location for branch added in BasicBlock::splitBasicBlock(). 2015-06-11 18:25:54 +00:00
CMakeLists.txt
Comdat.cpp
ConstantFold.cpp [ConstantFold] Don't skip the first gep index when folding geps 2015-06-04 07:01:56 +00:00
ConstantFold.h
ConstantRange.cpp
Constants.cpp Replace all accesses to User::OperandList with getter and setter methods. NFC. 2015-06-12 17:48:05 +00:00
ConstantsContext.h
Core.cpp [C API] Add LLVMStructGetTypeAtIndex. 2015-06-04 09:09:53 +00:00
DataLayout.cpp
DebugInfo.cpp
DebugInfoMetadata.cpp
DebugLoc.cpp
DiagnosticInfo.cpp Replace an instance of custom atomics with standard ones. 2015-06-11 17:30:34 +00:00
DiagnosticPrinter.cpp
DIBuilder.cpp
Dominators.cpp
Function.cpp ArgumentPromotion: Drop sret attribute on functions that are only called directly. 2015-06-10 21:14:34 +00:00
GCOV.cpp
Globals.cpp Rename NumOperands to make it clear its managed by the User. NFC. 2015-06-12 17:48:10 +00:00
GVMaterializer.cpp
InlineAsm.cpp
Instruction.cpp [PlaceSafepoints] Cleanup InsertSafepointPoll function 2015-05-26 21:03:23 +00:00
Instructions.cpp Rename NumOperands to make it clear its managed by the User. NFC. 2015-06-12 17:48:10 +00:00
IntrinsicInst.cpp
IRBuilder.cpp
IRPrintingPasses.cpp
LegacyPassManager.cpp Rangify more for loops in LegacyPassManager.cpp. 2015-06-05 17:48:47 +00:00
LLVMBuild.txt
LLVMContext.cpp [IR/AsmWriter] Output escape sequences if the first character isdigit() 2015-06-02 21:25:08 +00:00
LLVMContextImpl.cpp
LLVMContextImpl.h Move the name pointer out of Value into a map that lives on the 2015-06-01 22:24:01 +00:00
Makefile
Mangler.cpp Revert "Move dllimport name mangling to IR mangler." 2015-06-11 01:31:48 +00:00
MDBuilder.cpp Add isConstant argument to MDBuilder::createTBAAStructTagNode 2015-06-01 14:53:55 +00:00
Metadata.cpp Move the name pointer out of Value into a map that lives on the 2015-06-01 22:24:01 +00:00
MetadataImpl.h
MetadataTracking.cpp
Module.cpp
module.modulemap
Operator.cpp
Pass.cpp
PassManager.cpp
PassRegistry.cpp
Statepoint.cpp
SymbolTableListTraitsImpl.h
Type.cpp Int128 is also a built-in preconstructed type. 2015-06-02 23:56:53 +00:00
TypeFinder.cpp
Use.cpp
User.cpp Move OperandList to be allocated prior to User for hung off subclasses. 2015-06-12 17:48:18 +00:00
Value.cpp Rename NumOperands to make it clear its managed by the User. NFC. 2015-06-12 17:48:10 +00:00
ValueSymbolTable.cpp
ValueTypes.cpp
Verifier.cpp Add initial support for the convergent attribute. 2015-05-26 23:48:40 +00:00