1 //===-- llvm/Target/AMDGPU/AMDGPUMIRFormatter.h -----------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 6 // See https://llvm.org/LICENSE.txt for license information. 7 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 8 // 9 //===----------------------------------------------------------------------===// 10 // 11 /// \file 12 /// AMDGPU specific overrides of MIRFormatter. 13 // 14 //===----------------------------------------------------------------------===// 15 16 #ifndef LLVM_LIB_TARGET_AMDGPUMIRFORMATTER_H 17 #define LLVM_LIB_TARGET_AMDGPUMIRFORMATTER_H 18 19 #include "llvm/CodeGen/MIRFormatter.h" 20 21 namespace llvm { 22 23 class MachineFunction; 24 struct PerFunctionMIParsingState; 25 26 class AMDGPUMIRFormatter final : public MIRFormatter { 27 public: 28 AMDGPUMIRFormatter() = default; 29 virtual ~AMDGPUMIRFormatter() = default; 30 31 /// Implement target specific printing for machine operand immediate value, so 32 /// that we can have more meaningful mnemonic than a 64-bit integer. Passing 33 /// None to OpIdx means the index is unknown. 34 virtual void printImm(raw_ostream &OS, const MachineInstr &MI, 35 std::optional<unsigned> OpIdx, 36 int64_t Imm) const override; 37 38 /// Implement target specific parsing of immediate mnemonics. The mnemonic is 39 /// a string with a leading dot. 40 virtual bool parseImmMnemonic(const unsigned OpCode, const unsigned OpIdx, 41 StringRef Src, int64_t &Imm, 42 ErrorCallbackType ErrorCallback) const override; 43 44 /// Implement target specific parsing of target custom pseudo source value. 45 bool 46 parseCustomPseudoSourceValue(StringRef Src, MachineFunction &MF, 47 PerFunctionMIParsingState &PFS, 48 const PseudoSourceValue *&PSV, 49 ErrorCallbackType ErrorCallback) const override; 50 51 private: 52 /// Print the string to represent s_delay_alu immediate value 53 void printSDelayAluImm(int64_t Imm, llvm::raw_ostream &OS) const; 54 55 /// Parse the immediate pseudo literal for s_delay_alu 56 bool parseSDelayAluImmMnemonic( 57 const unsigned int OpIdx, int64_t &Imm, llvm::StringRef &Src, 58 llvm::MIRFormatter::ErrorCallbackType &ErrorCallback) const; 59 60 }; 61 62 } // end namespace llvm 63 64 #endif 65