Viewing file: InlineAsmLowering.h (2.34 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
//===- llvm/CodeGen/GlobalISel/InlineAsmLowering.h --------------*- C++ -*-===// // // 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 describes how to lower LLVM inline asm to machine code INLINEASM. /// //===----------------------------------------------------------------------===//
#ifndef LLVM_CODEGEN_GLOBALISEL_INLINEASMLOWERING_H #define LLVM_CODEGEN_GLOBALISEL_INLINEASMLOWERING_H
#include "llvm/ADT/ArrayRef.h" #include <functional>
namespace llvm { class CallBase; class MachineIRBuilder; class MachineOperand; class Register; class TargetLowering; class Value;
class InlineAsmLowering { const TargetLowering *TLI;
virtual void anchor();
public: /// Lower the given inline asm call instruction /// \p GetOrCreateVRegs is a callback to materialize a register for the /// input and output operands of the inline asm /// \return True if the lowering succeeds, false otherwise. bool lowerInlineAsm(MachineIRBuilder &MIRBuilder, const CallBase &CB, std::function<ArrayRef<Register>(const Value &Val)> GetOrCreateVRegs) const;
/// Lower the specified operand into the Ops vector. /// \p Val is the IR input value to be lowered /// \p Constraint is the user supplied constraint string /// \p Ops is the vector to be filled with the lowered operands /// \return True if the lowering succeeds, false otherwise. virtual bool lowerAsmOperandForConstraint(Value *Val, StringRef Constraint, std::vector<MachineOperand> &Ops, MachineIRBuilder &MIRBuilder) const;
protected: /// Getter for generic TargetLowering class. const TargetLowering *getTLI() const { return TLI; }
/// Getter for target specific TargetLowering class. template <class XXXTargetLowering> const XXXTargetLowering *getTLI() const { return static_cast<const XXXTargetLowering *>(TLI); }
public: InlineAsmLowering(const TargetLowering *TLI) : TLI(TLI) {} virtual ~InlineAsmLowering() = default; };
} // end namespace llvm
#endif // LLVM_CODEGEN_GLOBALISEL_INLINEASMLOWERING_H
|