mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-04 18:24:38 +00:00
revert 79631
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@79685 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -73,7 +73,7 @@ bool PIC16AsmPrinter::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
DbgInfo.BeginFunction(MF);
|
DbgInfo.BeginFunction(MF);
|
||||||
|
|
||||||
// Emit the autos section of function.
|
// Emit the autos section of function.
|
||||||
EmitAutos(F);
|
EmitAutos(CurrentFnName);
|
||||||
|
|
||||||
// Now emit the instructions of function in its code section.
|
// Now emit the instructions of function in its code section.
|
||||||
const MCSection *fCodeSection =
|
const MCSection *fCodeSection =
|
||||||
@ -363,9 +363,8 @@ void PIC16AsmPrinter::EmitFunctionFrame(MachineFunction &MF) {
|
|||||||
// Emit the data section name.
|
// Emit the data section name.
|
||||||
O << "\n";
|
O << "\n";
|
||||||
|
|
||||||
std::string SectionName = getObjFileLowering().getNameForFunctFrame(F);
|
|
||||||
const MCSection *fPDataSection =
|
const MCSection *fPDataSection =
|
||||||
getObjFileLowering().getSectionForFunctionFrame(SectionName);
|
getObjFileLowering().getSectionForFunctionFrame(CurrentFnName);
|
||||||
OutStreamer.SwitchSection(fPDataSection);
|
OutStreamer.SwitchSection(fPDataSection);
|
||||||
|
|
||||||
// Emit function frame label
|
// Emit function frame label
|
||||||
@ -441,12 +440,12 @@ void PIC16AsmPrinter::EmitUData(Module &M) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void PIC16AsmPrinter::EmitAutos(const Function *F) {
|
void PIC16AsmPrinter::EmitAutos(std::string FunctName) {
|
||||||
// Section names for all globals are already set.
|
// Section names for all globals are already set.
|
||||||
const TargetData *TD = TM.getTargetData();
|
const TargetData *TD = TM.getTargetData();
|
||||||
|
|
||||||
// Now print Autos section for this function.
|
// Now print Autos section for this function.
|
||||||
std::string SectionName = PAN::getAutosSectionName(CurrentFnName);
|
std::string SectionName = PAN::getAutosSectionName(FunctName);
|
||||||
|
|
||||||
// If this function is a cloned function then the name of auto section
|
// If this function is a cloned function then the name of auto section
|
||||||
// will not be present in the list of existing section. Hence this section
|
// will not be present in the list of existing section. Hence this section
|
||||||
@ -460,15 +459,6 @@ void PIC16AsmPrinter::EmitAutos(const Function *F) {
|
|||||||
if (AutosSections[i]->S_->getName() == SectionName) {
|
if (AutosSections[i]->S_->getName() == SectionName) {
|
||||||
// Set the printing status to true
|
// Set the printing status to true
|
||||||
AutosSections[i]->setPrintedStatus(true);
|
AutosSections[i]->setPrintedStatus(true);
|
||||||
// Overlay auto sections with same function color.
|
|
||||||
std::string BaseSectionName = getObjFileLowering().
|
|
||||||
getNameForFunctFrame(F, true);
|
|
||||||
if (BaseSectionName != F->getName()) {
|
|
||||||
std::string NewSectionName = PAN::getAutosSectionName(BaseSectionName);
|
|
||||||
const_cast<MCSectionPIC16 *>(AutosSections[i]->S_)->setName(
|
|
||||||
NewSectionName);
|
|
||||||
}
|
|
||||||
|
|
||||||
OutStreamer.SwitchSection(AutosSections[i]->S_);
|
OutStreamer.SwitchSection(AutosSections[i]->S_);
|
||||||
const std::vector<const GlobalVariable*> &Items = AutosSections[i]->Items;
|
const std::vector<const GlobalVariable*> &Items = AutosSections[i]->Items;
|
||||||
for (unsigned j = 0; j < Items.size(); j++) {
|
for (unsigned j = 0; j < Items.size(); j++) {
|
||||||
|
@ -52,7 +52,7 @@ namespace llvm {
|
|||||||
void EmitDefinedVars (Module &M);
|
void EmitDefinedVars (Module &M);
|
||||||
void EmitIData (Module &M);
|
void EmitIData (Module &M);
|
||||||
void EmitUData (Module &M);
|
void EmitUData (Module &M);
|
||||||
void EmitAutos (const Function *F);
|
void EmitAutos (std::string FunctName);
|
||||||
void EmitRemainingAutos ();
|
void EmitRemainingAutos ();
|
||||||
void EmitRomData (Module &M);
|
void EmitRomData (Module &M);
|
||||||
void EmitFunctionFrame(MachineFunction &MF);
|
void EmitFunctionFrame(MachineFunction &MF);
|
||||||
|
@ -29,7 +29,6 @@ namespace llvm {
|
|||||||
|
|
||||||
const std::string &getName() const { return Name; }
|
const std::string &getName() const { return Name; }
|
||||||
|
|
||||||
void setName(std::string name) { Name = name; }
|
|
||||||
static MCSectionPIC16 *Create(const StringRef &Name,
|
static MCSectionPIC16 *Create(const StringRef &Name,
|
||||||
SectionKind K, MCContext &Ctx);
|
SectionKind K, MCContext &Ctx);
|
||||||
|
|
||||||
|
@ -44,7 +44,6 @@ namespace PIC16CC {
|
|||||||
UGE
|
UGE
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
// External symbol names require memory to live till the program end.
|
// External symbol names require memory to live till the program end.
|
||||||
// So we have to allocate it and keep.
|
// So we have to allocate it and keep.
|
||||||
inline static const char *createESName (const std::string &name) {
|
inline static const char *createESName (const std::string &name) {
|
||||||
|
@ -22,19 +22,8 @@
|
|||||||
#include <cassert>
|
#include <cassert>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
namespace llvm {
|
|
||||||
namespace PIC16Overlay {
|
|
||||||
// Implement Overlay through colors because we may want to enhance overlay
|
|
||||||
// architecture later. More colors can be added then.
|
|
||||||
// Idea here is that functions with same color can be overlayed.
|
|
||||||
enum Overlay {
|
|
||||||
// A color name can only consist of upper case letters and underscore.
|
|
||||||
GREEN, // Stands for mainline functions that can be overlayed.
|
|
||||||
GREEN_IL, // Interrupt line version of GREEN.
|
|
||||||
RED // Stands for functions that can not be overlayed.
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
|
namespace llvm {
|
||||||
// A Central class to manage all ABI naming conventions.
|
// A Central class to manage all ABI naming conventions.
|
||||||
// PAN - [P]ic16 [A]BI [N]ames
|
// PAN - [P]ic16 [A]BI [N]ames
|
||||||
class PAN {
|
class PAN {
|
||||||
@ -425,22 +414,6 @@ namespace PIC16Overlay {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
inline static std::string getOverlayStr(unsigned Color) {
|
|
||||||
std::string Str = "Overlay=";
|
|
||||||
Str.append(getSectionNameForColor(Color));
|
|
||||||
return Str;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static std::string getSectionNameForColor(unsigned Color) {
|
|
||||||
switch (Color) {
|
|
||||||
default:
|
|
||||||
assert( 0 && "Color not supported");
|
|
||||||
case PIC16Overlay::GREEN:
|
|
||||||
return "GREEN";
|
|
||||||
case PIC16Overlay::GREEN_IL:
|
|
||||||
return "GREEN_IL";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
inline static std::string getAutosSectionForColor(std::string Color) {
|
inline static std::string getAutosSectionForColor(std::string Color) {
|
||||||
return Color.append("_AUTOS");
|
return Color.append("_AUTOS");
|
||||||
|
@ -12,8 +12,5 @@ TARGET = PIC16
|
|||||||
|
|
||||||
LOADABLE_MODULE = 1
|
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
|
include $(LEVEL)/Makefile.common
|
||||||
|
|
||||||
|
@ -1,69 +0,0 @@
|
|||||||
//===-- 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");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -1,45 +0,0 @@
|
|||||||
//===-- 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
|
|
||||||
|
@ -82,35 +82,6 @@ getSectionForFunctionFrame(const std::string &FnName) const {
|
|||||||
return getPIC16Section(T.c_str(), SectionKind::getDataRel());
|
return getPIC16Section(T.c_str(), SectionKind::getDataRel());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string PIC16TargetObjectFile::getNameForFunctFrame(const Function *F,
|
|
||||||
bool IsAutosSection) {
|
|
||||||
std::string SectionName = F->getName();
|
|
||||||
if (F->hasSection()) {
|
|
||||||
std::string Sectn = F->getSection();
|
|
||||||
std::string StrToFind = "Overlay=";
|
|
||||||
size_t Pos = Sectn.find(StrToFind);
|
|
||||||
if (Pos != std::string::npos) {
|
|
||||||
Pos += StrToFind.length();
|
|
||||||
std::string Color = "";
|
|
||||||
char c = Sectn.at(Pos);
|
|
||||||
// A Color can only consist on upper case letters or underscore.
|
|
||||||
while ((c >= 'A' && c<= 'Z') || c == '_') {
|
|
||||||
Color.append(1,c);
|
|
||||||
Pos++;
|
|
||||||
if (Pos >= Sectn.length())
|
|
||||||
break;
|
|
||||||
c = Sectn.at(Pos);
|
|
||||||
}
|
|
||||||
// Autos Section need to be given a different name from function frame.
|
|
||||||
if (IsAutosSection)
|
|
||||||
SectionName = PAN::getAutosSectionForColor(Color);
|
|
||||||
else
|
|
||||||
SectionName = Color;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return SectionName;
|
|
||||||
}
|
|
||||||
|
|
||||||
const MCSection *
|
const MCSection *
|
||||||
PIC16TargetObjectFile::getBSSSectionForGlobal(const GlobalVariable *GV) const {
|
PIC16TargetObjectFile::getBSSSectionForGlobal(const GlobalVariable *GV) const {
|
||||||
assert(GV->hasInitializer() && "This global doesn't need space");
|
assert(GV->hasInitializer() && "This global doesn't need space");
|
||||||
|
@ -12,7 +12,6 @@
|
|||||||
|
|
||||||
#include "llvm/Target/TargetLoweringObjectFile.h"
|
#include "llvm/Target/TargetLoweringObjectFile.h"
|
||||||
#include "llvm/ADT/StringMap.h"
|
#include "llvm/ADT/StringMap.h"
|
||||||
#include "llvm/Function.h"
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@ -85,9 +84,6 @@ namespace llvm {
|
|||||||
// If the current function is cloned then create the new autos section
|
// If the current function is cloned then create the new autos section
|
||||||
// also.
|
// also.
|
||||||
void createClonedSectionForAutos(const std::string &SecName);
|
void createClonedSectionForAutos(const std::string &SecName);
|
||||||
std::string getNameForFunctFrame(const Function *F,
|
|
||||||
bool IsAutosSection = false);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string getSectionNameForSym(const std::string &Sym) const;
|
std::string getSectionNameForSym(const std::string &Sym) const;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user