mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-01 15:17:25 +00:00
Fix resetting the DataLayout in a Module.
No tool does this currently, but as everything else in a module we should be able to change its DataLayout. Most of the fix is in DataLayout to make sure it can be reset properly. The test uses Module::setDataLayout since the fact that we mutate a DataLayout is an implementation detail. The module could hold a OwningPtr<DataLayout> and the DataLayout itself could be immutable. Thanks to Philip Reames for pushing me in the right direction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@202198 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -110,7 +110,7 @@ private:
|
||||
|
||||
/// Alignments - Where the primitive type alignment data is stored.
|
||||
///
|
||||
/// @sa init().
|
||||
/// @sa reset().
|
||||
/// @note Could support multiple size pointer alignments, e.g., 32-bit
|
||||
/// pointers vs. 64-bit pointers by extending LayoutAlignment, but for now,
|
||||
/// we don't.
|
||||
@@ -161,30 +161,35 @@ private:
|
||||
/// malformed.
|
||||
void parseSpecifier(StringRef LayoutDescription);
|
||||
|
||||
// Free all internal data structures.
|
||||
void clear();
|
||||
|
||||
public:
|
||||
/// Constructs a DataLayout from a specification string. See init().
|
||||
explicit DataLayout(StringRef LayoutDescription) { init(LayoutDescription); }
|
||||
/// Constructs a DataLayout from a specification string. See reset().
|
||||
explicit DataLayout(StringRef LayoutDescription) : LayoutMap(0) {
|
||||
reset(LayoutDescription);
|
||||
}
|
||||
|
||||
/// Initialize target data from properties stored in the module.
|
||||
explicit DataLayout(const Module *M);
|
||||
|
||||
DataLayout(const DataLayout &DL) { *this = DL; }
|
||||
DataLayout(const DataLayout &DL) : LayoutMap(0) { *this = DL; }
|
||||
|
||||
DataLayout &operator=(const DataLayout &DL) {
|
||||
clear();
|
||||
LittleEndian = DL.isLittleEndian();
|
||||
StackNaturalAlign = DL.StackNaturalAlign;
|
||||
ManglingMode = DL.ManglingMode;
|
||||
LegalIntWidths = DL.LegalIntWidths;
|
||||
Alignments = DL.Alignments;
|
||||
Pointers = DL.Pointers;
|
||||
LayoutMap = 0;
|
||||
return *this;
|
||||
}
|
||||
|
||||
~DataLayout(); // Not virtual, do not subclass this class
|
||||
|
||||
/// Parse a data layout string (with fallback to default values).
|
||||
void init(StringRef LayoutDescription);
|
||||
void reset(StringRef LayoutDescription);
|
||||
|
||||
/// Layout endianness...
|
||||
bool isLittleEndian() const { return LittleEndian; }
|
||||
|
||||
Reference in New Issue
Block a user