mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-31 17:04:28 +00:00
Shrink MachineMemOperand by storing the alignment in log form
and rearranging the fields. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53195 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
03bafaf802
commit
35c640aee5
@ -16,6 +16,8 @@
|
|||||||
#ifndef LLVM_CODEGEN_MEMOPERAND_H
|
#ifndef LLVM_CODEGEN_MEMOPERAND_H
|
||||||
#define LLVM_CODEGEN_MEMOPERAND_H
|
#define LLVM_CODEGEN_MEMOPERAND_H
|
||||||
|
|
||||||
|
#include "llvm/Support/MathExtras.h"
|
||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
|
|
||||||
class Value;
|
class Value;
|
||||||
@ -29,11 +31,10 @@ class Value;
|
|||||||
/// that aren't explicit in the regular LLVM IR.
|
/// that aren't explicit in the regular LLVM IR.
|
||||||
///
|
///
|
||||||
class MachineMemOperand {
|
class MachineMemOperand {
|
||||||
const Value *V;
|
|
||||||
unsigned int Flags;
|
|
||||||
int64_t Offset;
|
int64_t Offset;
|
||||||
uint64_t Size;
|
uint64_t Size;
|
||||||
unsigned int Alignment;
|
const Value *V;
|
||||||
|
unsigned int Flags;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/// Flags values. These may be or'd together.
|
/// Flags values. These may be or'd together.
|
||||||
@ -50,7 +51,7 @@ public:
|
|||||||
/// specified address Value, flags, offset, size, and alignment.
|
/// specified address Value, flags, offset, size, and alignment.
|
||||||
MachineMemOperand(const Value *v, unsigned int f, int64_t o, uint64_t s,
|
MachineMemOperand(const Value *v, unsigned int f, int64_t o, uint64_t s,
|
||||||
unsigned int a)
|
unsigned int a)
|
||||||
: V(v), Flags(f), Offset(o), Size(s), Alignment(a) {}
|
: Offset(o), Size(s), V(v), Flags((f & 7) | ((Log2_32(a) + 1) << 3)) {}
|
||||||
|
|
||||||
/// getValue - Return the base address of the memory access.
|
/// getValue - Return the base address of the memory access.
|
||||||
/// Special values are PseudoSourceValue::FPRel, PseudoSourceValue::SPRel,
|
/// Special values are PseudoSourceValue::FPRel, PseudoSourceValue::SPRel,
|
||||||
@ -59,7 +60,7 @@ public:
|
|||||||
const Value *getValue() const { return V; }
|
const Value *getValue() const { return V; }
|
||||||
|
|
||||||
/// getFlags - Return the raw flags of the source value, \see MemOperandFlags.
|
/// getFlags - Return the raw flags of the source value, \see MemOperandFlags.
|
||||||
unsigned int getFlags() const { return Flags; }
|
unsigned int getFlags() const { return Flags & 7; }
|
||||||
|
|
||||||
/// getOffset - For normal values, this is a byte offset added to the base
|
/// getOffset - For normal values, this is a byte offset added to the base
|
||||||
/// address. For PseudoSourceValue::FPRel values, this is the FrameIndex
|
/// address. For PseudoSourceValue::FPRel values, this is the FrameIndex
|
||||||
@ -71,7 +72,7 @@ public:
|
|||||||
|
|
||||||
/// getAlignment - Return the minimum known alignment in bytes of the
|
/// getAlignment - Return the minimum known alignment in bytes of the
|
||||||
/// memory reference.
|
/// memory reference.
|
||||||
unsigned int getAlignment() const { return Alignment; }
|
unsigned int getAlignment() const { return (1u << (Flags >> 3)) >> 1; }
|
||||||
|
|
||||||
bool isLoad() const { return Flags & MOLoad; }
|
bool isLoad() const { return Flags & MOLoad; }
|
||||||
bool isStore() const { return Flags & MOStore; }
|
bool isStore() const { return Flags & MOStore; }
|
||||||
|
Loading…
Reference in New Issue
Block a user