diff --git a/clang/lib/CodeGen/TargetInfo.cpp b/clang/lib/CodeGen/TargetInfo.cpp --- a/clang/lib/CodeGen/TargetInfo.cpp +++ b/clang/lib/CodeGen/TargetInfo.cpp @@ -9979,15 +9979,30 @@ // SPIR ABI Implementation //===----------------------------------------------------------------------===// +namespace { +class SPIRABIInfo : public DefaultABIInfo { +public: + SPIRABIInfo(CodeGenTypes &CGT) : DefaultABIInfo(CGT) { + setCCs(); + } + +private: + void setCCs(); +}; +} // end anonymous namespace namespace { class SPIRTargetCodeGenInfo : public TargetCodeGenInfo { public: SPIRTargetCodeGenInfo(CodeGen::CodeGenTypes &CGT) - : TargetCodeGenInfo(std::make_unique(CGT)) {} + : TargetCodeGenInfo(std::make_unique(CGT)) {} unsigned getOpenCLKernelCallingConv() const override; }; } // End anonymous namespace. +void SPIRABIInfo::setCCs() { + assert(getRuntimeCC() == llvm::CallingConv::C); + RuntimeCC = llvm::CallingConv::SPIR_FUNC; +} namespace clang { namespace CodeGen { diff --git a/clang/test/CodeGenOpenCLCXX/atexit.cl b/clang/test/CodeGenOpenCLCXX/atexit.cl --- a/clang/test/CodeGenOpenCLCXX/atexit.cl +++ b/clang/test/CodeGenOpenCLCXX/atexit.cl @@ -5,7 +5,7 @@ }; S s; -//CHECK-LABEL: define internal void @__cxx_global_var_init() -//CHECK: call i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.S addrspace(4)*)* @_ZNU3AS41SD1Ev to void (i8*)*), i8* null, i8 addrspace(1)* @__dso_handle) +//CHECK-LABEL: define internal spir_func void @__cxx_global_var_init() +//CHECK: call spir_func i32 @__cxa_atexit(void (i8*)* bitcast (void (%struct.S addrspace(4)*)* @_ZNU3AS41SD1Ev to void (i8*)*), i8* null, i8 addrspace(1)* @__dso_handle) -//CHECK: declare i32 @__cxa_atexit(void (i8*)*, i8*, i8 addrspace(1)*) +//CHECK: declare spir_func i32 @__cxa_atexit(void (i8*)*, i8*, i8 addrspace(1)*)