diff options
Diffstat (limited to 'lib/Target/PIC16/PIC16Passes/PIC16Overlay.h')
-rw-r--r-- | lib/Target/PIC16/PIC16Passes/PIC16Overlay.h | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/lib/Target/PIC16/PIC16Passes/PIC16Overlay.h b/lib/Target/PIC16/PIC16Passes/PIC16Overlay.h new file mode 100644 index 0000000..d70c4e7 --- /dev/null +++ b/lib/Target/PIC16/PIC16Passes/PIC16Overlay.h @@ -0,0 +1,55 @@ +//===-- PIC16FrameOverlay.h - Interface for PIC16 Frame Overlay -*- C++ -*-===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file contains the PIC16 Overlay infrastructure. +// +//===----------------------------------------------------------------------===// + +#ifndef PIC16FRAMEOVERLAY_H +#define PIC16FRAMEOVERLAY_H + +#include "llvm/Analysis/CallGraph.h" +#include "llvm/Pass.h" +#include "llvm/CallGraphSCCPass.h" + +using std::string; +using namespace llvm; + +namespace llvm { + namespace PIC16Overlay { + enum OverlayConsts { + StartInterruptColor = 200, + StartIndirectCallColor = 300 + }; + } + class PIC16FrameOverlay : public ModulePass { + std::string OverlayStr; + unsigned InterruptDepth; + unsigned IndirectCallColor; + public: + static char ID; // Class identification + PIC16FrameOverlay() : ModulePass(&ID) { + OverlayStr = "Overlay="; + InterruptDepth = PIC16Overlay::StartInterruptColor; + IndirectCallColor = PIC16Overlay::StartIndirectCallColor; + } + + virtual void getAnalysisUsage(AnalysisUsage &AU) const; + virtual bool runOnModule(Module &M); + + private: + unsigned getColor(Function *Fn); + void setColor(Function *Fn, unsigned Color); + unsigned ModifyDepthForInterrupt(CallGraphNode *CGN, unsigned Depth); + void MarkIndirectlyCalledFunctions(Module &M); + void DFSTraverse(CallGraphNode *CGN, unsigned Depth); + }; +} // End of namespace + +#endif |