[CodeGen] Use TargetInfo::getABI() throughout X86*TargetCodeGenInfo.
We already have the ABI, we don't need a "HasAVX" flag. This will also makes it easier to add an AVX512 ABI. No functional change intended. llvm-svn: 237989
This commit is contained in:
parent
80964e7f65
commit
1fca2edc48
|
@ -1491,14 +1491,13 @@ class X86_64ABIInfo : public ABIInfo {
|
|||
return !getTarget().getTriple().isOSDarwin();
|
||||
}
|
||||
|
||||
bool HasAVX;
|
||||
// Some ABIs (e.g. X32 ABI and Native Client OS) use 32 bit pointers on
|
||||
// 64-bit hardware.
|
||||
bool Has64BitPointers;
|
||||
|
||||
public:
|
||||
X86_64ABIInfo(CodeGen::CodeGenTypes &CGT, bool hasavx) :
|
||||
ABIInfo(CGT), HasAVX(hasavx),
|
||||
X86_64ABIInfo(CodeGen::CodeGenTypes &CGT) :
|
||||
ABIInfo(CGT),
|
||||
Has64BitPointers(CGT.getDataLayout().getPointerSize(0) == 8) {
|
||||
}
|
||||
|
||||
|
@ -1523,6 +1522,10 @@ public:
|
|||
bool has64BitPointers() const {
|
||||
return Has64BitPointers;
|
||||
}
|
||||
|
||||
bool hasAVX() const {
|
||||
return getTarget().getABI() == "avx";
|
||||
}
|
||||
};
|
||||
|
||||
/// WinX86_64ABIInfo - The Windows X86_64 ABI information.
|
||||
|
@ -1552,10 +1555,9 @@ public:
|
|||
};
|
||||
|
||||
class X86_64TargetCodeGenInfo : public TargetCodeGenInfo {
|
||||
bool HasAVX;
|
||||
public:
|
||||
X86_64TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, bool HasAVX)
|
||||
: TargetCodeGenInfo(new X86_64ABIInfo(CGT, HasAVX)), HasAVX(HasAVX) {}
|
||||
X86_64TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
|
||||
: TargetCodeGenInfo(new X86_64ABIInfo(CGT)) {}
|
||||
|
||||
const X86_64ABIInfo &getABIInfo() const {
|
||||
return static_cast<const X86_64ABIInfo&>(TargetCodeGenInfo::getABIInfo());
|
||||
|
@ -1623,14 +1625,14 @@ public:
|
|||
}
|
||||
|
||||
unsigned getOpenMPSimdDefaultAlignment(QualType) const override {
|
||||
return HasAVX ? 32 : 16;
|
||||
return getABIInfo().hasAVX() ? 32 : 16;
|
||||
}
|
||||
};
|
||||
|
||||
class PS4TargetCodeGenInfo : public X86_64TargetCodeGenInfo {
|
||||
public:
|
||||
PS4TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, bool HasAVX)
|
||||
: X86_64TargetCodeGenInfo(CGT, HasAVX) {}
|
||||
PS4TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
|
||||
: X86_64TargetCodeGenInfo(CGT) {}
|
||||
|
||||
void getDependentLibraryOption(llvm::StringRef Lib,
|
||||
llvm::SmallString<24> &Opt) const override {
|
||||
|
@ -1695,10 +1697,11 @@ void WinX86_32TargetCodeGenInfo::SetTargetAttributes(const Decl *D,
|
|||
}
|
||||
|
||||
class WinX86_64TargetCodeGenInfo : public TargetCodeGenInfo {
|
||||
bool HasAVX;
|
||||
bool hasAVX() const { return getABIInfo().getTarget().getABI() == "avx"; }
|
||||
|
||||
public:
|
||||
WinX86_64TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT, bool HasAVX)
|
||||
: TargetCodeGenInfo(new WinX86_64ABIInfo(CGT)), HasAVX(HasAVX) {}
|
||||
WinX86_64TargetCodeGenInfo(CodeGen::CodeGenTypes &CGT)
|
||||
: TargetCodeGenInfo(new WinX86_64ABIInfo(CGT)) {}
|
||||
|
||||
void SetTargetAttributes(const Decl *D, llvm::GlobalValue *GV,
|
||||
CodeGen::CodeGenModule &CGM) const override;
|
||||
|
@ -1730,7 +1733,7 @@ public:
|
|||
}
|
||||
|
||||
unsigned getOpenMPSimdDefaultAlignment(QualType) const override {
|
||||
return HasAVX ? 32 : 16;
|
||||
return hasAVX() ? 32 : 16;
|
||||
}
|
||||
};
|
||||
|
||||
|
@ -1919,7 +1922,7 @@ void X86_64ABIInfo::classify(QualType Ty, uint64_t OffsetBase,
|
|||
// split.
|
||||
if (OffsetBase && OffsetBase != 64)
|
||||
Hi = Lo;
|
||||
} else if (Size == 128 || (HasAVX && isNamedArg && Size == 256)) {
|
||||
} else if (Size == 128 || (hasAVX() && isNamedArg && Size == 256)) {
|
||||
// Arguments of 256-bits are split into four eightbyte chunks. The
|
||||
// least significant one belongs to class SSE and all the others to class
|
||||
// SSEUP. The original Lo and Hi design considers that types can't be
|
||||
|
@ -2141,7 +2144,7 @@ ABIArgInfo X86_64ABIInfo::getIndirectReturnResult(QualType Ty) const {
|
|||
bool X86_64ABIInfo::IsIllegalVectorType(QualType Ty) const {
|
||||
if (const VectorType *VecTy = Ty->getAs<VectorType>()) {
|
||||
uint64_t Size = getContext().getTypeSize(VecTy);
|
||||
unsigned LargestVector = HasAVX ? 256 : 128;
|
||||
unsigned LargestVector = hasAVX() ? 256 : 128;
|
||||
if (Size <= 64 || Size > LargestVector)
|
||||
return true;
|
||||
}
|
||||
|
@ -7152,17 +7155,13 @@ const TargetCodeGenInfo &CodeGenModule::getTargetCodeGenInfo() {
|
|||
}
|
||||
|
||||
case llvm::Triple::x86_64: {
|
||||
bool HasAVX = getTarget().getABI() == "avx";
|
||||
|
||||
switch (Triple.getOS()) {
|
||||
case llvm::Triple::Win32:
|
||||
return *(TheTargetCodeGenInfo =
|
||||
new WinX86_64TargetCodeGenInfo(Types, HasAVX));
|
||||
return *(TheTargetCodeGenInfo = new WinX86_64TargetCodeGenInfo(Types));
|
||||
case llvm::Triple::PS4:
|
||||
return *(TheTargetCodeGenInfo = new PS4TargetCodeGenInfo(Types, HasAVX));
|
||||
return *(TheTargetCodeGenInfo = new PS4TargetCodeGenInfo(Types));
|
||||
default:
|
||||
return *(TheTargetCodeGenInfo =
|
||||
new X86_64TargetCodeGenInfo(Types, HasAVX));
|
||||
return *(TheTargetCodeGenInfo = new X86_64TargetCodeGenInfo(Types));
|
||||
}
|
||||
}
|
||||
case llvm::Triple::hexagon:
|
||||
|
|
Loading…
Reference in New Issue