mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-03-02 07:30:52 +00:00
Remove target specific code, move to TargetData.cpp file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@377 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
da8f004cdb
commit
231022954f
@ -12,12 +12,10 @@
|
||||
#define LLVM_DERIVED_TYPES_H
|
||||
|
||||
#include "llvm/Type.h"
|
||||
#include "llvm/CodeGen/TargetMachine.h"
|
||||
#include <vector>
|
||||
|
||||
// Future derived types: SIMD packed format
|
||||
|
||||
|
||||
class MethodType : public Type {
|
||||
public:
|
||||
typedef vector<const Type*> ParamTypes;
|
||||
@ -87,13 +85,7 @@ public:
|
||||
|
||||
private:
|
||||
ElementTypes ETypes;
|
||||
struct StructSizeAndOffsetInfo {
|
||||
int storageSize; // -1 until the value is computd
|
||||
vector<int> memberOffsets; // -1 until values are computed
|
||||
const TargetMachine* targetInfo;
|
||||
} *layoutCache;
|
||||
|
||||
private:
|
||||
|
||||
StructType(const StructType &); // Do not implement
|
||||
const StructType &operator=(const StructType &); // Do not implement
|
||||
|
||||
@ -105,53 +97,12 @@ protected:
|
||||
// Private ctor - Only can be created by a static member...
|
||||
StructType(const vector<const Type*> &Types, const string &Name);
|
||||
|
||||
// Reset cached info so it will be computed when first requested
|
||||
void ResetCachedInfo() const {
|
||||
layoutCache->storageSize = -1;
|
||||
layoutCache->memberOffsets.insert(layoutCache->memberOffsets.begin(),
|
||||
ETypes.size(), -1);
|
||||
layoutCache->targetInfo = 0;
|
||||
}
|
||||
|
||||
public:
|
||||
inline const ElementTypes &getElementTypes() const { return ETypes; }
|
||||
static const StructType *getStructType(const ElementTypes &Params);
|
||||
static const StructType *get(const ElementTypes &Params) {
|
||||
return getStructType(Params);
|
||||
}
|
||||
|
||||
|
||||
unsigned int getStorageSize(const TargetMachine& tmi) const {
|
||||
if (layoutCache->targetInfo && layoutCache->targetInfo != &tmi) {
|
||||
// target machine has changed (hey it could happen). discard cached info.
|
||||
ResetCachedInfo();
|
||||
layoutCache->targetInfo = &tmi;
|
||||
}
|
||||
|
||||
if (layoutCache->storageSize < 0) {
|
||||
layoutCache->storageSize = tmi.findOptimalStorageSize(this);
|
||||
assert(layoutCache->storageSize >= 0);
|
||||
}
|
||||
return layoutCache->storageSize;
|
||||
}
|
||||
unsigned int getElementOffset(int i, const TargetMachine& tmi) const {
|
||||
// target machine has changed (hey it could happen). discard cached info.
|
||||
if (layoutCache->targetInfo && layoutCache->targetInfo != &tmi)
|
||||
ResetCachedInfo();
|
||||
|
||||
if (layoutCache->memberOffsets[i] < 0) {
|
||||
layoutCache->targetInfo = &tmi; // remember which target was used
|
||||
|
||||
unsigned int *offsetVec = tmi.findOptimalMemberOffsets(this);
|
||||
for (unsigned i=0, N=layoutCache->memberOffsets.size(); i < N; ++i) {
|
||||
layoutCache->memberOffsets[i] = offsetVec[i];
|
||||
assert(layoutCache->memberOffsets[i] >= 0);
|
||||
}
|
||||
delete[] offsetVec;
|
||||
}
|
||||
|
||||
return layoutCache->memberOffsets[i];
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user