mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-12 17:32:19 +00:00
Remove the 's' DataLayout specification
During the years there have been some attempts at figuring out how to align byval arguments. A look at the commit log suggests that they were * Use the ABI alignment. * When that was not sufficient for x86-64, I added the 's' specification to DataLayout. * When that was not sufficient Evan added the virtual getByValTypeAlignment. * When even that was not sufficient, we just got the FE to add the alignment to the byval. This patch is just a simple cleanup that removes my first attempt at fixing the problem. I also added an AArch64 implementation of getByValTypeAlignment to make sure this patch is a nop. I also left the 's' parsing for backward compatibility. I will send a short email to llvmdev about the change for anyone maintaining an out of tree target. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198287 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
447c3480e5
commit
33cc3f81c1
@ -1160,9 +1160,6 @@ as follows:
|
||||
``a<size>:<abi>:<pref>``
|
||||
This specifies the alignment for an aggregate type of a given bit
|
||||
``<size>``.
|
||||
``s<size>:<abi>:<pref>``
|
||||
This specifies the alignment for a stack object of a given bit
|
||||
``<size>``.
|
||||
``n<size1>:<size2>:<size3>...``
|
||||
This specifies a set of native integer widths for the target CPU in
|
||||
bits. For example, it might contain ``n32`` for 32-bit PowerPC,
|
||||
|
@ -45,8 +45,7 @@ enum AlignTypeEnum {
|
||||
INTEGER_ALIGN = 'i', ///< Integer type alignment
|
||||
VECTOR_ALIGN = 'v', ///< Vector type alignment
|
||||
FLOAT_ALIGN = 'f', ///< Floating point type alignment
|
||||
AGGREGATE_ALIGN = 'a', ///< Aggregate alignment
|
||||
STACK_ALIGN = 's' ///< Stack objects alignment
|
||||
AGGREGATE_ALIGN = 'a' ///< Aggregate alignment
|
||||
};
|
||||
|
||||
/// Layout alignment element.
|
||||
@ -344,10 +343,6 @@ public:
|
||||
/// an integer type of the specified bitwidth.
|
||||
unsigned getABIIntegerTypeAlignment(unsigned BitWidth) const;
|
||||
|
||||
/// getCallFrameTypeAlignment - Return the minimum ABI-required alignment
|
||||
/// for the specified type when it is part of a call frame.
|
||||
unsigned getCallFrameTypeAlignment(Type *Ty) const;
|
||||
|
||||
/// getPrefTypeAlignment - Return the preferred stack/global alignment for
|
||||
/// the specified type. This is always at least as good as the ABI alignment.
|
||||
unsigned getPrefTypeAlignment(Type *Ty) const;
|
||||
|
@ -1285,7 +1285,7 @@ void llvm::GetReturnInfo(Type* ReturnType, AttributeSet attr,
|
||||
/// function arguments in the caller parameter area. This is the actual
|
||||
/// alignment, not its logarithm.
|
||||
unsigned TargetLoweringBase::getByValTypeAlignment(Type *Ty) const {
|
||||
return TD->getCallFrameTypeAlignment(Ty);
|
||||
return TD->getABITypeAlignment(Ty);
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -225,6 +225,10 @@ void DataLayout::parseSpecifier(StringRef Desc) {
|
||||
Tok = Tok.substr(1);
|
||||
|
||||
switch (Specifier) {
|
||||
case 's':
|
||||
// Ignored for backward compatibility.
|
||||
// FIXME: remove this on LLVM 4.0.
|
||||
break;
|
||||
case 'E':
|
||||
LittleEndian = false;
|
||||
break;
|
||||
@ -259,8 +263,7 @@ void DataLayout::parseSpecifier(StringRef Desc) {
|
||||
case 'i':
|
||||
case 'v':
|
||||
case 'f':
|
||||
case 'a':
|
||||
case 's': {
|
||||
case 'a': {
|
||||
AlignTypeEnum AlignType;
|
||||
switch (Specifier) {
|
||||
default:
|
||||
@ -268,7 +271,6 @@ void DataLayout::parseSpecifier(StringRef Desc) {
|
||||
case 'v': AlignType = VECTOR_ALIGN; break;
|
||||
case 'f': AlignType = FLOAT_ALIGN; break;
|
||||
case 'a': AlignType = AGGREGATE_ALIGN; break;
|
||||
case 's': AlignType = STACK_ALIGN; break;
|
||||
}
|
||||
|
||||
// Bit size.
|
||||
@ -617,14 +619,6 @@ unsigned DataLayout::getABIIntegerTypeAlignment(unsigned BitWidth) const {
|
||||
return getAlignmentInfo(INTEGER_ALIGN, BitWidth, true, 0);
|
||||
}
|
||||
|
||||
unsigned DataLayout::getCallFrameTypeAlignment(Type *Ty) const {
|
||||
for (unsigned i = 0, e = Alignments.size(); i != e; ++i)
|
||||
if (Alignments[i].AlignType == STACK_ALIGN)
|
||||
return Alignments[i].ABIAlign;
|
||||
|
||||
return getABITypeAlignment(Ty);
|
||||
}
|
||||
|
||||
unsigned DataLayout::getPrefTypeAlignment(Type *Ty) const {
|
||||
return getAlignment(Ty, false);
|
||||
}
|
||||
|
@ -1346,6 +1346,12 @@ AArch64TargetLowering::LowerReturn(SDValue Chain,
|
||||
&RetOps[0], RetOps.size());
|
||||
}
|
||||
|
||||
unsigned AArch64TargetLowering::getByValTypeAlignment(Type *Ty) const {
|
||||
// This is a new backend. For anything more precise than this a FE should
|
||||
// set an explicit alignment.
|
||||
return 4;
|
||||
}
|
||||
|
||||
SDValue
|
||||
AArch64TargetLowering::LowerCall(CallLoweringInfo &CLI,
|
||||
SmallVectorImpl<SDValue> &InVals) const {
|
||||
|
@ -221,6 +221,8 @@ public:
|
||||
const SmallVectorImpl<SDValue> &OutVals,
|
||||
SDLoc dl, SelectionDAG &DAG) const;
|
||||
|
||||
virtual unsigned getByValTypeAlignment(Type *Ty) const LLVM_OVERRIDE;
|
||||
|
||||
SDValue LowerCall(CallLoweringInfo &CLI,
|
||||
SmallVectorImpl<SDValue> &InVals) const;
|
||||
|
||||
|
@ -34,7 +34,7 @@ AArch64TargetMachine::AArch64TargetMachine(const Target &T, StringRef TT,
|
||||
: LLVMTargetMachine(T, TT, CPU, FS, Options, RM, CM, OL),
|
||||
Subtarget(TT, CPU, FS),
|
||||
InstrInfo(Subtarget),
|
||||
DL("e-i64:64-i128:128-s:32-n32:64-S128"),
|
||||
DL("e-i64:64-i128:128-n32:64-S128"),
|
||||
TLInfo(*this),
|
||||
TSInfo(*this),
|
||||
FrameLowering(Subtarget) {
|
||||
|
@ -113,7 +113,7 @@ unsigned LLVMABIAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
|
||||
}
|
||||
|
||||
unsigned LLVMCallFrameAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
|
||||
return unwrap(TD)->getCallFrameTypeAlignment(unwrap(Ty));
|
||||
return unwrap(TD)->getABITypeAlignment(unwrap(Ty));
|
||||
}
|
||||
|
||||
unsigned LLVMPreferredAlignmentOfType(LLVMTargetDataRef TD, LLVMTypeRef Ty) {
|
||||
|
@ -53,10 +53,6 @@ static std::string computeDataLayout(const X86Subtarget &ST) {
|
||||
else
|
||||
Ret += "-f80:32";
|
||||
|
||||
// Objects on the stack ore aligned to 64 bits.
|
||||
if (ST.is64Bit())
|
||||
Ret += "-s:64";
|
||||
|
||||
// The registers can hold 8, 16, 32 or, in x86-64, 64 bits.
|
||||
if (ST.is64Bit())
|
||||
Ret += "-n8:16:32:64";
|
||||
|
Loading…
x
Reference in New Issue
Block a user