1 /*========================== begin_copyright_notice ============================ 2 3 Copyright (C) 2017-2021 Intel Corporation 4 5 SPDX-License-Identifier: MIT 6 7 ============================= end_copyright_notice ===========================*/ 8 9 #pragma once 10 11 #include "AdaptorCommon/ImplicitArgs.hpp" 12 #include "Compiler/MetaDataUtilsWrapper.h" 13 14 #include "common/LLVMWarningsPush.hpp" 15 #include <llvm/Pass.h> 16 #include <llvm/IR/InstVisitor.h> 17 #include "common/LLVMWarningsPop.hpp" 18 19 namespace IGC 20 { 21 22 class DeviceEnqueueFuncsAnalysis : public llvm::ModulePass, public llvm::InstVisitor<DeviceEnqueueFuncsAnalysis> 23 { 24 public: 25 static char ID; 26 27 DeviceEnqueueFuncsAnalysis(); 28 ~DeviceEnqueueFuncsAnalysis()29 ~DeviceEnqueueFuncsAnalysis() {} 30 getPassName() const31 virtual llvm::StringRef getPassName() const override 32 { 33 return "DeviceEnqueueFuncsAnalysis"; 34 } 35 getAnalysisUsage(llvm::AnalysisUsage & AU) const36 virtual void getAnalysisUsage(llvm::AnalysisUsage& AU) const override 37 { 38 AU.setPreservesCFG(); 39 AU.addRequired<MetaDataUtilsWrapper>(); 40 AU.addRequired<CodeGenContextWrapper>(); 41 } 42 43 44 virtual bool runOnModule(llvm::Module& M) override; 45 46 47 bool runOnFunction(llvm::Function& F); 48 49 50 virtual void visitCallInst(llvm::CallInst& CI); 51 52 53 private: 54 bool m_hasDeviceEnqueue; 55 llvm::SmallVector< ImplicitArg::ArgType, ImplicitArg::NUM_IMPLICIT_ARGS > m_newImplicitArgs; 56 ImplicitArg::ArgMap m_newNumberedImplicitArgs; 57 IGCMD::MetaDataUtils* m_pMDUtils; 58 }; 59 60 61 62 63 class DeviceEnqueueFuncsResolution : public llvm::FunctionPass, public llvm::InstVisitor<DeviceEnqueueFuncsResolution> 64 { 65 public: 66 static char ID; 67 68 DeviceEnqueueFuncsResolution(); 69 ~DeviceEnqueueFuncsResolution()70 ~DeviceEnqueueFuncsResolution() {} 71 getPassName() const72 virtual llvm::StringRef getPassName() const override 73 { 74 return "DeviceEnqueueFuncsResolution"; 75 } 76 getAnalysisUsage(llvm::AnalysisUsage & AU) const77 virtual void getAnalysisUsage(llvm::AnalysisUsage& AU) const override 78 { 79 AU.setPreservesCFG(); 80 AU.addRequired<MetaDataUtilsWrapper>(); 81 AU.addRequired<CodeGenContextWrapper>(); 82 } 83 84 virtual bool runOnFunction(llvm::Function& F) override; 85 86 virtual void visitCallInst(llvm::CallInst& CI); 87 88 private: 89 bool m_Changed; 90 ImplicitArgs m_implicitArgs; 91 }; 92 93 } 94 95