You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
61 lines
2.4 KiB
61 lines
2.4 KiB
4 months ago
|
//===- GIMatchDagPredicateDependencyEdge - Ensure predicates have inputs --===//
|
||
|
//
|
||
|
// 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
|
||
|
//
|
||
|
//===----------------------------------------------------------------------===//
|
||
|
|
||
|
#ifndef LLVM_UTILS_TABLEGEN_GIMATCHDAGPREDICATEEDGE_H
|
||
|
#define LLVM_UTILS_TABLEGEN_GIMATCHDAGPREDICATEEDGE_H
|
||
|
|
||
|
#include "GIMatchDagOperands.h"
|
||
|
|
||
|
namespace llvm {
|
||
|
class GIMatchDag;
|
||
|
class GIMatchDagInstr;
|
||
|
class GIMatchDagEdge;
|
||
|
class GIMatchDagPredicate;
|
||
|
|
||
|
/// Represents a dependency that must be met to evaluate a predicate.
|
||
|
///
|
||
|
/// Instances of this class objects are owned by the GIMatchDag and are not
|
||
|
/// shareable between instances of GIMatchDag.
|
||
|
class GIMatchDagPredicateDependencyEdge {
|
||
|
/// The MI that must be available in order to test the predicate.
|
||
|
const GIMatchDagInstr *RequiredMI;
|
||
|
/// The MO that must be available in order to test the predicate. May be
|
||
|
/// nullptr when only the MI is required.
|
||
|
const GIMatchDagOperand *RequiredMO;
|
||
|
/// The Predicate that requires information from RequiredMI/RequiredMO.
|
||
|
const GIMatchDagPredicate *Predicate;
|
||
|
/// The Predicate operand that requires information from
|
||
|
/// RequiredMI/RequiredMO.
|
||
|
const GIMatchDagOperand *PredicateOp;
|
||
|
|
||
|
public:
|
||
|
GIMatchDagPredicateDependencyEdge(const GIMatchDagInstr *RequiredMI,
|
||
|
const GIMatchDagOperand *RequiredMO,
|
||
|
const GIMatchDagPredicate *Predicate,
|
||
|
const GIMatchDagOperand *PredicateOp)
|
||
|
: RequiredMI(RequiredMI), RequiredMO(RequiredMO), Predicate(Predicate),
|
||
|
PredicateOp(PredicateOp) {}
|
||
|
|
||
|
const GIMatchDagInstr *getRequiredMI() const { return RequiredMI; }
|
||
|
const GIMatchDagOperand *getRequiredMO() const { return RequiredMO; }
|
||
|
const GIMatchDagPredicate *getPredicate() const { return Predicate; }
|
||
|
const GIMatchDagOperand *getPredicateOp() const { return PredicateOp; }
|
||
|
|
||
|
void print(raw_ostream &OS) const;
|
||
|
|
||
|
#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
|
||
|
LLVM_DUMP_METHOD void dump() const;
|
||
|
#endif // if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
|
||
|
};
|
||
|
|
||
|
raw_ostream &operator<<(raw_ostream &OS,
|
||
|
const GIMatchDagPredicateDependencyEdge &N);
|
||
|
|
||
|
} // end namespace llvm
|
||
|
#endif // ifndef LLVM_UTILS_TABLEGEN_GIMATCHDAGPREDICATEEDGE_H
|