Remove two unnecessary wrappers of canPassInRegisters
These extra layers aren't necessary. llvm-svn: 359623
This commit is contained in:
parent
ba48a2c5e8
commit
adb419897c
|
@ -28,12 +28,6 @@ void CGCXXABI::ErrorUnsupportedABI(CodeGenFunction &CGF, StringRef S) {
|
|||
<< S;
|
||||
}
|
||||
|
||||
bool CGCXXABI::canCopyArgument(const CXXRecordDecl *RD) const {
|
||||
// We can only copy the argument if there exists at least one trivial,
|
||||
// non-deleted copy or move constructor.
|
||||
return RD->canPassInRegisters();
|
||||
}
|
||||
|
||||
llvm::Constant *CGCXXABI::GetBogusMemberPointer(QualType T) {
|
||||
return llvm::Constant::getNullValue(CGM.getTypes().ConvertType(T));
|
||||
}
|
||||
|
|
|
@ -136,10 +136,6 @@ public:
|
|||
RAA_Indirect
|
||||
};
|
||||
|
||||
/// Returns true if C++ allows us to copy the memory of an object of type RD
|
||||
/// when it is passed as an argument.
|
||||
bool canCopyArgument(const CXXRecordDecl *RD) const;
|
||||
|
||||
/// Returns how an argument of the given record type should be passed.
|
||||
virtual RecordArgABI getRecordArgABI(const CXXRecordDecl *RD) const = 0;
|
||||
|
||||
|
|
|
@ -62,13 +62,9 @@ public:
|
|||
|
||||
bool classifyReturnType(CGFunctionInfo &FI) const override;
|
||||
|
||||
bool passClassIndirect(const CXXRecordDecl *RD) const {
|
||||
return !canCopyArgument(RD);
|
||||
}
|
||||
|
||||
RecordArgABI getRecordArgABI(const CXXRecordDecl *RD) const override {
|
||||
// If C++ prohibits us from making a copy, pass by address.
|
||||
if (passClassIndirect(RD))
|
||||
if (!RD->canPassInRegisters())
|
||||
return RAA_Indirect;
|
||||
return RAA_Default;
|
||||
}
|
||||
|
@ -1093,7 +1089,7 @@ bool ItaniumCXXABI::classifyReturnType(CGFunctionInfo &FI) const {
|
|||
return false;
|
||||
|
||||
// If C++ prohibits us from making a copy, return by address.
|
||||
if (passClassIndirect(RD)) {
|
||||
if (!RD->canPassInRegisters()) {
|
||||
auto Align = CGM.getContext().getTypeAlignInChars(FI.getReturnType());
|
||||
FI.getReturnInfo() = ABIArgInfo::getIndirect(Align, /*ByVal=*/false);
|
||||
return true;
|
||||
|
|
|
@ -811,7 +811,7 @@ MicrosoftCXXABI::getRecordArgABI(const CXXRecordDecl *RD) const {
|
|||
// Use the simple Itanium rules for now.
|
||||
// FIXME: This is incompatible with MSVC for arguments with a dtor and no
|
||||
// copy ctor.
|
||||
return !canCopyArgument(RD) ? RAA_Indirect : RAA_Default;
|
||||
return !RD->canPassInRegisters() ? RAA_Indirect : RAA_Default;
|
||||
|
||||
case llvm::Triple::x86:
|
||||
// All record arguments are passed in memory on x86. Decide whether to
|
||||
|
@ -820,7 +820,7 @@ MicrosoftCXXABI::getRecordArgABI(const CXXRecordDecl *RD) const {
|
|||
|
||||
// If C++ prohibits us from making a copy, construct the arguments directly
|
||||
// into argument memory.
|
||||
if (!canCopyArgument(RD))
|
||||
if (!RD->canPassInRegisters())
|
||||
return RAA_DirectInMemory;
|
||||
|
||||
// Otherwise, construct the argument into a temporary and copy the bytes
|
||||
|
@ -829,7 +829,7 @@ MicrosoftCXXABI::getRecordArgABI(const CXXRecordDecl *RD) const {
|
|||
|
||||
case llvm::Triple::x86_64:
|
||||
case llvm::Triple::aarch64:
|
||||
return !canCopyArgument(RD) ? RAA_Indirect : RAA_Default;
|
||||
return !RD->canPassInRegisters() ? RAA_Indirect : RAA_Default;
|
||||
}
|
||||
|
||||
llvm_unreachable("invalid enum");
|
||||
|
|
Loading…
Reference in New Issue