1*81ad6265SDimitry Andric //===- SPIRVLegalizerInfo.h --- SPIR-V Legalization Rules --------*- C++ -*-==// 2*81ad6265SDimitry Andric // 3*81ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4*81ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5*81ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6*81ad6265SDimitry Andric // 7*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 8*81ad6265SDimitry Andric // 9*81ad6265SDimitry Andric // This file declares the targeting of the MachineLegalizer class for SPIR-V. 10*81ad6265SDimitry Andric // 11*81ad6265SDimitry Andric //===----------------------------------------------------------------------===// 12*81ad6265SDimitry Andric 13*81ad6265SDimitry Andric #ifndef LLVM_LIB_TARGET_SPIRV_SPIRVMACHINELEGALIZER_H 14*81ad6265SDimitry Andric #define LLVM_LIB_TARGET_SPIRV_SPIRVMACHINELEGALIZER_H 15*81ad6265SDimitry Andric 16*81ad6265SDimitry Andric #include "SPIRVGlobalRegistry.h" 17*81ad6265SDimitry Andric #include "llvm/CodeGen/GlobalISel/LegalizerInfo.h" 18*81ad6265SDimitry Andric 19*81ad6265SDimitry Andric bool isTypeFoldingSupported(unsigned Opcode); 20*81ad6265SDimitry Andric 21*81ad6265SDimitry Andric namespace llvm { 22*81ad6265SDimitry Andric 23*81ad6265SDimitry Andric class LLVMContext; 24*81ad6265SDimitry Andric class SPIRVSubtarget; 25*81ad6265SDimitry Andric 26*81ad6265SDimitry Andric // This class provides the information for legalizing SPIR-V instructions. 27*81ad6265SDimitry Andric class SPIRVLegalizerInfo : public LegalizerInfo { 28*81ad6265SDimitry Andric const SPIRVSubtarget *ST; 29*81ad6265SDimitry Andric SPIRVGlobalRegistry *GR; 30*81ad6265SDimitry Andric 31*81ad6265SDimitry Andric public: 32*81ad6265SDimitry Andric bool legalizeCustom(LegalizerHelper &Helper, MachineInstr &MI) const override; 33*81ad6265SDimitry Andric SPIRVLegalizerInfo(const SPIRVSubtarget &ST); 34*81ad6265SDimitry Andric }; 35*81ad6265SDimitry Andric } // namespace llvm 36*81ad6265SDimitry Andric #endif // LLVM_LIB_TARGET_SPIRV_SPIRVMACHINELEGALIZER_H 37