[Hexagon] Some compound opportunities missed in presence of branches
authorColin LeMahieu <colinl@codeaurora.org>
Thu, 6 Jan 2022 17:24:31 +0000 (09:24 -0800)
committerKrzysztof Parzyszek <kparzysz@quicinc.com>
Thu, 6 Jan 2022 22:16:23 +0000 (14:16 -0800)
The lld testcase change from ddf1fb1f should take care of the build
breakage from before.

llvm/lib/Target/Hexagon/MCTargetDesc/HexagonMCCompound.cpp
llvm/test/MC/Hexagon/bug28416.s [new file with mode: 0644]

index 4bb078f..3deef95 100644 (file)
@@ -365,8 +365,10 @@ static bool lookForCompound(MCInstrInfo const &MCII, MCContext &Context,
                MCI.begin() + HexagonMCInstrInfo::bundleInstructionsOffset;
            B != MCI.end(); ++B) {
         MCInst const *Inst = B->getInst();
-        if (JumpInst == Inst)
+        if (JumpInst == Inst) {
+          BExtended = false;
           continue;
+        }
         if (HexagonMCInstrInfo::isImmext(*Inst)) {
           BExtended = true;
           continue;
diff --git a/llvm/test/MC/Hexagon/bug28416.s b/llvm/test/MC/Hexagon/bug28416.s
new file mode 100644 (file)
index 0000000..237d577
--- /dev/null
@@ -0,0 +1,11 @@
+# RUN: llvm-mc -arch=hexagon -filetype=obj -o - %s | llvm-objdump -d -
+# r0 = r6 and jump ##undefined should compound to J4_jumpsetr
+
+# CHECK: { immext(#0)
+# CHECK:   r0 = r6 ; jump 0x0
+# CHECK:   r1 = memub(r6+#21)
+# CHECK:   memw(r9+#0) = r0 }
+{  memw(r9) = r0
+   r0 = r6
+   r1 = memub(r6+#21)
+   jump ##undefined }