[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:
Ahmed Bougacha 2015-05-22 02:25:58 +00:00
parent 80964e7f65
commit 1fca2edc48
1 changed files with 21 additions and 22 deletions

View File

@ -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: