[PATCH] Reorder Value and User fields to save 8 bytes of padding on 64-bit
Reid Kleckner
rnk at google.com
Mon Jun 9 16:40:23 PDT 2014
Closed by commit rL210501 (authored by @rnk).
http://reviews.llvm.org/D4073
Files:
llvm/trunk/include/llvm/IR/User.h
llvm/trunk/include/llvm/IR/Value.h
llvm/trunk/lib/IR/Value.cpp
Index: llvm/trunk/include/llvm/IR/Value.h
===================================================================
--- llvm/trunk/include/llvm/IR/Value.h
+++ llvm/trunk/include/llvm/IR/Value.h
@@ -67,6 +67,13 @@
///
/// @brief LLVM Value Representation
class Value {
+ Type *VTy;
+ Use *UseList;
+
+ friend class ValueSymbolTable; // Allow ValueSymbolTable to directly mod Name.
+ friend class ValueHandleBase;
+ ValueName *Name;
+
const unsigned char SubclassID; // Subclass identifier (for isa/dyn_cast)
unsigned char HasValueHandle : 1; // Has a ValueHandle pointing to this?
protected:
@@ -77,6 +84,11 @@
unsigned char SubclassOptionalData : 7;
private:
+ /// SubclassData - This member is defined by this class, but is not used for
+ /// anything. Subclasses can use it to hold whatever state they find useful.
+ /// This field is initialized to zero by the ctor.
+ unsigned short SubclassData;
+
template <typename UseT> // UseT == 'Use' or 'const Use'
class use_iterator_impl
: public std::iterator<std::forward_iterator_tag, UseT *, ptrdiff_t> {
@@ -167,18 +179,6 @@
unsigned getOperandNo() const { return UI->getOperandNo(); }
};
- /// SubclassData - This member is defined by this class, but is not used for
- /// anything. Subclasses can use it to hold whatever state they find useful.
- /// This field is initialized to zero by the ctor.
- unsigned short SubclassData;
-
- Type *VTy;
- Use *UseList;
-
- friend class ValueSymbolTable; // Allow ValueSymbolTable to directly mod Name.
- friend class ValueHandleBase;
- ValueName *Name;
-
void operator=(const Value &) LLVM_DELETED_FUNCTION;
Value(const Value &) LLVM_DELETED_FUNCTION;
Index: llvm/trunk/include/llvm/IR/User.h
===================================================================
--- llvm/trunk/include/llvm/IR/User.h
+++ llvm/trunk/include/llvm/IR/User.h
@@ -39,20 +39,20 @@
friend struct HungoffOperandTraits;
virtual void anchor();
protected:
+ /// NumOperands - The number of values used by this User.
+ ///
+ unsigned NumOperands;
+
/// OperandList - This is a pointer to the array of Uses for this User.
/// For nodes of fixed arity (e.g. a binary operator) this array will live
/// prefixed to some derived class instance. For nodes of resizable variable
/// arity (e.g. PHINodes, SwitchInst etc.), this memory will be dynamically
/// allocated and should be destroyed by the classes' virtual dtor.
Use *OperandList;
- /// NumOperands - The number of values used by this User.
- ///
- unsigned NumOperands;
-
void *operator new(size_t s, unsigned Us);
User(Type *ty, unsigned vty, Use *OpList, unsigned NumOps)
- : Value(ty, vty), OperandList(OpList), NumOperands(NumOps) {}
+ : Value(ty, vty), NumOperands(NumOps), OperandList(OpList) {}
Use *allocHungoffUses(unsigned) const;
void dropHungoffUses() {
Use::zap(OperandList, OperandList + NumOperands, true);
Index: llvm/trunk/lib/IR/Value.cpp
===================================================================
--- llvm/trunk/lib/IR/Value.cpp
+++ llvm/trunk/lib/IR/Value.cpp
@@ -38,13 +38,12 @@
static inline Type *checkType(Type *Ty) {
assert(Ty && "Value defined with a null type: Error!");
- return const_cast<Type*>(Ty);
+ return Ty;
}
Value::Value(Type *ty, unsigned scid)
- : SubclassID(scid), HasValueHandle(0),
- SubclassOptionalData(0), SubclassData(0), VTy((Type*)checkType(ty)),
- UseList(nullptr), Name(nullptr) {
+ : VTy(checkType(ty)), UseList(nullptr), Name(nullptr), SubclassID(scid),
+ HasValueHandle(0), SubclassOptionalData(0), SubclassData(0) {
// FIXME: Why isn't this in the subclass gunk??
// Note, we cannot call isa<CallInst> before the CallInst has been
// constructed.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D4073.10253.patch
Type: text/x-patch
Size: 3785 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140609/e0b201bc/attachment.bin>
More information about the llvm-commits
mailing list