<div dir="ltr"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
+  if (!MMI->getLandingPads().empty(<u></u>)) {<br>
+    CurrentFnBegin = createTempSymbol("eh_func_<u></u>begin", getFunctionNumber());<br>
+<br>
+    if (MAI->useAssignmentForEHBegin(<u></u>)) {<br>
+      MCSymbol *CurPos = OutContext.CreateTempSymbol();<br>
+      OutStreamer.EmitLabel(CurPos);<br>
+      OutStreamer.EmitAssignment(<u></u>CurrentFnBegin,<br>
+                                 MCSymbolRefExpr::Create(<u></u>CurPos, OutContext));<br>
+    } else {<br>
+      OutStreamer.EmitLabel(<u></u>CurrentFnBegin);<br>
+    }<br>
+  }<br>
+<br></blockquote><div><br></div><div>At some point it might be nice to be able to use these symbols in the debug info too (or reuse those, etc) if we're not.</div><div><br></div><div>-eric</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
   // Emit pre-function debug and/or EH information.<br>
   for (const HandlerInfo &HI : Handlers) {<br>
     NamedRegionTimer T(HI.TimerName, HI.TimerGroupName, TimePassesIsEnabled);<br>
@@ -867,6 +882,12 @@ void AsmPrinter::EmitFunctionBody() {<br>
   // Emit target-specific gunk after the function body.<br>
   EmitFunctionBodyEnd();<br>
<br>
+  if (!MMI->getLandingPads().empty(<u></u>)) {<br>
+    // Create a symbol for the end of function.<br>
+    CurrentFnEnd = createTempSymbol("eh_func_end"<u></u>, getFunctionNumber());<br>
+    OutStreamer.EmitLabel(<u></u>CurrentFnEnd);<br>
+  }<br>
+<br>
   // If the target wants a .size directive for the size of the function, emit<br>
   // it.<br>
   if (MAI-><u></u>hasDotTypeDotSizeDirective()) {<br>
@@ -2273,6 +2294,9 @@ MCSymbol *AsmPrinter::GetTempSymbol(<u></u>cons<br>
                                       Name);<br>
 }<br>
<br>
+MCSymbol *AsmPrinter::createTempSymbol(<u></u>const Twine &Name, unsigned ID) const {<br>
+  return OutContext.createTempSymbol(<u></u>Name + Twine(ID));<br>
+}<br>
<br>
 MCSymbol *AsmPrinter::<u></u>GetBlockAddressSymbol(const BlockAddress *BA) const {<br>
   return MMI->getAddrLabelSymbol(BA-><u></u>getBasicBlock());<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfCFIException.<u></u>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/DwarfCFIException.cpp?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/<u></u>CodeGen/AsmPrinter/<u></u>DwarfCFIException.cpp?rev=<u></u>230772&r1=230771&r2=230772&<u></u>view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfCFIException.<u></u>cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/DwarfCFIException.<u></u>cpp Fri Feb 27 12:18:39 2015<br>
@@ -113,18 +113,6 @@ void DwarfCFIException::<u></u>beginFunction(co<br>
       TLOF.getCFIPersonalitySymbol(<u></u>Per, *Asm->Mang, Asm->TM, MMI);<br>
   Asm->OutStreamer.<u></u>EmitCFIPersonality(Sym, PerEncoding);<br>
<br>
-  MCSymbol *EHBegin =<br>
-      Asm->GetTempSymbol("eh_func_<u></u>begin", Asm->getFunctionNumber());<br>
-  if (Asm->MAI-><u></u>useAssignmentForEHBegin()) {<br>
-    MCContext &Ctx = Asm->OutContext;<br>
-    MCSymbol *CurPos = Ctx.CreateTempSymbol();<br>
-    Asm->OutStreamer.EmitLabel(<u></u>CurPos);<br>
-    Asm->OutStreamer.<u></u>EmitAssignment(EHBegin,<br>
-                                    MCSymbolRefExpr::Create(<u></u>CurPos, Ctx));<br>
-  } else {<br>
-    Asm->OutStreamer.EmitLabel(<u></u>EHBegin);<br>
-  }<br>
-<br>
   // Provide LSDA information.<br>
   if (!shouldEmitLSDA)<br>
     return;<br>
@@ -145,9 +133,6 @@ void DwarfCFIException::<u></u>endFunction(cons<br>
   if (!shouldEmitPersonality)<br>
     return;<br>
<br>
-  Asm->OutStreamer.EmitLabel(<u></u>Asm->GetTempSymbol("eh_func_<u></u>end",<br>
-                                                Asm->getFunctionNumber()));<br>
-<br>
   // Map all labels and get rid of any dead landing pads.<br>
   MMI->TidyLandingPads();<br>
<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/EHStreamer.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/EHStreamer.cpp?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/<u></u>CodeGen/AsmPrinter/EHStreamer.<u></u>cpp?rev=230772&r1=230771&r2=<u></u>230772&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/EHStreamer.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/EHStreamer.cpp Fri Feb 27 12:18:39 2015<br>
@@ -552,16 +552,14 @@ void EHStreamer::<u></u>emitExceptionTable() {<br>
          I = CallSites.begin(), E = CallSites.end(); I != E; ++I) {<br>
       const CallSiteEntry &S = *I;<br>
<br>
-      MCSymbol *EHFuncBeginSym =<br>
-        Asm->GetTempSymbol("eh_func_<u></u>begin", Asm->getFunctionNumber());<br>
+      MCSymbol *EHFuncBeginSym = Asm->getFunctionBegin();<br>
<br>
       MCSymbol *BeginLabel = S.BeginLabel;<br>
       if (!BeginLabel)<br>
         BeginLabel = EHFuncBeginSym;<br>
       MCSymbol *EndLabel = S.EndLabel;<br>
       if (!EndLabel)<br>
-        EndLabel = Asm->GetTempSymbol("eh_func_<u></u>end", Asm->getFunctionNumber());<br>
-<br>
+        EndLabel = Asm->getFunctionEnd();<br>
<br>
       // Offset of the call site relative to the previous call site, counted in<br>
       // number of 16-byte bundles. The first call site is counted relative to<br>
<br>
Modified: llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/Win64Exception.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/AsmPrinter/Win64Exception.cpp?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/<u></u>CodeGen/AsmPrinter/<u></u>Win64Exception.cpp?rev=230772&<u></u>r1=230771&r2=230772&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/Win64Exception.cpp (original)<br>
+++ llvm/trunk/lib/CodeGen/<u></u>AsmPrinter/Win64Exception.cpp Fri Feb 27 12:18:39 2015<br>
@@ -80,9 +80,6 @@ void Win64Exception::beginFunction(<u></u>const<br>
   const MCSymbol *PersHandlerSym =<br>
       TLOF.getCFIPersonalitySymbol(<u></u>Per, *Asm->Mang, Asm->TM, MMI);<br>
   Asm->OutStreamer.<u></u>EmitWinEHHandler(<u></u>PersHandlerSym, true, true);<br>
-<br>
-  Asm->OutStreamer.EmitLabel(<u></u>Asm->GetTempSymbol("eh_func_<u></u>begin",<br>
-                                                Asm->getFunctionNumber()));<br>
 }<br>
<br>
 /// endFunction - Gather and emit post-function exception information.<br>
@@ -91,9 +88,6 @@ void Win64Exception::endFunction(<u></u>const M<br>
   if (!shouldEmitPersonality && !shouldEmitMoves)<br>
     return;<br>
<br>
-  Asm->OutStreamer.EmitLabel(<u></u>Asm->GetTempSymbol("eh_func_<u></u>end",<br>
-                                                Asm->getFunctionNumber()));<br>
-<br>
   // Map all labels and get rid of any dead landing pads.<br>
   MMI->TidyLandingPads();<br>
<br>
@@ -170,10 +164,8 @@ void Win64Exception::<u></u>emitCSpecificHandle<br>
   SmallVector<CallSiteEntry, 64> CallSites;<br>
   computeCallSiteTable(<u></u>CallSites, LandingPads, FirstActions);<br>
<br>
-  MCSymbol *EHFuncBeginSym =<br>
-      Asm->GetTempSymbol("eh_func_<u></u>begin", Asm->getFunctionNumber());<br>
-  MCSymbol *EHFuncEndSym =<br>
-      Asm->GetTempSymbol("eh_func_<u></u>end", Asm->getFunctionNumber());<br>
+  MCSymbol *EHFuncBeginSym = Asm->getFunctionBegin();<br>
+  MCSymbol *EHFuncEndSym = Asm->getFunctionEnd();<br>
<br>
   // Emit the number of table entries.<br>
   unsigned NumEntries = 0;<br>
<br>
Modified: llvm/trunk/lib/MC/MCContext.<u></u>cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCContext.cpp?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/lib/MC/<u></u>MCContext.cpp?rev=230772&r1=<u></u>230771&r2=230772&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/lib/MC/MCContext.<u></u>cpp (original)<br>
+++ llvm/trunk/lib/MC/MCContext.<u></u>cpp Fri Feb 27 12:18:39 2015<br>
@@ -160,6 +160,12 @@ MCSymbol *MCContext::CreateSymbol(<u></u>String<br>
   return Result;<br>
 }<br>
<br>
+MCSymbol *MCContext::createTempSymbol(<u></u>const Twine &Name) {<br>
+  SmallString<128> NameSV;<br>
+  raw_svector_ostream(NameSV) << MAI->getPrivateGlobalPrefix() << Name;<br>
+  return CreateSymbol(NameSV);<br>
+}<br>
+<br>
 MCSymbol *MCContext::GetOrCreateSymbol(<u></u>const Twine &Name) {<br>
   SmallString<128> NameSV;<br>
   return GetOrCreateSymbol(Name.<u></u>toStringRef(NameSV));<br>
<br>
Modified: llvm/trunk/test/CodeGen/Mips/<u></u>mips16ex.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/Mips/mips16ex.ll?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>CodeGen/Mips/mips16ex.ll?rev=<u></u>230772&r1=230771&r2=230772&<u></u>view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/CodeGen/Mips/<u></u>mips16ex.ll (original)<br>
+++ llvm/trunk/test/CodeGen/Mips/<u></u>mips16ex.ll Fri Feb 27 12:18:39 2015<br>
@@ -1,8 +1,10 @@<br>
 ; RUN: llc  -march=mipsel -mcpu=mips16 -relocation-model=pic -O3 < %s | FileCheck %s -check-prefix=16<br>
<br>
-;16: .cfi_personality<br>
+;16: main:<br>
 ;16-NEXT: [[TMP:.*]]:<br>
 ;16-NEXT: $eh_func_begin0 = ([[TMP]])<br>
+;16-NEXT: .cfi_startproc<br>
+;16-NEXT: .cfi_personality<br>
 @.str = private unnamed_addr constant [7 x i8] c"hello\0A\00", align 1<br>
 @_ZTIi = external constant i8*<br>
 @.str1 = private unnamed_addr constant [15 x i8] c"exception %i \0A\00", align 1<br>
<br>
Added: llvm/trunk/test/CodeGen/X86/<u></u>eh-label.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/eh-label.ll?rev=230772&view=auto" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>CodeGen/X86/eh-label.ll?rev=<u></u>230772&view=auto</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/CodeGen/X86/<u></u>eh-label.ll (added)<br>
+++ llvm/trunk/test/CodeGen/X86/<u></u>eh-label.ll Fri Feb 27 12:18:39 2015<br>
@@ -0,0 +1,24 @@<br>
+; RUN: llc < %s -mtriple=x86_64-pc-linux | FileCheck %s<br>
+; Test that we don't crashe if the .Leh_func_end0 name is taken.<br>
+<br>
+declare void @g()<br>
+<br>
+define void @f() {<br>
+bb0:<br>
+  call void asm ".Leh_func_end0:", ""()<br>
+; CHECK: #APP<br>
+; CHECK-NEXT: .Leh_func_end0:<br>
+; CHECK-NEXT: #NO_APP<br>
+<br>
+  invoke void @g() to label %bb2 unwind label %bb1<br>
+bb1:<br>
+  landingpad { i8*, i32 } personality i8* bitcast (void ()* @g to i8*)<br>
+          catch i8* null<br>
+  call void @g()<br>
+  ret void<br>
+bb2:<br>
+  ret void<br>
+<br>
+; CHECK: [[END:.Leh_func_end.*]]:<br>
+; CHECK: .long [[END]]-<br>
+}<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/<u></u>global-sections.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/global-sections.ll?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>CodeGen/X86/global-sections.<u></u>ll?rev=230772&r1=230771&r2=<u></u>230772&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/CodeGen/X86/<u></u>global-sections.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/<u></u>global-sections.ll Fri Feb 27 12:18:39 2015<br>
@@ -84,8 +84,8 @@ bb7:<br>
 }<br>
<br>
 ; DARWIN64: _F3:<br>
-; DARWIN64: .cfi_endproc<br>
-; DARWIN64-NEXT: Leh_func_end<br>
+; DARWIN64: Leh_func_end<br>
+; DARWIN64-NEXT: .cfi_endproc<br>
 ; DARWIN64-NEXT: .section        __TEXT,__gcc_except_tab<br>
 ; DARWIN64-NOT: .section<br>
 ; DARWIN64: .section        __TEXT,__text,regular,pure_<u></u>instructions<br>
<br>
Modified: llvm/trunk/test/CodeGen/X86/<u></u>patchpoint-invoke.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/patchpoint-invoke.ll?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>CodeGen/X86/patchpoint-invoke.<u></u>ll?rev=230772&r1=230771&r2=<u></u>230772&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/CodeGen/X86/<u></u>patchpoint-invoke.ll (original)<br>
+++ llvm/trunk/test/CodeGen/X86/<u></u>patchpoint-invoke.ll Fri Feb 27 12:18:39 2015<br>
@@ -5,8 +5,8 @@<br>
 define i64 @patchpoint_invoke(i64 %p1, i64 %p2) {<br>
 entry:<br>
 ; CHECK-LABEL: patchpoint_invoke:<br>
+; CHECK-NEXT:  [[FUNC_BEGIN:.L.*]]:<br>
 ; CHECK-NEXT: .cfi_startproc<br>
-; CHECK:      [[FUNC_BEGIN:.L.*]]:<br>
 ; CHECK:      .cfi_lsda 3, [[EXCEPTION_LABEL:.L[^ ]*]]<br>
 ; CHECK:      pushq %rbp<br>
<br>
<br>
Modified: llvm/trunk/test/CodeGen/XCore/<u></u>exception.ll<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/XCore/exception.ll?rev=230772&r1=230771&r2=230772&view=diff" target="_blank">http://llvm.org/viewvc/llvm-<u></u>project/llvm/trunk/test/<u></u>CodeGen/XCore/exception.ll?<u></u>rev=230772&r1=230771&r2=<u></u>230772&view=diff</a><br>
==============================<u></u>==============================<u></u>==================<br>
--- llvm/trunk/test/CodeGen/XCore/<u></u>exception.ll (original)<br>
+++ llvm/trunk/test/CodeGen/XCore/<u></u>exception.ll Fri Feb 27 12:18:39 2015<br>
@@ -39,10 +39,10 @@ entry:<br>
   unreachable<br>
 }<br>
<br>
-; CHECK-LABEL: fn_catch<br>
+; CHECK-LABEL: fn_catch:<br>
+; CHECK-NEXT: [[START:.L[a-zA-Z0-9_]+]]<br>
 ; CHECK: .cfi_startproc<br>
 ; CHECK: .cfi_personality 0, __gxx_personality_v0<br>
-; CHECK: [[START:.L[a-zA-Z0-9_]+]]<br>
 ; CHECK: .cfi_lsda 0, [[LSDA:.L[a-zA-Z0-9_]+]]<br>
 ; CHECK: entsp 4<br>
 ; CHECK: .cfi_def_cfa_offset 16<br>
@@ -91,8 +91,8 @@ lpad:<br>
 ; CHECK: bf r0, [[RETURN]]<br>
 ; CHECK: mov r0, r4<br>
 ; CHECK: bl _Unwind_Resume<br>
-; CHECK: .cfi_endproc<br>
 ; CHECK: [[END:.L[a-zA-Z0-9_]+]]<br>
+; CHECK: .cfi_endproc<br>
   %6 = icmp eq i32 %5, %2<br>
   br i1 %6, label %Resume, label %Exit<br>
 Resume:<br>
<br>
<br>
______________________________<u></u>_________________<br>
llvm-commits mailing list<br>
<a href="mailto:llvm-commits@cs.uiuc.edu" target="_blank">llvm-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/<u></u>mailman/listinfo/llvm-commits</a><br>
</blockquote></div></div>