[llvm] r228109 - Fix some unnoticed/unwanted behavior change from r222319.

Frederic Riss friss at apple.com
Tue Feb 3 19:10:04 PST 2015


Author: friss
Date: Tue Feb  3 21:10:03 2015
New Revision: 228109

URL: http://llvm.org/viewvc/llvm-project?rev=228109&view=rev
Log:
Fix some unnoticed/unwanted behavior change from r222319.

The ARM assembler allows register alias redefinitions as long as it
targets the same register. r222319 broke that. In the AArch64 case
it would just produce a new warning, but in the ARM case it would
error out on previously accepted assembler.

Modified:
    llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
    llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp
    llvm/trunk/test/MC/AArch64/dot-req.s
    llvm/trunk/test/MC/ARM/dot-req.s

Modified: llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp?rev=228109&r1=228108&r2=228109&view=diff
==============================================================================
--- llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp (original)
+++ llvm/trunk/lib/Target/AArch64/AsmParser/AArch64AsmParser.cpp Tue Feb  3 21:10:03 2015
@@ -4132,7 +4132,7 @@ bool AArch64AsmParser::parseDirectiveReq
   Parser.Lex(); // Consume the EndOfStatement
 
   auto pair = std::make_pair(IsVector, RegNum);
-  if (!RegisterReqs.insert(std::make_pair(Name, pair)).second)
+  if (RegisterReqs.insert(std::make_pair(Name, pair)).first->second != pair)
     Warning(L, "ignoring redefinition of register alias '" + Name + "'");
 
   return true;

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=228109&r1=228108&r2=228109&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/ARM/AsmParser/ARMAsmParser.cpp Tue Feb  3 21:10:03 2015
@@ -9010,7 +9010,7 @@ bool ARMAsmParser::parseDirectiveReq(Str
 
   Parser.Lex(); // Consume the EndOfStatement
 
-  if (!RegisterReqs.insert(std::make_pair(Name, Reg)).second) {
+  if (RegisterReqs.insert(std::make_pair(Name, Reg)).first->second != Reg) {
     Error(SRegLoc, "redefinition of '" + Name + "' does not match original.");
     return false;
   }

Modified: llvm/trunk/test/MC/AArch64/dot-req.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/AArch64/dot-req.s?rev=228109&r1=228108&r2=228109&view=diff
==============================================================================
--- llvm/trunk/test/MC/AArch64/dot-req.s (original)
+++ llvm/trunk/test/MC/AArch64/dot-req.s Tue Feb  3 21:10:03 2015
@@ -1,7 +1,9 @@
-// RUN: llvm-mc -triple=aarch64-none-linux-gnu -show-encoding < %s | FileCheck %s
+// RUN: llvm-mc -triple=aarch64-none-linux-gnu -show-encoding < %s 2>&1 | FileCheck %s
 
 bar:
         fred .req x5
+// CHECK-NOT: ignoring redefinition of register alias 'fred'
+        fred .req x5
         mov fred, x11
         .unreq fred
         fred .req w6

Modified: llvm/trunk/test/MC/ARM/dot-req.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/ARM/dot-req.s?rev=228109&r1=228108&r2=228109&view=diff
==============================================================================
--- llvm/trunk/test/MC/ARM/dot-req.s (original)
+++ llvm/trunk/test/MC/ARM/dot-req.s Tue Feb  3 21:10:03 2015
@@ -1,6 +1,9 @@
 @ RUN: llvm-mc -triple=armv7-apple-darwin -show-encoding < %s | FileCheck %s
         .syntax unified
 bar:
+@ The line is duplicated on purpose, it is legal to redefine a req with
+@ the same value.
+fred .req r5
 fred .req r5
         mov r11, fred
 .unreq fred





More information about the llvm-commits mailing list