mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-25 04:02:41 +01:00
We currently use a callback to handle an IL pass deleting a BB that still
has a reference to it. Unfortunately, that doesn't work for codegen passes since we don't get notified of MBB's being deleted (the original BB stays). Use that fact to our advantage and after printing a function, check if any of the IL BBs corresponds to a symbol that was not printed. This fixes pr11202. llvm-svn: 144674
This commit is contained in:
parent
040e92857f
commit
95f4e0c409
@ -736,6 +736,18 @@ void AsmPrinter::EmitFunctionBody() {
|
||||
OutStreamer.EmitRawText(StringRef("\tnop\n"));
|
||||
}
|
||||
|
||||
const Function *F = MF->getFunction();
|
||||
for (Function::const_iterator i = F->begin(), e = F->end(); i != e; ++i) {
|
||||
const BasicBlock *BB = i;
|
||||
if (!BB->hasAddressTaken())
|
||||
continue;
|
||||
MCSymbol *Sym = GetBlockAddressSymbol(BB);
|
||||
if (Sym->isDefined())
|
||||
continue;
|
||||
OutStreamer.AddComment("Address of block that was removed by CodeGen");
|
||||
OutStreamer.EmitLabel(Sym);
|
||||
}
|
||||
|
||||
// Emit target-specific gunk after the function body.
|
||||
EmitFunctionBodyEnd();
|
||||
|
||||
|
19
test/CodeGen/X86/pr11202.ll
Normal file
19
test/CodeGen/X86/pr11202.ll
Normal file
@ -0,0 +1,19 @@
|
||||
; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck %s
|
||||
|
||||
@bb = constant [1 x i8*] [i8* blockaddress(@main, %l2)]
|
||||
|
||||
define void @main() {
|
||||
entry:
|
||||
br label %l1
|
||||
|
||||
l1: ; preds = %l2, %entry
|
||||
%a = zext i1 false to i32
|
||||
br label %l2
|
||||
|
||||
l2: ; preds = %l1
|
||||
%b = zext i1 false to i32
|
||||
br label %l1
|
||||
}
|
||||
|
||||
; CHECK: .Ltmp1: # Address of block that was removed by CodeGen
|
||||
; CHECK: .quad .Ltmp1
|
Loading…
Reference in New Issue
Block a user