[llvm] b901b6a - Revert "[ms] [llvm-ml] Add support for .radix directive, and accept all radix specifiers"

Eric Astor via llvm-commits llvm-commits at lists.llvm.org
Wed Sep 23 10:59:44 PDT 2020


Author: Eric Astor
Date: 2020-09-23T13:59:34-04:00
New Revision: b901b6ab173ac77edfe97e0dbd138410b940b4bc

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

LOG: Revert "[ms] [llvm-ml] Add support for .radix directive, and accept all radix specifiers"

This reverts commit 5dd1b6d612655c9006ba97a8b6487ded80719b48.

Added: 
    

Modified: 
    llvm/include/llvm/MC/MCParser/MCAsmLexer.h
    llvm/lib/MC/MCParser/AsmLexer.cpp
    llvm/lib/MC/MCParser/COFFMasmParser.cpp
    llvm/lib/MC/MCParser/MasmParser.cpp
    llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp

Removed: 
    llvm/test/tools/llvm-ml/radix.test
    llvm/test/tools/llvm-ml/radix_errors.test


################################################################################
diff  --git a/llvm/include/llvm/MC/MCParser/MCAsmLexer.h b/llvm/include/llvm/MC/MCParser/MCAsmLexer.h
index a9481a02f098..e89abeaac94c 100644
--- a/llvm/include/llvm/MC/MCParser/MCAsmLexer.h
+++ b/llvm/include/llvm/MC/MCParser/MCAsmLexer.h
@@ -50,7 +50,6 @@ class MCAsmLexer {
   bool AllowAtInIdentifier;
   bool IsAtStartOfStatement = true;
   bool LexMasmIntegers = false;
-  unsigned DefaultRadix = 10;
   AsmCommentConsumer *CommentConsumer = nullptr;
 
   MCAsmLexer();
@@ -144,9 +143,6 @@ class MCAsmLexer {
   bool getAllowAtInIdentifier() { return AllowAtInIdentifier; }
   void setAllowAtInIdentifier(bool v) { AllowAtInIdentifier = v; }
 
-  unsigned getDefaultRadix() const { return DefaultRadix; }
-  void setDefaultRadix(unsigned Radix) { DefaultRadix = Radix; }
-
   void setCommentConsumer(AsmCommentConsumer *CommentConsumer) {
     this->CommentConsumer = CommentConsumer;
   }

diff  --git a/llvm/lib/MC/MCParser/AsmLexer.cpp b/llvm/lib/MC/MCParser/AsmLexer.cpp
index 2099079a0596..5a571c7c0c0e 100644
--- a/llvm/lib/MC/MCParser/AsmLexer.cpp
+++ b/llvm/lib/MC/MCParser/AsmLexer.cpp
@@ -18,7 +18,6 @@
 #include "llvm/ADT/StringSwitch.h"
 #include "llvm/MC/MCAsmInfo.h"
 #include "llvm/MC/MCParser/MCAsmLexer.h"
-#include "llvm/Support/Compiler.h"
 #include "llvm/Support/SMLoc.h"
 #include "llvm/Support/SaveAndRestore.h"
 #include <cassert>
@@ -272,13 +271,6 @@ static unsigned doHexLookAhead(const char *&CurPtr, unsigned DefaultRadix,
   return DefaultRadix;
 }
 
-static const char *findLastDigit(const char *CurPtr, unsigned DefaultRadix) {
-  while (hexDigitValue(*CurPtr) < DefaultRadix) {
-    ++CurPtr;
-  }
-  return CurPtr;
-}
-
 static AsmToken intToken(StringRef Ref, APInt &Value)
 {
   if (Value.isIntN(64))
@@ -286,21 +278,6 @@ static AsmToken intToken(StringRef Ref, APInt &Value)
   return AsmToken(AsmToken::BigNum, Ref, Value);
 }
 
-static std::string radixName(unsigned Radix) {
-  switch (Radix) {
-  case 2:
-    return "binary";
-  case 8:
-    return "octal";
-  case 10:
-    return "decimal";
-  case 16:
-    return "hexadecimal";
-  default:
-    return "base-" + std::to_string(Radix);
-  }
-}
-
 /// LexDigit: First character is [0-9].
 ///   Local Label: [0-9][:]
 ///   Forward/Backward Label: [0-9][fb]
@@ -309,46 +286,16 @@ static std::string radixName(unsigned Radix) {
 ///   Hex integer: 0x[0-9a-fA-F]+ or [0x]?[0-9][0-9a-fA-F]*[hH]
 ///   Decimal integer: [1-9][0-9]*
 AsmToken AsmLexer::LexDigit() {
-  // MASM-flavor binary integer: [01]+[yY] (if DefaultRadix < 16, [bByY])
-  // MASM-flavor octal integer: [0-7]+[oOqQ]
-  // MASM-flavor decimal integer: [0-9]+[tT] (if DefaultRadix < 16, [dDtT])
+  // MASM-flavor binary integer: [01]+[bB]
   // MASM-flavor hexadecimal integer: [0-9][0-9a-fA-F]*[hH]
   if (LexMasmIntegers && isdigit(CurPtr[-1])) {
-    const char *FirstNonBinary =
-        (CurPtr[-1] != '0' && CurPtr[-1] != '1') ? CurPtr - 1 : nullptr;
-    const char *FirstNonDecimal =
-        (CurPtr[-1] < '0' || CurPtr[-1] > '9') ? CurPtr - 1 : nullptr;
+    const char *FirstNonBinary = (CurPtr[-1] != '0' && CurPtr[-1] != '1') ?
+                                   CurPtr - 1 : nullptr;
     const char *OldCurPtr = CurPtr;
     while (isHexDigit(*CurPtr)) {
-      switch (*CurPtr) {
-      default:
-        if (!FirstNonDecimal) {
-          FirstNonDecimal = CurPtr;
-        }
-        LLVM_FALLTHROUGH;
-      case '9':
-      case '8':
-      case '7':
-      case '6':
-      case '5':
-      case '4':
-      case '3':
-      case '2':
-        if (!FirstNonBinary) {
-          FirstNonBinary = CurPtr;
-        }
-        break;
-      case '1':
-      case '0':
-        break;
-      }
-      ++CurPtr;
-    }
-    if (*CurPtr == '.') {
-      // MASM float literals (other than hex floats) always contain a ".", and
-      // are always written in decimal.
+      if (*CurPtr != '0' && *CurPtr != '1' && !FirstNonBinary)
+        FirstNonBinary = CurPtr;
       ++CurPtr;
-      return LexFloatLiteral();
     }
 
     unsigned Radix = 0;
@@ -356,61 +303,28 @@ AsmToken AsmLexer::LexDigit() {
       // hexadecimal number
       ++CurPtr;
       Radix = 16;
-    } else if (*CurPtr == 't' || *CurPtr == 'T') {
-      // decimal number
-      ++CurPtr;
-      Radix = 10;
-    } else if (*CurPtr == 'o' || *CurPtr == 'O' || *CurPtr == 'q' ||
-               *CurPtr == 'Q') {
-      // octal number
-      ++CurPtr;
-      Radix = 8;
-    } else if (*CurPtr == 'y' || *CurPtr == 'Y') {
-      // binary number
-      ++CurPtr;
-      Radix = 2;
-    } else if (FirstNonDecimal && FirstNonDecimal + 1 == CurPtr &&
-               DefaultRadix < 14 &&
-               (*FirstNonDecimal == 'd' || *FirstNonDecimal == 'D')) {
-      Radix = 10;
     } else if (FirstNonBinary && FirstNonBinary + 1 == CurPtr &&
-               DefaultRadix < 12 &&
-               (*FirstNonBinary == 'b' || *FirstNonBinary == 'B')) {
+               (*FirstNonBinary == 'b' || *FirstNonBinary == 'B'))
       Radix = 2;
-    }
 
-    if (Radix) {
+    if (Radix == 2 || Radix == 16) {
       StringRef Result(TokStart, CurPtr - TokStart);
       APInt Value(128, 0, true);
 
       if (Result.drop_back().getAsInteger(Radix, Value))
-        return ReturnError(TokStart, "invalid " + radixName(Radix) + " number");
+        return ReturnError(TokStart, Radix == 2 ? "invalid binary number" :
+                             "invalid hexdecimal number");
 
       // MSVC accepts and ignores type suffices on integer literals.
       SkipIgnoredIntegerSuffix(CurPtr);
 
       return intToken(Result, Value);
-    }
+   }
 
-    // default-radix integers, or floating point numbers, fall through
+    // octal/decimal integers, or floating point numbers, fall through
     CurPtr = OldCurPtr;
   }
 
-  // MASM default-radix integers: [0-9a-fA-F]+
-  // (All other integer literals have a radix specifier.)
-  if (LexMasmIntegers) {
-    CurPtr = findLastDigit(CurPtr, 16);
-    StringRef Result(TokStart, CurPtr - TokStart);
-
-    APInt Value(128, 0, true);
-    if (Result.getAsInteger(DefaultRadix, Value)) {
-      return ReturnError(TokStart,
-                         "invalid " + radixName(DefaultRadix) + " number");
-    }
-
-    return intToken(Result, Value);
-  }
-
   // Decimal integer: [1-9][0-9]*
   if (CurPtr[-1] != '0' || CurPtr[0] == '.') {
     unsigned Radix = doHexLookAhead(CurPtr, 10, LexMasmIntegers);
@@ -425,9 +339,13 @@ AsmToken AsmLexer::LexDigit() {
     StringRef Result(TokStart, CurPtr - TokStart);
 
     APInt Value(128, 0, true);
-    if (Result.getAsInteger(Radix, Value)) {
-      return ReturnError(TokStart, "invalid " + radixName(Radix) + " number");
-    }
+    if (Result.getAsInteger(Radix, Value))
+      return ReturnError(TokStart, !isHex ? "invalid decimal number" :
+                           "invalid hexdecimal number");
+
+    // Consume the [hH].
+    if (LexMasmIntegers && Radix == 16)
+      ++CurPtr;
 
     // The darwin/x86 (and x86-64) assembler accepts and ignores type
     // suffices on integer literals.
@@ -498,9 +416,11 @@ AsmToken AsmLexer::LexDigit() {
   // Either octal or hexadecimal.
   APInt Value(128, 0, true);
   unsigned Radix = doHexLookAhead(CurPtr, 8, LexMasmIntegers);
+  bool isHex = Radix == 16;
   StringRef Result(TokStart, CurPtr - TokStart);
   if (Result.getAsInteger(Radix, Value))
-    return ReturnError(TokStart, "invalid " + radixName(Radix) + " number");
+    return ReturnError(TokStart, !isHex ? "invalid octal number" :
+                       "invalid hexdecimal number");
 
   // Consume the [hH].
   if (Radix == 16)

diff  --git a/llvm/lib/MC/MCParser/COFFMasmParser.cpp b/llvm/lib/MC/MCParser/COFFMasmParser.cpp
index 575e6ee265c8..532ded038043 100644
--- a/llvm/lib/MC/MCParser/COFFMasmParser.cpp
+++ b/llvm/lib/MC/MCParser/COFFMasmParser.cpp
@@ -132,6 +132,7 @@ class COFFMasmParser : public MCAsmParserExtension {
     // option
     // popcontext
     // pushcontext
+    // .radix
     // .safeseh
 
     // Procedure directives

diff  --git a/llvm/lib/MC/MCParser/MasmParser.cpp b/llvm/lib/MC/MCParser/MasmParser.cpp
index cdefc062c7dc..ca9b2df7cf23 100644
--- a/llvm/lib/MC/MCParser/MasmParser.cpp
+++ b/llvm/lib/MC/MCParser/MasmParser.cpp
@@ -732,7 +732,6 @@ class MasmParser : public MCAsmParser {
     DK_SAVEREG,
     DK_SAVEXMM128,
     DK_SETFRAME,
-    DK_RADIX,
   };
 
   /// Maps directive name --> DirectiveKind enum, for directives parsed by this
@@ -965,9 +964,6 @@ class MasmParser : public MCAsmParser {
   // ".erre" or ".errnz", depending on ExpectZero.
   bool parseDirectiveErrorIfe(SMLoc DirectiveLoc, bool ExpectZero);
 
-  // ".radix"
-  bool parseDirectiveRadix(SMLoc DirectiveLoc);
-
   // "echo"
   bool parseDirectiveEcho();
 
@@ -2288,8 +2284,6 @@ bool MasmParser::parseStatement(ParseStatementInfo &Info,
       return parseDirectiveErrorIfe(IDLoc, true);
     case DK_ERRNZ:
       return parseDirectiveErrorIfe(IDLoc, false);
-    case DK_RADIX:
-      return parseDirectiveRadix(IDLoc);
     case DK_ECHO:
       return parseDirectiveEcho();
     }
@@ -6349,7 +6343,6 @@ void MasmParser::initializeDirectiveKindMap() {
   DirectiveKindMap[".savereg"] = DK_SAVEREG;
   DirectiveKindMap[".savexmm128"] = DK_SAVEXMM128;
   DirectiveKindMap[".setframe"] = DK_SETFRAME;
-  DirectiveKindMap[".radix"] = DK_RADIX;
   // DirectiveKindMap[".altmacro"] = DK_ALTMACRO;
   // DirectiveKindMap[".noaltmacro"] = DK_NOALTMACRO;
   DirectiveKindMap["db"] = DK_DB;
@@ -6591,22 +6584,6 @@ bool MasmParser::parseDirectiveMSAlign(SMLoc IDLoc, ParseStatementInfo &Info) {
   return false;
 }
 
-bool MasmParser::parseDirectiveRadix(SMLoc DirectiveLoc) {
-  const SMLoc Loc = getLexer().getLoc();
-  StringRef RadixString = parseStringToEndOfStatement().trim();
-  unsigned Radix;
-  if (RadixString.getAsInteger(10, Radix)) {
-    return Error(Loc,
-                 "radix must be a decimal number in the range 2 to 16; was " +
-                     RadixString);
-  }
-  if (Radix < 2 || Radix > 16)
-    return Error(Loc, "radix must be in the range 2 to 16; was " +
-                          std::to_string(Radix));
-  getLexer().setDefaultRadix(Radix);
-  return false;
-}
-
 bool MasmParser::parseDirectiveEcho() {
   StringRef Message = parseStringToEndOfStatement();
   Lex();  // eat end of statement

diff  --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index c07c291c74ee..3270932a76d0 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1662,9 +1662,6 @@ bool X86AsmParser::ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End) {
       if ((Done = SM.isValidEndState()))
         break;
       return Error(Tok.getLoc(), "unknown token in expression");
-    case AsmToken::Error:
-      return Error(getLexer().getErrLoc(), getLexer().getErr());
-      break;
     case AsmToken::EndOfStatement:
       Done = true;
       break;

diff  --git a/llvm/test/tools/llvm-ml/radix.test b/llvm/test/tools/llvm-ml/radix.test
deleted file mode 100644
index 64333706b07d..000000000000
--- a/llvm/test/tools/llvm-ml/radix.test
+++ /dev/null
@@ -1,97 +0,0 @@
-# RUN: llvm-ml -filetype=asm %s | FileCheck %s
-
-.code
-
-t1:
-mov eax, 100b
-mov eax, 100y
-
-; CHECK-LABEL: t1:
-; CHECK-NEXT: mov eax, 4
-; CHECK-NEXT: mov eax, 4
-
-t2:
-mov eax, 100o
-mov eax, 100q
-
-; CHECK-LABEL: t2:
-; CHECK-NEXT: mov eax, 64
-; CHECK-NEXT: mov eax, 64
-
-t3:
-mov eax, 100d
-mov eax, 100t
-
-; CHECK-LABEL: t3:
-; CHECK-NEXT: mov eax, 100
-; CHECK-NEXT: mov eax, 100
-
-t4:
-mov eax, 100h
-
-; CHECK-LABEL: t4:
-; CHECK-NEXT: mov eax, 256
-
-t5:
-mov eax, 100
-.radix 2
-mov eax, 100
-.radix 16
-mov eax, 100
-.radix 10
-mov eax, 100
-
-; CHECK-LABEL: t5:
-; CHECK: mov eax, 100
-; CHECK: mov eax, 4
-; CHECK: mov eax, 256
-; CHECK: mov eax, 100
-
-t6:
-.radix 9
-mov eax, 100
-.radix 10
-
-; CHECK-LABEL: t6:
-; CHECK: mov eax, 81
-
-t7:
-.radix 12
-mov eax, 100b
-mov eax, 100y
-.radix 10
-
-; CHECK-LABEL: t7:
-; CHECK: mov eax, 1739
-; CHECK: mov eax, 4
-
-t8:
-.radix 16
-mov eax, 100d
-mov eax, 100t
-.radix 10
-
-; CHECK-LABEL: t8:
-; CHECK: mov eax, 4109
-; CHECK: mov eax, 100
-
-t9:
-.radix 12
-mov eax, 102b
-.radix 16
-mov eax, 10fd
-.radix 10
-
-; CHECK-LABEL: t9:
-; CHECK: mov eax, 1763
-; CHECK: mov eax, 4349
-
-t10:
-.radix 16
-mov eax, 1e1
-.radix 10
-
-; CHECK-LABEL: t10:
-; CHECK: mov eax, 481
-
-END

diff  --git a/llvm/test/tools/llvm-ml/radix_errors.test b/llvm/test/tools/llvm-ml/radix_errors.test
deleted file mode 100644
index c3a327c4c60d..000000000000
--- a/llvm/test/tools/llvm-ml/radix_errors.test
+++ /dev/null
@@ -1,60 +0,0 @@
-; RUN: not llvm-ml -filetype=asm %s 2>&1 | FileCheck %s
-
-.code
-
-t1:
-mov eax, 120b
-mov eax, 120y
-.radix 11
-mov eax, 120b
-mov eax, 120y
-.radix 10
-
-; CHECK: error: invalid decimal number
-; CHECK: error: invalid binary number
-; CHECK: error: invalid base-11 number
-; CHECK: error: invalid binary number
-
-t2:
-mov eax, 190o
-mov eax, 190q
-.radix 13
-mov eax, 190o
-mov eax, 190q
-.radix 10
-
-; CHECK: error: invalid octal number
-; CHECK: error: invalid octal number
-; CHECK: error: invalid octal number
-; CHECK: error: invalid octal number
-
-t3:
-mov eax, 1f0d
-mov eax, 1f0t
-.radix 13
-mov eax, 1f0d
-mov eax, 1f0t
-.radix 10
-
-; CHECK: error: invalid decimal number
-; CHECK: error: invalid decimal number
-; CHECK: error: invalid base-13 number
-; CHECK: error: invalid decimal number
-
-t4:
-mov eax, 10e
-.radix 16
-.radix 10
-mov eax, 10e
-
-; CHECK: error: invalid decimal number
-; CHECK: error: invalid decimal number
-
-t5:
-.radix 9
-mov eax, 9
-.radix 10
-
-; CHECK: error: invalid base-9 number
-
-END


        


More information about the llvm-commits mailing list