[coro] Make Spill a proper struct instead of deriving from pair.

No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@317027 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Benjamin Kramer 2017-10-31 19:22:55 +00:00
parent d619fda3f4
commit aeaa65aec3

View File

@ -261,21 +261,19 @@ SuspendCrossingInfo::SuspendCrossingInfo(Function &F, coro::Shape &Shape)
// We build up the list of spills for every case where a use is separated
// from the definition by a suspend point.
struct Spill : std::pair<Value *, Instruction *> {
using base = std::pair<Value *, Instruction *>;
namespace {
class Spill {
Value *Def;
Instruction *User;
Spill(Value *Def, User *U) : base(Def, cast<Instruction>(U)) {}
public:
Spill(Value *Def, llvm::User *U) : Def(Def), User(cast<Instruction>(U)) {}
Value *def() const { return first; }
Instruction *user() const { return second; }
BasicBlock *userBlock() const { return second->getParent(); }
std::pair<Value *, BasicBlock *> getKey() const {
return {def(), userBlock()};
}
bool operator<(Spill const &rhs) const { return getKey() < rhs.getKey(); }
Value *def() const { return Def; }
Instruction *user() const { return User; }
BasicBlock *userBlock() const { return User->getParent(); }
};
} // namespace
// Note that there may be more than one record with the same value of Def in
// the SpillInfo vector.