diff options
| author | Evan Cheng <evan.cheng@apple.com> | 2007-01-19 07:51:42 +0000 |
|---|---|---|
| committer | Evan Cheng <evan.cheng@apple.com> | 2007-01-19 07:51:42 +0000 |
| commit | a8e2989ece6dc46df59b0768184028257f913843 (patch) | |
| tree | c0e782730e267b35f0d15668d0689e6c322fe246 /lib/Target/ARM/ARMConstantPoolValue.h | |
| parent | bd92d81d22c90433e968077aa0a4157d631d6365 (diff) | |
ARM backend contribution from Apple.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33353 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/ARM/ARMConstantPoolValue.h')
| -rw-r--r-- | lib/Target/ARM/ARMConstantPoolValue.h | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/Target/ARM/ARMConstantPoolValue.h b/lib/Target/ARM/ARMConstantPoolValue.h new file mode 100644 index 0000000000..a9143d4ddc --- /dev/null +++ b/lib/Target/ARM/ARMConstantPoolValue.h @@ -0,0 +1,50 @@ +//===- ARMConstantPoolValue.h - ARM constantpool value ----------*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file was developed by Evan Cheng and is distributed under the +// University of Illinois Open Source License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file implements the ARM specific constantpool value class. +// +//===----------------------------------------------------------------------===// + +#ifndef LLVM_TARGET_ARM_CONSTANTPOOLVALUE_H +#define LLVM_TARGET_ARM_CONSTANTPOOLVALUE_H + +#include "llvm/CodeGen/MachineConstantPool.h" + +namespace llvm { + +/// ARMConstantPoolValue - ARM specific constantpool value. This is used to +/// represent PC relative displacement between the address of the load +/// instruction and the global value being loaded, i.e. (&GV-(LPIC+8)). +class ARMConstantPoolValue : public MachineConstantPoolValue { + GlobalValue *GV; // GlobalValue being loaded. + unsigned LabelId; // Label id of the load. + bool isNonLazyPtr; // True if loading a Mac OS X non_lazy_ptr stub. + unsigned char PCAdjust; // Extra adjustment if constantpool is pc relative. + // 8 for ARM, 4 for Thumb. + +public: + ARMConstantPoolValue(GlobalValue *gv, unsigned id, bool isNonLazy = false, + unsigned char PCAdj = 0); + + GlobalValue *getGV() const { return GV; } + unsigned getLabelId() const { return LabelId; } + bool isNonLazyPointer() const { return isNonLazyPtr; } + unsigned char getPCAdjustment() const { return PCAdjust; } + + virtual int getExistingMachineCPValue(MachineConstantPool *CP, + unsigned Alignment); + + virtual void AddSelectionDAGCSEId(FoldingSetNodeID &ID); + + virtual void print(std::ostream &O) const; +}; + +} + +#endif |
