mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-12-30 07:33:23 +00:00
Shrink the size of AllocationInst by using its SubclassData
field to store the alignment value instead of haing a separate field. llvm-svn: 48727
This commit is contained in:
parent
b9c5e6258f
commit
fec60bb357
@ -21,6 +21,7 @@
|
||||
#include "llvm/InstrTypes.h"
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/ParameterAttributes.h"
|
||||
#include "llvm/Support/MathExtras.h"
|
||||
|
||||
namespace llvm {
|
||||
|
||||
@ -39,7 +40,6 @@ class APInt;
|
||||
/// AllocaInst.
|
||||
///
|
||||
class AllocationInst : public UnaryInstruction {
|
||||
unsigned Alignment;
|
||||
protected:
|
||||
AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy, unsigned Align,
|
||||
const std::string &Name = "", Instruction *InsertBefore = 0);
|
||||
@ -74,11 +74,8 @@ public:
|
||||
/// getAlignment - Return the alignment of the memory that is being allocated
|
||||
/// by the instruction.
|
||||
///
|
||||
unsigned getAlignment() const { return Alignment; }
|
||||
void setAlignment(unsigned Align) {
|
||||
assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
|
||||
Alignment = Align;
|
||||
}
|
||||
unsigned getAlignment() const { return (1u << SubclassData) >> 1; }
|
||||
void setAlignment(unsigned Align);
|
||||
|
||||
virtual Instruction *clone() const = 0;
|
||||
|
||||
|
@ -677,8 +677,8 @@ AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
|
||||
unsigned Align, const std::string &Name,
|
||||
Instruction *InsertBefore)
|
||||
: UnaryInstruction(PointerType::getUnqual(Ty), iTy, getAISize(ArraySize),
|
||||
InsertBefore), Alignment(Align) {
|
||||
assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
|
||||
InsertBefore) {
|
||||
setAlignment(Align);
|
||||
assert(Ty != Type::VoidTy && "Cannot allocate void!");
|
||||
setName(Name);
|
||||
}
|
||||
@ -687,8 +687,8 @@ AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
|
||||
unsigned Align, const std::string &Name,
|
||||
BasicBlock *InsertAtEnd)
|
||||
: UnaryInstruction(PointerType::getUnqual(Ty), iTy, getAISize(ArraySize),
|
||||
InsertAtEnd), Alignment(Align) {
|
||||
assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
|
||||
InsertAtEnd) {
|
||||
setAlignment(Align);
|
||||
assert(Ty != Type::VoidTy && "Cannot allocate void!");
|
||||
setName(Name);
|
||||
}
|
||||
@ -697,6 +697,12 @@ AllocationInst::AllocationInst(const Type *Ty, Value *ArraySize, unsigned iTy,
|
||||
AllocationInst::~AllocationInst() {
|
||||
}
|
||||
|
||||
void AllocationInst::setAlignment(unsigned Align) {
|
||||
assert((Align & (Align-1)) == 0 && "Alignment is not a power of 2!");
|
||||
SubclassData = Log2_32(Align) + 1;
|
||||
assert(getAlignment() == Align && "Alignment representation error!");
|
||||
}
|
||||
|
||||
bool AllocationInst::isArrayAllocation() const {
|
||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(getOperand(0)))
|
||||
return CI->getZExtValue() != 1;
|
||||
|
Loading…
Reference in New Issue
Block a user