| Current Path : /usr/include/llvm/SandboxIR/ |
| Current File : //usr/include/llvm/SandboxIR/Use.h |
//===- Use.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
//
//===----------------------------------------------------------------------===//
//
// Sandbox IR Use.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_SANDBOXIR_USE_H
#define LLVM_SANDBOXIR_USE_H
#include "llvm/IR/Use.h"
#include "llvm/Support/raw_ostream.h"
namespace llvm::sandboxir {
class Context;
class Value;
class User;
/// Represents a Def-use/Use-def edge in SandboxIR.
/// NOTE: Unlike llvm::Use, this is not an integral part of the use-def chains.
/// It is also not uniqued and is currently passed by value, so you can have
/// more than one sandboxir::Use objects for the same use-def edge.
class Use {
llvm::Use *LLVMUse;
User *Usr;
Context *Ctx;
/// Don't allow the user to create a sandboxir::Use directly.
Use(llvm::Use *LLVMUse, User *Usr, Context &Ctx)
: LLVMUse(LLVMUse), Usr(Usr), Ctx(&Ctx) {}
Use() : LLVMUse(nullptr), Ctx(nullptr) {}
friend class Value; // For constructor
friend class User; // For constructor
friend class OperandUseIterator; // For constructor
friend class UserUseIterator; // For accessing members
public:
operator Value *() const { return get(); }
Value *get() const;
void set(Value *V);
class User *getUser() const { return Usr; }
unsigned getOperandNo() const;
Context *getContext() const { return Ctx; }
bool operator==(const Use &Other) const {
assert(Ctx == Other.Ctx && "Contexts differ!");
return LLVMUse == Other.LLVMUse && Usr == Other.Usr;
}
bool operator!=(const Use &Other) const { return !(*this == Other); }
#ifndef NDEBUG
void dump(raw_ostream &OS) const;
void dump() const;
#endif // NDEBUG
};
} // namespace llvm::sandboxir
#endif // LLVM_SANDBOXIR_USE_H