xref: /freebsd-src/contrib/llvm-project/llvm/lib/Target/DirectX/DXILOpBuilder.h (revision bdd1243df58e60e85101c09001d9812a789b6bc4)
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