[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