[llvm] r328870 - [Hexagon] Recognize and handle :endloop01

Krzysztof Parzyszek via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 30 08:29:47 PDT 2018


Author: kparzysz
Date: Fri Mar 30 08:29:47 2018
New Revision: 328870

URL: http://llvm.org/viewvc/llvm-project?rev=328870&view=rev
Log:
[Hexagon] Recognize and handle :endloop01

Modified:
    llvm/trunk/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
    llvm/trunk/lib/Target/Hexagon/HexagonPseudo.td
    llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonInstPrinter.cpp
    llvm/trunk/test/MC/Hexagon/capitalizedEndloop.s

Modified: llvm/trunk/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp?rev=328870&r1=328869&r2=328870&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/AsmParser/HexagonAsmParser.cpp Fri Mar 30 08:29:47 2018
@@ -506,16 +506,19 @@ bool HexagonAsmParser::matchBundleOption
         "supported with this architecture";
     StringRef Option = Parser.getTok().getString();
     auto IDLoc = Parser.getTok().getLoc();
-    if (Option.compare_lower("endloop0") == 0)
+    if (Option.compare_lower("endloop01") == 0) {
       HexagonMCInstrInfo::setInnerLoop(MCB);
-    else if (Option.compare_lower("endloop1") == 0)
       HexagonMCInstrInfo::setOuterLoop(MCB);
-    else if (Option.compare_lower("mem_noshuf") == 0)
+    } else if (Option.compare_lower("endloop0") == 0) {
+      HexagonMCInstrInfo::setInnerLoop(MCB);
+    } else if (Option.compare_lower("endloop1") == 0) {
+      HexagonMCInstrInfo::setOuterLoop(MCB);
+    } else if (Option.compare_lower("mem_noshuf") == 0) {
       if (getSTI().getFeatureBits()[Hexagon::FeatureMemNoShuf])
         HexagonMCInstrInfo::setMemReorderDisabled(MCB);
       else
         return getParser().Error(IDLoc, MemNoShuffMsg);
-    else
+    } else
       return getParser().Error(IDLoc, llvm::Twine("'") + Option +
                                           "' is not a valid bundle option");
     Lex();

Modified: llvm/trunk/lib/Target/Hexagon/HexagonPseudo.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/HexagonPseudo.td?rev=328870&r1=328869&r2=328870&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/HexagonPseudo.td (original)
+++ llvm/trunk/lib/Target/Hexagon/HexagonPseudo.td Fri Mar 30 08:29:47 2018
@@ -102,6 +102,13 @@ def ENDLOOP1 : Endloop<(outs), (ins b30_
                        []>;
 }
 
+let isBranch = 1, isTerminator = 1, hasSideEffects = 0,
+    Defs = [PC, LC0, LC1], Uses = [SA0, SA1, LC0, LC1] in {
+def ENDLOOP01 : Endloop<(outs), (ins b30_2Imm:$offset),
+                        ":endloop01",
+                        []>;
+}
+
 let isExtendable = 1, isExtentSigned = 1, opExtentBits = 9, opExtentAlign = 2,
     opExtendable = 0, hasSideEffects = 0 in
 class LOOP_iBase<string mnemonic, InstHexagon rootInst>

Modified: llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonInstPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonInstPrinter.cpp?rev=328870&r1=328869&r2=328870&view=diff
==============================================================================
--- llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonInstPrinter.cpp (original)
+++ llvm/trunk/lib/Target/Hexagon/MCTargetDesc/HexagonInstPrinter.cpp Fri Mar 30 08:29:47 2018
@@ -69,16 +69,17 @@ void HexagonInstPrinter::printInst(const
     OS << "\n";
   }
 
-  auto Separator = "";
   if (HexagonMCInstrInfo::isInnerLoop(*MI)) {
-    OS << Separator;
-    Separator = " ";
-    MCInst ME;
-    ME.setOpcode(Hexagon::ENDLOOP0);
-    printInstruction(&ME, OS);
-  }
-  if (HexagonMCInstrInfo::isOuterLoop(*MI)) {
-    OS << Separator;
+    if (HexagonMCInstrInfo::isOuterLoop(*MI)) {
+      MCInst ME;
+      ME.setOpcode(Hexagon::ENDLOOP01);
+      printInstruction(&ME, OS);
+    } else {
+      MCInst ME;
+      ME.setOpcode(Hexagon::ENDLOOP0);
+      printInstruction(&ME, OS);
+    }
+  } else if (HexagonMCInstrInfo::isOuterLoop(*MI)) {
     MCInst ME;
     ME.setOpcode(Hexagon::ENDLOOP1);
     printInstruction(&ME, OS);

Modified: llvm/trunk/test/MC/Hexagon/capitalizedEndloop.s
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/MC/Hexagon/capitalizedEndloop.s?rev=328870&r1=328869&r2=328870&view=diff
==============================================================================
--- llvm/trunk/test/MC/Hexagon/capitalizedEndloop.s (original)
+++ llvm/trunk/test/MC/Hexagon/capitalizedEndloop.s Fri Mar 30 08:29:47 2018
@@ -11,6 +11,10 @@
 	{ R0 = mpyi(R0,R0) } : ENDLOOP1
 	{ R0 = mpyi(R0,R0) }:endloop1
 
+	{ R0 = mpyi(R0,R0) } : endloop01
+	{ R0 = mpyi(R0,R0) } : ENDLOOP01
+	{ R0 = mpyi(R0,R0) }:endloop01
+
 	{ R0 = mpyi(R0,R0) } : endloop0 : endloop1
 	{ R0 = mpyi(R0,R0) } : ENDLOOP0 : ENDLOOP1
 	{ R0 = mpyi(R0,R0) }:endloop0:endloop1
@@ -22,8 +26,11 @@
 # CHECK: :endloop1
 # CHECK: :endloop1
 # CHECK: :endloop1
-# CHECK: :endloop0 :endloop1
-# CHECK: :endloop0 :endloop1
-# CHECK: :endloop0 :endloop1
+# CHECK: :endloop01
+# CHECK: :endloop01
+# CHECK: :endloop01
+# CHECK: :endloop01
+# CHECK: :endloop01
+# CHECK: :endloop01
 
 




More information about the llvm-commits mailing list