Mercurial > hg > CbC > CbC_llvm
view tools/llvm-diff/DiffLog.h @ 23:7694d90773c7
if a code segment is a variadic function , llvm/clang doesn't do TCE. ( avoid a error )
author | Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 04 Nov 2013 23:30:18 +0900 |
parents | 9ad51c7bc036 |
children | 54457678186b |
line wrap: on
line source
//===-- DiffLog.h - Difference Log Builder and accessories ------*- C++ -*-===// // // The LLVM Compiler Infrastructure // // This file is distributed under the University of Illinois Open Source // License. See LICENSE.TXT for details. // //===----------------------------------------------------------------------===// // // This header defines the interface to the LLVM difference log builder. // //===----------------------------------------------------------------------===// #ifndef _LLVM_DIFFLOG_H_ #define _LLVM_DIFFLOG_H_ #include "llvm/ADT/SmallVector.h" #include "llvm/ADT/StringRef.h" namespace llvm { class Instruction; class Value; class Consumer; /// Trichotomy assumption enum DiffChange { DC_match, DC_left, DC_right }; /// A temporary-object class for building up log messages. class LogBuilder { Consumer &consumer; /// The use of a stored StringRef here is okay because /// LogBuilder should be used only as a temporary, and as a /// temporary it will be destructed before whatever temporary /// might be initializing this format. StringRef Format; SmallVector<Value*, 4> Arguments; public: LogBuilder(Consumer &c, StringRef Format) : consumer(c), Format(Format) {} LogBuilder &operator<<(Value *V) { Arguments.push_back(V); return *this; } ~LogBuilder(); StringRef getFormat() const; unsigned getNumArguments() const; Value *getArgument(unsigned I) const; }; /// A temporary-object class for building up diff messages. class DiffLogBuilder { typedef std::pair<Instruction*,Instruction*> DiffRecord; SmallVector<DiffRecord, 20> Diff; Consumer &consumer; public: DiffLogBuilder(Consumer &c) : consumer(c) {} ~DiffLogBuilder(); void addMatch(Instruction *L, Instruction *R); // HACK: VS 2010 has a bug in the stdlib that requires this. void addLeft(Instruction *L); void addRight(Instruction *R); unsigned getNumLines() const; DiffChange getLineKind(unsigned I) const; Instruction *getLeft(unsigned I) const; Instruction *getRight(unsigned I) const; }; } #endif