Chromium Code Reviews| Index: src/IceInstrumentation.h |
| diff --git a/src/IceInstrumentation.h b/src/IceInstrumentation.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..57aa5edb3ad4238527adf5926471169434043121 |
| --- /dev/null |
| +++ b/src/IceInstrumentation.h |
| @@ -0,0 +1,90 @@ |
| +//===- subzero/src/IceInstrumentation.h - ICE instrumentation ---*- C++ -*-===// |
| +// |
| +// The Subzero Code Generator |
| +// |
| +// This file is distributed under the University of Illinois Open Source |
| +// License. See LICENSE.TXT for details. |
| +// |
| +//===----------------------------------------------------------------------===// |
| +/// |
| +/// \file |
| +/// \brief Declares the Ice::Instrumentation class. |
| +/// |
| +/// Instrumentation is an abstract class used to drive the instrumentation |
| +/// process for tools such as AddressSanitizer and MemorySanitizer. It uses a |
| +/// LoweringContext to enable the insertion of new instructions into a given |
| +/// Cfg. Although Instrumentation is an abstract class, each of its virtual |
| +/// functions is has a trivial default implementation to make subclasses more |
|
Roland McGrath
2016/06/06 22:28:45
s/is has/has/
tlively
2016/06/07 00:43:06
Done.
|
| +/// succinct. |
| +/// |
| +//===----------------------------------------------------------------------===// |
| + |
| +#pragma clang diagnostic ignored "-Wunused-parameter" |
|
Karl
2016/06/06 22:27:03
Don't change command line flags within a file, esp
Roland McGrath
2016/06/06 22:28:45
Why is this outside the include guard?
And do you
tlively
2016/06/07 00:43:06
This fix makes the code much larger and uglier. Wh
Karl
2016/06/07 14:42:40
Please do NOT add code that changes command line a
|
| + |
| + |
| +#ifndef SUBZERO_SRC_ICEASANLOWERING_H |
|
Karl
2016/06/06 22:27:03
The coding convention is that the define name shou
tlively
2016/06/07 00:43:06
Done.
|
| +#define SUBZERO_SRC_ICEASANLOWERING_H |
| + |
| +#include "IceDefs.h" |
| + |
| +namespace Ice { |
| + |
| +class LoweringContext; |
| + |
| +class Instrumentation { |
| + Instrumentation() = delete; |
| + Instrumentation(const Instrumentation &) = delete; |
| + Instrumentation &operator=(const Instrumentation &) = delete; |
| + |
| +protected: |
|
Karl
2016/06/06 22:27:03
Generally, we don't like introducing fields before
tlively
2016/06/07 00:43:06
Done.
|
| + GlobalContext *Ctx; |
| + |
| +public: |
| + Instrumentation(GlobalContext *Ctx) : Ctx(Ctx) {} |
| + |
| + virtual void instrumentGlobals() {}; |
| + void instrumentFunc(Cfg *Func); |
| + |
| +private: |
| + void instrumentInst(LoweringContext &Context); |
| + virtual void instrumentFuncStart(LoweringContext &Context) {}; |
| + virtual void instrumentAlloca(LoweringContext &Context, |
| + const class InstAlloca *Instr) {}; |
| + virtual void instrumentArithmetic(LoweringContext &Context, |
| + const class InstArithmetic *Instr) {}; |
| + virtual void instrumentBr(LoweringContext &Context, |
| + const class InstBr *Instr) {}; |
| + virtual void instrumentCall(LoweringContext &Context, |
| + const class InstCall *Instr) {}; |
| + virtual void instrumentCast(LoweringContext &Context, |
| + const class InstCast *Instr) {}; |
| + virtual void instrumentExtractElement(LoweringContext &Context, |
| + const class InstExtractElement *Instr) {}; |
| + virtual void instrumentFcmp(LoweringContext &Context, |
| + const class InstFcmp *Instr) {}; |
| + virtual void instrumentIcmp(LoweringContext &Context, |
| + const class InstIcmp *Instr) {}; |
| + virtual void instrumentInsertElement(LoweringContext &Context, |
| + const class InstInsertElement *Instr) {}; |
| + virtual void instrumentIntrinsicCall(LoweringContext &Context, |
| + const class InstIntrinsicCall *Instr) {}; |
| + virtual void instrumentLoad(LoweringContext &Context, |
| + const class InstLoad *Instr) {}; |
| + virtual void instrumentPhi(LoweringContext &Context, |
| + const class InstPhi *Instr) {}; |
| + virtual void instrumentRet(LoweringContext &Context, |
| + const class InstRet *Instr) {}; |
| + virtual void instrumentSelect(LoweringContext &Context, |
| + const class InstSelect *Instr) {}; |
| + virtual void instrumentStore(LoweringContext &Context, |
| + const class InstStore *Instr) {}; |
| + virtual void instrumentSwitch(LoweringContext &Context, |
| + const class InstSwitch *Instr) {}; |
| + virtual void instrumentUnreachable(LoweringContext &Context, |
| + const class InstUnreachable *Instr) {}; |
| + virtual void instrumentLocalVars(Cfg *Func) {}; |
| +}; |
| + |
| +} // end of namespace Ice |
| + |
| +#endif // SUBZERO_SRC_ICEASANLOWERING_H |