mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-08 06:32:24 +00:00
56 lines
1.6 KiB
C
56 lines
1.6 KiB
C
|
//===-- 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
|