16b943ff3SDimitry Andric //===-- DiffLog.h - Difference Log Builder and accessories ------*- C++ -*-===// 26b943ff3SDimitry Andric // 3e6d15924SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4e6d15924SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 5e6d15924SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 66b943ff3SDimitry Andric // 76b943ff3SDimitry Andric //===----------------------------------------------------------------------===// 86b943ff3SDimitry Andric // 96b943ff3SDimitry Andric // This header defines the interface to the LLVM difference log builder. 106b943ff3SDimitry Andric // 116b943ff3SDimitry Andric //===----------------------------------------------------------------------===// 126b943ff3SDimitry Andric 136b943ff3SDimitry Andric #include "DiffLog.h" 146b943ff3SDimitry Andric #include "DiffConsumer.h" 156b943ff3SDimitry Andric #include "llvm/ADT/StringRef.h" 166b943ff3SDimitry Andric 176b943ff3SDimitry Andric using namespace llvm; 186b943ff3SDimitry Andric ~LogBuilder()196b943ff3SDimitry AndricLogBuilder::~LogBuilder() { 20dd58ef01SDimitry Andric if (consumer) 21dd58ef01SDimitry Andric consumer->logf(*this); 226b943ff3SDimitry Andric } 236b943ff3SDimitry Andric getFormat() const246b943ff3SDimitry AndricStringRef LogBuilder::getFormat() const { return Format; } 256b943ff3SDimitry Andric getNumArguments() const266b943ff3SDimitry Andricunsigned LogBuilder::getNumArguments() const { return Arguments.size(); } getArgument(unsigned I) const27344a3780SDimitry Andricconst Value *LogBuilder::getArgument(unsigned I) const { return Arguments[I]; } 286b943ff3SDimitry Andric ~DiffLogBuilder()296b943ff3SDimitry AndricDiffLogBuilder::~DiffLogBuilder() { consumer.logd(*this); } 306b943ff3SDimitry Andric addMatch(const Instruction * L,const Instruction * R)31344a3780SDimitry Andricvoid DiffLogBuilder::addMatch(const Instruction *L, const Instruction *R) { 326b943ff3SDimitry Andric Diff.push_back(DiffRecord(L, R)); 336b943ff3SDimitry Andric } addLeft(const Instruction * L)34344a3780SDimitry Andricvoid DiffLogBuilder::addLeft(const Instruction *L) { 356b943ff3SDimitry Andric // HACK: VS 2010 has a bug in the stdlib that requires this. 365ca98fd9SDimitry Andric Diff.push_back(DiffRecord(L, DiffRecord::second_type(nullptr))); 376b943ff3SDimitry Andric } addRight(const Instruction * R)38344a3780SDimitry Andricvoid DiffLogBuilder::addRight(const Instruction *R) { 396b943ff3SDimitry Andric // HACK: VS 2010 has a bug in the stdlib that requires this. 405ca98fd9SDimitry Andric Diff.push_back(DiffRecord(DiffRecord::first_type(nullptr), R)); 416b943ff3SDimitry Andric } 426b943ff3SDimitry Andric getNumLines() const436b943ff3SDimitry Andricunsigned DiffLogBuilder::getNumLines() const { return Diff.size(); } 446b943ff3SDimitry Andric getLineKind(unsigned I) const456b943ff3SDimitry AndricDiffChange DiffLogBuilder::getLineKind(unsigned I) const { 466b943ff3SDimitry Andric return (Diff[I].first ? (Diff[I].second ? DC_match : DC_left) 476b943ff3SDimitry Andric : DC_right); 486b943ff3SDimitry Andric } getLeft(unsigned I) const49344a3780SDimitry Andricconst Instruction *DiffLogBuilder::getLeft(unsigned I) const { 50344a3780SDimitry Andric return Diff[I].first; 51344a3780SDimitry Andric } getRight(unsigned I) const52344a3780SDimitry Andricconst Instruction *DiffLogBuilder::getRight(unsigned I) const { 53344a3780SDimitry Andric return Diff[I].second; 54344a3780SDimitry Andric } 55