diff options
Diffstat (limited to 'llvm/lib/Target/PIC16/PIC16Passes')
| -rw-r--r-- | llvm/lib/Target/PIC16/PIC16Passes/Makefile | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.cpp | 69 | ||||
| -rw-r--r-- | llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.h | 45 |
3 files changed, 117 insertions, 0 deletions
diff --git a/llvm/lib/Target/PIC16/PIC16Passes/Makefile b/llvm/lib/Target/PIC16/PIC16Passes/Makefile index 919562106a1..61b43623a19 100644 --- a/llvm/lib/Target/PIC16/PIC16Passes/Makefile +++ b/llvm/lib/Target/PIC16/PIC16Passes/Makefile @@ -12,5 +12,8 @@ TARGET = PIC16 LOADABLE_MODULE = 1 +# Hack: we need to include 'main' pic16 target directory to grab private headers +CPPFLAGS = -I$(PROJ_OBJ_DIR)/.. -I$(PROJ_SRC_DIR)/.. + include $(LEVEL)/Makefile.common diff --git a/llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.cpp b/llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.cpp new file mode 100644 index 00000000000..cfeb97d6e7e --- /dev/null +++ b/llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.cpp @@ -0,0 +1,69 @@ +//===-- PIC16FrameOverlay.cpp - Implementation for PIC16 Frame Overlay===// +// +// 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 Frame Overlay implementation. +// +//===----------------------------------------------------------------------===// + + +#include "llvm/Analysis/CallGraph.h" +#include "llvm/Pass.h" +#include "llvm/Module.h" +#include "llvm/Support/raw_ostream.h" +#include "PIC16.h" +#include "PIC16FrameOverlay.h" +#include <vector> +#include <iostream> +using namespace llvm; +using std::vector; +using std::string; + + +void PIC16FrameOverlay::getAnalysisUsage(AnalysisUsage &AU) const { + AU.setPreservesCFG(); + AU.addRequired<CallGraph>(); +} + +bool PIC16FrameOverlay::runOnModule(Module &M) { + CallGraph &CG = getAnalysis<CallGraph>(); + for (CallGraph::iterator it = CG.begin() ; it != CG.end(); it++) + { + // External calling node doesn't have any function associated + // with it + if (!it->first) + continue; + + if (it->second->size() == 0) { + if (PAN::isInterruptLineFunction(it->first)) + ColorFunction(it->second, PIC16Overlay::GREEN_IL); + else + ColorFunction(it->second, PIC16Overlay::GREEN); + } + } + return false; +} + +void PIC16FrameOverlay::ColorFunction(CallGraphNode *CGN, unsigned Color) { + switch (Color) { + case PIC16Overlay::GREEN: + case PIC16Overlay::GREEN_IL: { + Function *LeafFunct = CGN->getFunction(); + std::string Section = ""; + if (LeafFunct->hasSection()) { + Section = LeafFunct->getSection(); + Section.append(" "); + } + Section.append(PAN::getOverlayStr(Color)); + LeafFunct->setSection(Section); + break; + } + default: + assert( 0 && "Color not supported"); + } +} diff --git a/llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.h b/llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.h new file mode 100644 index 00000000000..813ceba063b --- /dev/null +++ b/llvm/lib/Target/PIC16/PIC16Passes/PIC16FrameOverlay.h @@ -0,0 +1,45 @@ +//===-- 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 Frame Overlay infrastructure. +// +//===----------------------------------------------------------------------===// + +#ifndef PIC16FRAMEOVERLAY_H +#define PIC16FRAMEOVERLAY_H + +#include "llvm/Analysis/CallGraph.h" +#include "llvm/Pass.h" +#include "llvm/Module.h" +#include "llvm/Support/raw_ostream.h" +#include <vector> +#include <iostream> +using std::vector; +using std::string; +using namespace llvm; + +namespace { + + class PIC16FrameOverlay : public ModulePass { + public: + static char ID; // Class identification + PIC16FrameOverlay() : ModulePass(&ID) {} + + virtual void getAnalysisUsage(AnalysisUsage &AU) const; + virtual bool runOnModule(Module &M); + private: + void ColorFunction(CallGraphNode *CGN, unsigned Color); + }; + char PIC16FrameOverlay::ID = 0; + static RegisterPass<PIC16FrameOverlay> + Y("pic16overlay", "PIC16 Frame Overlay Analysis"); + +} // End of namespace + +#endif |

