[llvm] r342615 - Fix for bug 34002 - label generated before it block is finalized. Differential Revision: https://reviews.llvm.org/D52258

Maya Madhavan via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 19 22:11:42 PDT 2018


Author: mmadhava
Date: Wed Sep 19 22:11:42 2018
New Revision: 342615

URL: http://llvm.org/viewvc/llvm-project?rev=342615&view=rev
Log:
Fix for bug 34002 - label generated before it block is finalized. Differential Revision: https://reviews.llvm.org/D52258

Modified:
    llvm/trunk/include/llvm/MC/MCParser/MCTargetAsmParser.h
    llvm/trunk/lib/MC/MCParser/AsmParser.cpp
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/trunk/test/MC/ARM/implicit-it-generation.s

Modified: llvm/trunk/include/llvm/MC/MCParser/MCTargetAsmParser.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/MC/MCParser/MCTargetAsmParser.h?rev=342615&r1=342614&r2=342615&view=diff
==============================================================================
--- llvm/trunk/include/llvm/MC/MCParser/MCTargetAsmParser.h (original)
+++ llvm/trunk/include/llvm/MC/MCParser/MCTargetAsmParser.h Wed Sep 19 22:11:42 2018
@@ -476,6 +476,9 @@ public:
     return nullptr;
   }
 
+  // For actions that have to be performed before a label is emitted
+  virtual void doBeforeLabelEmit(MCSymbol *Symbol) {}
+  
   virtual void onLabelParsed(MCSymbol *Symbol) {}
 
   /// Ensure that all previously parsed instructions have been emitted to the

Modified: llvm/trunk/lib/MC/MCParser/AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/MC/MCParser/AsmParser.cpp?rev=342615&r1=342614&r2=342615&view=diff
==============================================================================
--- llvm/trunk/lib/MC/MCParser/AsmParser.cpp (original)
+++ llvm/trunk/lib/MC/MCParser/AsmParser.cpp Wed Sep 19 22:11:42 2018
@@ -1808,6 +1808,8 @@ bool AsmParser::parseStatement(ParseStat
       Lex();
     }
 
+    getTargetParser().doBeforeLabelEmit(Sym);
+
     // Emit the label.
     if (!getTargetParser().isParsingInlineAsm())
       Out.EmitLabel(Sym, IDLoc);

Modified: llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp?rev=342615&r1=342614&r2=342615&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Wed Sep 19 22:11:42 2018
@@ -631,6 +631,8 @@ public:
   void ReportNearMisses(SmallVectorImpl<NearMissInfo> &NearMisses, SMLoc IDLoc,
                         OperandVector &Operands);
 
+  void doBeforeLabelEmit(MCSymbol *Symbol) override;
+
   void onLabelParsed(MCSymbol *Symbol) override;
 };
 
@@ -9443,10 +9445,13 @@ bool ARMAsmParser::parseDirectiveARM(SML
   return false;
 }
 
-void ARMAsmParser::onLabelParsed(MCSymbol *Symbol) {
+void ARMAsmParser::doBeforeLabelEmit(MCSymbol *Symbol) {
   // We need to flush the current implicit IT block on a label, because it is
   // not legal to branch into an IT block.
   flushPendingInstructions(getStreamer());
+}
+
+void ARMAsmParser::onLabelParsed(MCSymbol *Symbol) {
   if (NextSymbolIsThumb) {
     getParser().getStreamer().EmitThumbFunc(Symbol);
     NextSymbolIsThumb = false;

Modified: llvm/trunk/test/MC/ARM/implicit-it-generation.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/implicit-it-generation.s?rev=342615&r1=342614&r2=342615&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/implicit-it-generation.s (original)
+++ llvm/trunk/test/MC/ARM/implicit-it-generation.s Wed Sep 19 22:11:42 2018
@@ -73,12 +73,14 @@
   addeq r0, #1
 label:
   addeq r0, #1
-5:
+five:
   addeq r0, #1
 @ CHECK: it eq
 @ CHECK: addeq
+@ CHECK: label
 @ CHECK: it eq
 @ CHECK: addeq
+@ CHECK: five
 @ CHECK: it eq
 @ CHECK: addeq
 




More information about the llvm-commits mailing list