1*9880d681SAndroid Build Coastguard Worker //===-- DiffLog.h - Difference Log Builder and accessories ------*- C++ -*-===// 2*9880d681SAndroid Build Coastguard Worker // 3*9880d681SAndroid Build Coastguard Worker // The LLVM Compiler Infrastructure 4*9880d681SAndroid Build Coastguard Worker // 5*9880d681SAndroid Build Coastguard Worker // This file is distributed under the University of Illinois Open Source 6*9880d681SAndroid Build Coastguard Worker // License. See LICENSE.TXT for details. 7*9880d681SAndroid Build Coastguard Worker // 8*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 9*9880d681SAndroid Build Coastguard Worker // 10*9880d681SAndroid Build Coastguard Worker // This header defines the interface to the LLVM difference log builder. 11*9880d681SAndroid Build Coastguard Worker // 12*9880d681SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===// 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Worker #include "DiffLog.h" 15*9880d681SAndroid Build Coastguard Worker #include "DiffConsumer.h" 16*9880d681SAndroid Build Coastguard Worker #include "llvm/ADT/StringRef.h" 17*9880d681SAndroid Build Coastguard Worker #include "llvm/IR/Instructions.h" 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Worker using namespace llvm; 20*9880d681SAndroid Build Coastguard Worker ~LogBuilder()21*9880d681SAndroid Build Coastguard WorkerLogBuilder::~LogBuilder() { 22*9880d681SAndroid Build Coastguard Worker if (consumer) 23*9880d681SAndroid Build Coastguard Worker consumer->logf(*this); 24*9880d681SAndroid Build Coastguard Worker } 25*9880d681SAndroid Build Coastguard Worker getFormat() const26*9880d681SAndroid Build Coastguard WorkerStringRef LogBuilder::getFormat() const { return Format; } 27*9880d681SAndroid Build Coastguard Worker getNumArguments() const28*9880d681SAndroid Build Coastguard Workerunsigned LogBuilder::getNumArguments() const { return Arguments.size(); } getArgument(unsigned I) const29*9880d681SAndroid Build Coastguard WorkerValue *LogBuilder::getArgument(unsigned I) const { return Arguments[I]; } 30*9880d681SAndroid Build Coastguard Worker ~DiffLogBuilder()31*9880d681SAndroid Build Coastguard WorkerDiffLogBuilder::~DiffLogBuilder() { consumer.logd(*this); } 32*9880d681SAndroid Build Coastguard Worker addMatch(Instruction * L,Instruction * R)33*9880d681SAndroid Build Coastguard Workervoid DiffLogBuilder::addMatch(Instruction *L, Instruction *R) { 34*9880d681SAndroid Build Coastguard Worker Diff.push_back(DiffRecord(L, R)); 35*9880d681SAndroid Build Coastguard Worker } addLeft(Instruction * L)36*9880d681SAndroid Build Coastguard Workervoid DiffLogBuilder::addLeft(Instruction *L) { 37*9880d681SAndroid Build Coastguard Worker // HACK: VS 2010 has a bug in the stdlib that requires this. 38*9880d681SAndroid Build Coastguard Worker Diff.push_back(DiffRecord(L, DiffRecord::second_type(nullptr))); 39*9880d681SAndroid Build Coastguard Worker } addRight(Instruction * R)40*9880d681SAndroid Build Coastguard Workervoid DiffLogBuilder::addRight(Instruction *R) { 41*9880d681SAndroid Build Coastguard Worker // HACK: VS 2010 has a bug in the stdlib that requires this. 42*9880d681SAndroid Build Coastguard Worker Diff.push_back(DiffRecord(DiffRecord::first_type(nullptr), R)); 43*9880d681SAndroid Build Coastguard Worker } 44*9880d681SAndroid Build Coastguard Worker getNumLines() const45*9880d681SAndroid Build Coastguard Workerunsigned DiffLogBuilder::getNumLines() const { return Diff.size(); } 46*9880d681SAndroid Build Coastguard Worker getLineKind(unsigned I) const47*9880d681SAndroid Build Coastguard WorkerDiffChange DiffLogBuilder::getLineKind(unsigned I) const { 48*9880d681SAndroid Build Coastguard Worker return (Diff[I].first ? (Diff[I].second ? DC_match : DC_left) 49*9880d681SAndroid Build Coastguard Worker : DC_right); 50*9880d681SAndroid Build Coastguard Worker } getLeft(unsigned I) const51*9880d681SAndroid Build Coastguard WorkerInstruction *DiffLogBuilder::getLeft(unsigned I) const { return Diff[I].first; } getRight(unsigned I) const52*9880d681SAndroid Build Coastguard WorkerInstruction *DiffLogBuilder::getRight(unsigned I) const { return Diff[I].second; } 53