mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-29 10:32:47 +00:00
Fix GCMetadaPrinter::finishAssembly not executed, patch by Yiannis Tsiouris.
Due to the execution order of doFinalization functions, the GC information were deleted before AsmPrinter::doFinalization was executed. Thus, the GCMetadataPrinter::finishAssembly was never called. The patch fixes that by moving the code of the GCInfoDeleter::doFinalization to Printer::doFinalization. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@175528 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
26a5c4dd31
commit
063337309e
@ -33,25 +33,13 @@ namespace {
|
||||
explicit Printer(raw_ostream &OS) : FunctionPass(ID), OS(OS) {}
|
||||
|
||||
|
||||
const char *getPassName() const;
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const;
|
||||
|
||||
bool runOnFunction(Function &F);
|
||||
};
|
||||
|
||||
class Deleter : public FunctionPass {
|
||||
static char ID;
|
||||
|
||||
public:
|
||||
Deleter();
|
||||
|
||||
const char *getPassName() const;
|
||||
void getAnalysisUsage(AnalysisUsage &AU) const;
|
||||
|
||||
bool runOnFunction(Function &F);
|
||||
bool doFinalization(Module &M);
|
||||
};
|
||||
|
||||
|
||||
}
|
||||
|
||||
INITIALIZE_PASS(GCModuleInfo, "collector-metadata",
|
||||
@ -182,32 +170,9 @@ bool Printer::runOnFunction(Function &F) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
char Deleter::ID = 0;
|
||||
|
||||
FunctionPass *llvm::createGCInfoDeleter() {
|
||||
return new Deleter();
|
||||
}
|
||||
|
||||
Deleter::Deleter() : FunctionPass(ID) {}
|
||||
|
||||
const char *Deleter::getPassName() const {
|
||||
return "Delete Garbage Collector Information";
|
||||
}
|
||||
|
||||
void Deleter::getAnalysisUsage(AnalysisUsage &AU) const {
|
||||
AU.setPreservesAll();
|
||||
AU.addRequired<GCModuleInfo>();
|
||||
}
|
||||
|
||||
bool Deleter::runOnFunction(Function &MF) {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool Deleter::doFinalization(Module &M) {
|
||||
bool Printer::doFinalization(Module &M) {
|
||||
GCModuleInfo *GMI = getAnalysisIfAvailable<GCModuleInfo>();
|
||||
assert(GMI && "Deleter didn't require GCModuleInfo?!");
|
||||
assert(GMI && "Printer didn't require GCModuleInfo?!");
|
||||
GMI->clear();
|
||||
return false;
|
||||
}
|
||||
|
@ -226,7 +226,6 @@ bool LLVMTargetMachine::addPassesToEmitFile(PassManagerBase &PM,
|
||||
|
||||
PM.add(Printer);
|
||||
|
||||
PM.add(createGCInfoDeleter());
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -245,7 +244,6 @@ bool LLVMTargetMachine::addPassesToEmitMachineCode(PassManagerBase &PM,
|
||||
return true;
|
||||
|
||||
addCodeEmitter(PM, JCE);
|
||||
PM.add(createGCInfoDeleter());
|
||||
|
||||
return false; // success!
|
||||
}
|
||||
|
31
test/CodeGen/X86/GC/ocaml-gc.ll
Normal file
31
test/CodeGen/X86/GC/ocaml-gc.ll
Normal file
@ -0,0 +1,31 @@
|
||||
; RUN: llc < %s -mtriple=x86_64-linux-gnu | FileCheck %s
|
||||
|
||||
define i32 @main(i32 %x) nounwind gc "ocaml" {
|
||||
; CHECK: .text
|
||||
; CHECK-NEXT: .globl caml_3C_stdin_3E___code_begin
|
||||
; CHECK-NEXT: caml_3C_stdin_3E___code_begin:
|
||||
; CHECK-NEXT: .data
|
||||
; CHECK-NEXT: .globl caml_3C_stdin_3E___data_begin
|
||||
; CHECK-NEXT: caml_3C_stdin_3E___data_begin:
|
||||
|
||||
%puts = tail call i32 @foo(i32 %x)
|
||||
ret i32 0
|
||||
|
||||
; CHECK: .globl caml_3C_stdin_3E___code_end
|
||||
; CHECK-NEXT: caml_3C_stdin_3E___code_end:
|
||||
; CHECK-NEXT: .data
|
||||
; CHECK-NEXT: .globl caml_3C_stdin_3E___data_end
|
||||
; CHECK-NEXT: caml_3C_stdin_3E___data_end:
|
||||
; CHECK-NEXT: .quad 0
|
||||
; CHECK-NEXT: .globl caml_3C_stdin_3E___frametable
|
||||
; CHECK-NEXT: caml_3C_stdin_3E___frametable:
|
||||
; CHECK-NEXT: .short 1
|
||||
; CHECK-NEXT: .align 8
|
||||
; CHECK-NEXT: # live roots for main
|
||||
; CHECK-NEXT: .quad .Ltmp0
|
||||
; CHECK-NEXT: .short 8
|
||||
; CHECK-NEXT: .short 0
|
||||
; CHECK-NEXT: .align 8
|
||||
}
|
||||
|
||||
declare i32 @foo(i32)
|
Loading…
Reference in New Issue
Block a user