mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
Enabling the target-independent garbage collection infrastructure by hooking it
up to the various compiler pipelines. This doesn't actually add support for any GC algorithms, which means it temporarily breaks a few tests. To be fixed shortly. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@45669 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -16,6 +16,8 @@
|
||||
#include "llvm/DerivedTypes.h"
|
||||
#include "llvm/Constants.h"
|
||||
#include "llvm/Module.h"
|
||||
#include "llvm/CodeGen/Collector.h"
|
||||
#include "llvm/CodeGen/CollectorMetadata.h"
|
||||
#include "llvm/CodeGen/MachineConstantPool.h"
|
||||
#include "llvm/CodeGen/MachineJumpTableInfo.h"
|
||||
#include "llvm/CodeGen/MachineModuleInfo.h"
|
||||
@@ -94,9 +96,20 @@ void AsmPrinter::SwitchToDataSection(const char *NewSection,
|
||||
}
|
||||
|
||||
|
||||
void AsmPrinter::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
MachineFunctionPass::getAnalysisUsage(AU);
|
||||
AU.addRequired<CollectorModuleMetadata>();
|
||||
}
|
||||
|
||||
bool AsmPrinter::doInitialization(Module &M) {
|
||||
Mang = new Mangler(M, TAI->getGlobalPrefix());
|
||||
|
||||
CollectorModuleMetadata *CMM = getAnalysisToUpdate<CollectorModuleMetadata>();
|
||||
assert(CMM && "AsmPrinter didn't require CollectorModuleMetadata?");
|
||||
for (CollectorModuleMetadata::iterator I = CMM->begin(),
|
||||
E = CMM->end(); I != E; ++I)
|
||||
(*I)->beginAssembly(O, *this, *TAI);
|
||||
|
||||
if (!M.getModuleInlineAsm().empty())
|
||||
O << TAI->getCommentString() << " Start of file scope inline assembly\n"
|
||||
<< M.getModuleInlineAsm()
|
||||
@@ -158,6 +171,12 @@ bool AsmPrinter::doFinalization(Module &M) {
|
||||
}
|
||||
}
|
||||
|
||||
CollectorModuleMetadata *CMM = getAnalysisToUpdate<CollectorModuleMetadata>();
|
||||
assert(CMM && "AsmPrinter didn't require CollectorModuleMetadata?");
|
||||
for (CollectorModuleMetadata::iterator I = CMM->end(),
|
||||
E = CMM->begin(); I != E; )
|
||||
(*--I)->finishAssembly(O, *this, *TAI);
|
||||
|
||||
delete Mang; Mang = 0;
|
||||
return false;
|
||||
}
|
||||
|
Reference in New Issue
Block a user