[llvm] c6e787f - [MCAsmParser] .rept/.irp/.irpc: remove excess tail EOL in expansion

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Wed May 15 17:53:03 PDT 2024


Author: Fangrui Song
Date: 2024-05-15T17:52:59-07:00
New Revision: c6e787f771d1f9d6a846b2d9b8db6adcd87e8dba

URL: https://github.com/llvm/llvm-project/commit/c6e787f771d1f9d6a846b2d9b8db6adcd87e8dba
DIFF: https://github.com/llvm/llvm-project/commit/c6e787f771d1f9d6a846b2d9b8db6adcd87e8dba.diff

LOG: [MCAsmParser] .rept/.irp/.irpc: remove excess tail EOL in expansion

```
.irp foo,1
nop
.endr
nop
```

expands to an excess EOL between two nop lines. Remove the excess EOL.

Added: 
    

Modified: 
    llvm/lib/MC/MCParser/AsmParser.cpp
    llvm/test/MC/AsmParser/macro-rept.s

Removed: 
    


################################################################################
diff  --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 8d9acd54e8797..46c1caa940c5b 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -5629,27 +5629,20 @@ MCAsmMacro *AsmParser::parseMacroLikeBody(SMLoc DirectiveLoc) {
       return nullptr;
     }
 
-    if (Lexer.is(AsmToken::Identifier) &&
-        (getTok().getIdentifier() == ".rep" ||
-         getTok().getIdentifier() == ".rept" ||
-         getTok().getIdentifier() == ".irp" ||
-         getTok().getIdentifier() == ".irpc")) {
-      ++NestLevel;
-    }
-
-    // Otherwise, check whether we have reached the .endr.
-    if (Lexer.is(AsmToken::Identifier) && getTok().getIdentifier() == ".endr") {
-      if (NestLevel == 0) {
-        EndToken = getTok();
-        Lex();
-        if (Lexer.isNot(AsmToken::EndOfStatement)) {
-          printError(getTok().getLoc(),
-                     "unexpected token in '.endr' directive");
-          return nullptr;
+    if (Lexer.is(AsmToken::Identifier)) {
+      StringRef Ident = getTok().getIdentifier();
+      if (Ident == ".rep" || Ident == ".rept" || Ident == ".irp" ||
+          Ident == ".irpc") {
+        ++NestLevel;
+      } else if (Ident == ".endr") {
+        if (NestLevel == 0) {
+          EndToken = getTok();
+          Lex();
+          if (!parseEOL())
+            break;
         }
-        break;
+        --NestLevel;
       }
-      --NestLevel;
     }
 
     // Otherwise, scan till the end of the statement.

diff  --git a/llvm/test/MC/AsmParser/macro-rept.s b/llvm/test/MC/AsmParser/macro-rept.s
index 1dc8060e1d871..2a6a4070bff59 100644
--- a/llvm/test/MC/AsmParser/macro-rept.s
+++ b/llvm/test/MC/AsmParser/macro-rept.s
@@ -13,10 +13,10 @@
 // CHECK: .long	1
 // CHECK: .long	1
 
-// CHECK: .long	0
-// CHECK: .long	0
-// CHECK: .long	0
-
-// CHECK: .long	0
-// CHECK: .long	0
-// CHECK: .long	0
+// CHECK:      .long	0
+// CHECK-NEXT: .long	0
+// CHECK-NEXT: .long	0
+// CHECK-NEXT: .long	0
+// CHECK-NEXT: .long	0
+// CHECK-NEXT: .long	0
+// CHECK-EMPTY:


        


More information about the llvm-commits mailing list