
LLVMType is both too broad and too narrow for defining DXIL operations, in different ways. It's too broad in the sense that we don't need the full set of MVTs - the set of types DXIL operations work on is much smaller. It's too narrow in the sense that it's difficult to use it for the various fixed structure types in DXIL, like `%dx.types.Handle` or `%dx.Types.ResRet.f32`. Replace the usage of LLVMType in DXIL.td with DXILOpParamType, a simple class that we can define an enum of types from. Further, use this to replace the "ParameterKind" enum in DXILABI.h that has nothing to do with DXIL's ABI. Pull Request: https://github.com/llvm/llvm-project/pull/104247
37 lines
1005 B
C++
37 lines
1005 B
C++
//===- DXILConstants.h - Essential DXIL constants -------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
///
|
|
/// \file This file contains essential DXIL constants.
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef LLVM_LIB_TARGET_DIRECTX_DXILCONSTANTS_H
|
|
#define LLVM_LIB_TARGET_DIRECTX_DXILCONSTANTS_H
|
|
|
|
namespace llvm {
|
|
namespace dxil {
|
|
|
|
enum class OpCode : unsigned {
|
|
#define DXIL_OPCODE(Op, Name) Name = Op,
|
|
#include "DXILOperation.inc"
|
|
};
|
|
|
|
enum class OpCodeClass : unsigned {
|
|
#define DXIL_OPCLASS(Name) Name,
|
|
#include "DXILOperation.inc"
|
|
};
|
|
|
|
enum class OpParamType : unsigned {
|
|
#define DXIL_OP_PARAM_TYPE(Name) Name,
|
|
#include "DXILOperation.inc"
|
|
};
|
|
|
|
} // namespace dxil
|
|
} // namespace llvm
|
|
|
|
#endif
|