Remove ctor with each piece specifyable (which causes overload ambiguities),

add a new init method.

llvm-svn: 28828
This commit is contained in:
Chris Lattner 2006-06-16 18:11:26 +00:00
parent 4a8f3c456a
commit 9fcdb0d7e5
2 changed files with 12 additions and 42 deletions

View File

@ -45,20 +45,16 @@ class TargetData : public ImmutablePass {
unsigned char PointerAlignment; // Defaults to 8 bytes
public:
TargetData(const std::string &TargetName = "",
bool LittleEndian = false,
unsigned char PtrSize = 8,
unsigned char PtrAl = 8, unsigned char DoubleAl = 8,
unsigned char FloatAl = 4, unsigned char LongAl = 8,
unsigned char IntAl = 4, unsigned char ShortAl = 2,
unsigned char ByteAl = 1, unsigned char BoolAl = 1);
/// Constructs a TargetData from a string of the following format:
/// "E-p:64:64-d:64-f:32-l:64-i:32-s:16-b:8-B:8"
/// The above string is considered the default, and any values not specified
/// in the string will be assumed to be as above.
TargetData(const std::string &TargetName,
const std::string &TargetDescription);
TargetData(const std::string &TargetName = "",
const std::string &TargetDescription = "") {
assert(!TargetName.empty() &&
"ERROR: Tool did not specify a target data to use!");
init(TargetDescription);
}
// Copy constructor
TargetData (const TargetData &TD) :
@ -78,6 +74,11 @@ public:
TargetData(const std::string &ToolName, const Module *M);
~TargetData(); // Not virtual, do not subclass this class
/// init - Specify configuration if not available at ctor time.
///
void init(const std::string &TargetDescription);
/// Target endianness...
bool isLittleEndian() const { return LittleEndian; }
bool isBigEndian() const { return !LittleEndian; }

View File

@ -95,38 +95,7 @@ unsigned StructLayout::getElementContainingOffset(uint64_t Offset) const {
// TargetData Class Implementation
//===----------------------------------------------------------------------===//
TargetData::TargetData(const std::string &TargetName,
bool isLittleEndian, unsigned char PtrSize,
unsigned char PtrAl, unsigned char DoubleAl,
unsigned char FloatAl, unsigned char LongAl,
unsigned char IntAl, unsigned char ShortAl,
unsigned char ByteAl, unsigned char BoolAl) {
// If this assert triggers, a pass "required" TargetData information, but the
// top level tool did not provide one for it. We do not want to default
// construct, or else we might end up using a bad endianness or pointer size!
//
assert(!TargetName.empty() &&
"ERROR: Tool did not specify a target data to use!");
LittleEndian = isLittleEndian;
PointerSize = PtrSize;
PointerAlignment = PtrAl;
DoubleAlignment = DoubleAl;
FloatAlignment = FloatAl;
LongAlignment = LongAl;
IntAlignment = IntAl;
ShortAlignment = ShortAl;
ByteAlignment = ByteAl;
BoolAlignment = BoolAl;
}
TargetData::TargetData(const std::string &TargetName,
const std::string &TargetDescription) {
assert(!TargetName.empty() &&
"ERROR: Tool did not specify a target data to use!");
void TargetData::init(const std::string &TargetDescription) {
std::string temp = TargetDescription;
LittleEndian = false;