1972a253aSDimitry Andric //===- DXILOpBuilder.h - Helper class for build DIXLOp functions ----------===// 2972a253aSDimitry Andric // 3972a253aSDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4972a253aSDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5972a253aSDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6972a253aSDimitry Andric // 7972a253aSDimitry Andric //===----------------------------------------------------------------------===// 8972a253aSDimitry Andric /// 9972a253aSDimitry Andric /// \file This file contains class to help build DXIL op functions. 10972a253aSDimitry Andric //===----------------------------------------------------------------------===// 11972a253aSDimitry Andric 12972a253aSDimitry Andric #ifndef LLVM_LIB_TARGET_DIRECTX_DXILOPBUILDER_H 13972a253aSDimitry Andric #define LLVM_LIB_TARGET_DIRECTX_DXILOPBUILDER_H 14972a253aSDimitry Andric 15972a253aSDimitry Andric #include "DXILConstants.h" 16972a253aSDimitry Andric #include "llvm/ADT/iterator_range.h" 17972a253aSDimitry Andric 18972a253aSDimitry Andric namespace llvm { 19972a253aSDimitry Andric class Module; 20972a253aSDimitry Andric class IRBuilderBase; 21972a253aSDimitry Andric class CallInst; 22972a253aSDimitry Andric class Value; 23972a253aSDimitry Andric class Type; 24972a253aSDimitry Andric class FunctionType; 25972a253aSDimitry Andric class Use; 26972a253aSDimitry Andric 27*bdd1243dSDimitry Andric namespace dxil { 28972a253aSDimitry Andric 29972a253aSDimitry Andric class DXILOpBuilder { 30972a253aSDimitry Andric public: 31972a253aSDimitry Andric DXILOpBuilder(Module &M, IRBuilderBase &B) : M(M), B(B) {} 32*bdd1243dSDimitry Andric CallInst *createDXILOpCall(dxil::OpCode OpCode, Type *OverloadTy, 33972a253aSDimitry Andric llvm::iterator_range<Use *> Args); 34*bdd1243dSDimitry Andric Type *getOverloadTy(dxil::OpCode OpCode, FunctionType *FT, 35972a253aSDimitry Andric bool NoOpCodeParam); 36*bdd1243dSDimitry Andric static const char *getOpCodeName(dxil::OpCode DXILOp); 37972a253aSDimitry Andric 38972a253aSDimitry Andric private: 39972a253aSDimitry Andric Module &M; 40972a253aSDimitry Andric IRBuilderBase &B; 41972a253aSDimitry Andric }; 42972a253aSDimitry Andric 43*bdd1243dSDimitry Andric } // namespace dxil 44972a253aSDimitry Andric } // namespace llvm 45972a253aSDimitry Andric 46972a253aSDimitry Andric #endif 47