Author: arnolds Date: Thu Dec 1 12:07:38 2016 New Revision: 288394 URL: http://llvm.org/viewvc/llvm-project?rev=288394&view=rev Log: swiftcc: Add an api to query whether a target ABI stores swifterror in a register
Modified: cfe/trunk/include/clang/CodeGen/SwiftCallingConv.h cfe/trunk/lib/CodeGen/ABIInfo.h cfe/trunk/lib/CodeGen/SwiftCallingConv.cpp cfe/trunk/lib/CodeGen/TargetInfo.cpp Modified: cfe/trunk/include/clang/CodeGen/SwiftCallingConv.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/CodeGen/SwiftCallingConv.h?rev=288394&r1=288393&r2=288394&view=diff ============================================================================== --- cfe/trunk/include/clang/CodeGen/SwiftCallingConv.h (original) +++ cfe/trunk/include/clang/CodeGen/SwiftCallingConv.h Thu Dec 1 12:07:38 2016 @@ -160,6 +160,9 @@ ABIArgInfo classifyArgumentType(CodeGenM /// private interface for Clang. void computeABIInfo(CodeGenModule &CGM, CGFunctionInfo &FI); +/// Is swifterror lowered to a register by the target ABI. +bool isSwiftErrorLoweredInRegister(CodeGenModule &CGM); + } // end namespace swiftcall } // end namespace CodeGen } // end namespace clang Modified: cfe/trunk/lib/CodeGen/ABIInfo.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ABIInfo.h?rev=288394&r1=288393&r2=288394&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/ABIInfo.h (original) +++ cfe/trunk/lib/CodeGen/ABIInfo.h Thu Dec 1 12:07:38 2016 @@ -142,6 +142,8 @@ namespace swiftcall { llvm::Type *eltTy, unsigned elts) const; + virtual bool isSwiftErrorInRegister() const = 0; + static bool classof(const ABIInfo *info) { return info->supportsSwift(); } Modified: cfe/trunk/lib/CodeGen/SwiftCallingConv.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/SwiftCallingConv.cpp?rev=288394&r1=288393&r2=288394&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/SwiftCallingConv.cpp (original) +++ cfe/trunk/lib/CodeGen/SwiftCallingConv.cpp Thu Dec 1 12:07:38 2016 @@ -828,3 +828,8 @@ void swiftcall::computeABIInfo(CodeGenMo argInfo.info = classifyArgumentType(CGM, argInfo.type); } } + +// Is swifterror lowered to a register by the target ABI. +bool swiftcall::isSwiftErrorLoweredInRegister(CodeGenModule &CGM) { + return getSwiftABIInfo(CGM).isSwiftErrorInRegister(); +} Modified: cfe/trunk/lib/CodeGen/TargetInfo.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/TargetInfo.cpp?rev=288394&r1=288393&r2=288394&view=diff ============================================================================== --- cfe/trunk/lib/CodeGen/TargetInfo.cpp (original) +++ cfe/trunk/lib/CodeGen/TargetInfo.cpp Thu Dec 1 12:07:38 2016 @@ -958,6 +958,11 @@ public: // scalar registers. return occupiesMoreThan(CGT, scalars, /*total*/ 3); } + + bool isSwiftErrorInRegister() const override { + // x86-32 lowering does not support passing swifterror in a register. + return false; + } }; class X86_32TargetCodeGenInfo : public TargetCodeGenInfo { @@ -2012,6 +2017,9 @@ public: bool asReturnValue) const override { return occupiesMoreThan(CGT, scalars, /*total*/ 4); } + bool isSwiftErrorInRegister() const override { + return true; + } }; /// WinX86_64ABIInfo - The Windows X86_64 ABI information. @@ -2043,6 +2051,10 @@ public: return occupiesMoreThan(CGT, scalars, /*total*/ 4); } + bool isSwiftErrorInRegister() const override { + return true; + } + private: ABIArgInfo classify(QualType Ty, unsigned &FreeSSERegs, bool IsReturnType) const; @@ -4628,6 +4640,9 @@ private: bool asReturnValue) const override { return occupiesMoreThan(CGT, scalars, /*total*/ 4); } + bool isSwiftErrorInRegister() const override { + return true; + } }; class AArch64TargetCodeGenInfo : public TargetCodeGenInfo { @@ -5181,6 +5196,9 @@ private: bool asReturnValue) const override { return occupiesMoreThan(CGT, scalars, /*total*/ 4); } + bool isSwiftErrorInRegister() const override { + return true; + } }; class ARMTargetCodeGenInfo : public TargetCodeGenInfo { @@ -5949,6 +5967,9 @@ public: bool asReturnValue) const override { return occupiesMoreThan(CGT, scalars, /*total*/ 4); } + bool isSwiftErrorInRegister() const override { + return true; + } }; class SystemZTargetCodeGenInfo : public TargetCodeGenInfo { _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits