1 /*========================== begin_copyright_notice ============================
2 
3 Copyright (C) 2021 Intel Corporation
4 
5 SPDX-License-Identifier: MIT
6 
7 ============================= end_copyright_notice ===========================*/
8 
9 #include "vc/Utils/General/FunctionAttrs.h"
10 
11 #include "Probe/Assertion.h"
12 
transferDISubprogram(llvm::Function & From,llvm::Function & To)13 void vc::transferDISubprogram(llvm::Function &From, llvm::Function &To) {
14   auto *DISp = From.getSubprogram();
15   To.setSubprogram(DISp);
16   // DISubprogram must be unique to the module.
17   // We preserve IR correctness by detaching DISubprogram node from the original
18   // function
19   From.setSubprogram(nullptr);
20 }
21 
transferNameAndCCWithNewAttr(const llvm::AttributeList Attrs,llvm::Function & From,llvm::Function & To)22 void vc::transferNameAndCCWithNewAttr(const llvm::AttributeList Attrs,
23                                       llvm::Function &From,
24                                       llvm::Function &To) {
25   To.takeName(&From);
26   To.setCallingConv(From.getCallingConv());
27   To.setAttributes(Attrs);
28 }
29 
isFixedSignatureFunc(const llvm::Function & F)30 bool vc::isFixedSignatureFunc(const llvm::Function &F) {
31   if (F.getCallingConv() == llvm::CallingConv::SPIR_KERNEL)
32     return false;
33   return !F.hasLocalLinkage() || F.hasAddressTaken();
34 }
35