diff options
author | Dale Johannesen <dalej@apple.com> | 2008-04-08 00:37:56 +0000 |
---|---|---|
committer | Dale Johannesen <dalej@apple.com> | 2008-04-08 00:37:56 +0000 |
commit | f2247cfb38851c20c9667c608b2dceb16d5e9f26 (patch) | |
tree | 2a195e78829628e0201bb635697061c2245cd8cf | |
parent | a25e5787bc3a56fbc8983dfe6be68e00cd1709b4 (diff) | |
download | external_llvm-f2247cfb38851c20c9667c608b2dceb16d5e9f26.zip external_llvm-f2247cfb38851c20c9667c608b2dceb16d5e9f26.tar.gz external_llvm-f2247cfb38851c20c9667c608b2dceb16d5e9f26.tar.bz2 |
Handle the situation in 2008-01-25-EmptyFunction.ll
correctly when unwind info is being generated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@49366 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Target/X86/X86ATTAsmPrinter.cpp | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/X86ATTAsmPrinter.cpp index 151bf11..78240b3 100644 --- a/lib/Target/X86/X86ATTAsmPrinter.cpp +++ b/lib/Target/X86/X86ATTAsmPrinter.cpp @@ -156,17 +156,8 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { DW.BeginFunction(&MF); } - if (Subtarget->isTargetDarwin()) { - // If the function is empty, then we need to emit *something*. Otherwise, - // the function's label might be associated with something that it wasn't - // meant to be associated with. We emit a noop in this situation. - MachineFunction::iterator I = MF.begin(); - - if (++I == MF.end() && MF.front().empty()) - O << "\tnop\n"; - } - // Print out code for the function. + bool hasAnyRealCode = false; for (MachineFunction::const_iterator I = MF.begin(), E = MF.end(); I != E; ++I) { // Print a label for the basic block. @@ -177,10 +168,20 @@ bool X86ATTAsmPrinter::runOnMachineFunction(MachineFunction &MF) { for (MachineBasicBlock::const_iterator II = I->begin(), IE = I->end(); II != IE; ++II) { // Print the assembly for the instruction. + if (II->getOpcode() != X86::LABEL) + hasAnyRealCode = true; printMachineInstruction(II); } } + if (Subtarget->isTargetDarwin() && !hasAnyRealCode) { + // If the function is empty, then we need to emit *something*. Otherwise, + // the function's label might be associated with something that it wasn't + // meant to be associated with. We emit a noop in this situation. + // We are assuming inline asms are code. + O << "\tnop\n"; + } + if (TAI->hasDotTypeDotSizeDirective()) O << "\t.size\t" << CurrentFnName << ", .-" << CurrentFnName << "\n"; |