[PATCH] D66243: [ARM][LowOverheadLoops] Fix generated code for "revert".
Eli Friedman via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Aug 14 12:54:59 PDT 2019
efriedma created this revision.
efriedma added reviewers: samparker, dmgreen, SjoerdMeijer.
Herald added subscribers: kristof.beyls, javed.absar.
Herald added a project: LLVM.
Two issues:
1. t2CMPri shouldn't use CPSR if it isn't predicated. This doesn't really have any visible effect at the moment, but it might matter in the future.
2. The t2CMPri generated for t2WhileLoopStart might need to use a register that isn't LR.
My team found this because we have a patch to track register liveness late in the pass pipeline. I'll look into upstreaming it to help catch issues like this earlier.
Repository:
rL LLVM
https://reviews.llvm.org/D66243
Files:
lib/Target/ARM/ARMLowOverheadLoops.cpp
test/CodeGen/Thumb2/LowOverheadLoops/end-positive-offset.mir
test/CodeGen/Thumb2/LowOverheadLoops/revert-non-loop.mir
test/CodeGen/Thumb2/LowOverheadLoops/revert-while.mir
Index: test/CodeGen/Thumb2/LowOverheadLoops/revert-while.mir
===================================================================
--- test/CodeGen/Thumb2/LowOverheadLoops/revert-while.mir
+++ test/CodeGen/Thumb2/LowOverheadLoops/revert-while.mir
@@ -1,14 +1,14 @@
# RUN: llc -mtriple=thumbv8.1m.main -mattr=+lob -run-pass=arm-low-overhead-loops --verify-machineinstrs %s -o - | FileCheck %s
# CHECK: body:
# CHECK: bb.0.entry:
-# CHECK: t2CMPri $lr, 0, 14
+# CHECK: t2CMPri $r3, 0, 14
# CHECK-NEXT: t2Bcc %bb.3, 0, $cpsr
# CHECK-NEXT: tB %bb.1
# CHECK: bb.1.do.body.preheader:
# CHECK: $lr = tMOVr killed $r3
# CHECK: bb.2.do.body:
# CHECK: $lr = t2SUBri killed renamable $lr, 1, 14
-# CHECK-NEXT: t2CMPri $lr, 0, 14, $cpsr
+# CHECK-NEXT: t2CMPri $lr, 0, 14, $noreg, implicit-def $cpsr
# CHECK-NEXT: t2Bcc %bb.2, 1, $cpsr
# CHECK-NEXT: tB %bb.3, 14
Index: test/CodeGen/Thumb2/LowOverheadLoops/revert-non-loop.mir
===================================================================
--- test/CodeGen/Thumb2/LowOverheadLoops/revert-non-loop.mir
+++ test/CodeGen/Thumb2/LowOverheadLoops/revert-non-loop.mir
@@ -4,7 +4,7 @@
# CHECK: bb.0.entry:
# CHECK: tBcc %bb.2, 3
# CHECK: bb.1.not.preheader:
-# CHECK: t2CMPri $lr, 0, 14
+# CHECK: t2CMPri renamable $lr, 0, 14
# CHECK: t2Bcc %bb.4, 0
# CHECK: tB %bb.2
# CHECK: bb.3.while.body:
Index: test/CodeGen/Thumb2/LowOverheadLoops/end-positive-offset.mir
===================================================================
--- test/CodeGen/Thumb2/LowOverheadLoops/end-positive-offset.mir
+++ test/CodeGen/Thumb2/LowOverheadLoops/end-positive-offset.mir
@@ -3,7 +3,7 @@
# CHECK-NOT: DoLoopStart
# CHECK-NOT: DLS
# CHECK: bb.1.for.body:
-# CHECK: t2CMPri $lr, 0, 14, $cpsr, implicit-def $cpsr
+# CHECK: t2CMPri $lr, 0, 14, $noreg, implicit-def $cpsr
# CHECK: t2Bcc %bb.3, 1, $cpsr
# CHECK: tB %bb.2, 14, $noreg
# CHECK: bb.2.for.cond.cleanup:
Index: lib/Target/ARM/ARMLowOverheadLoops.cpp
===================================================================
--- lib/Target/ARM/ARMLowOverheadLoops.cpp
+++ lib/Target/ARM/ARMLowOverheadLoops.cpp
@@ -251,10 +251,10 @@
MachineBasicBlock *MBB = MI->getParent();
MachineInstrBuilder MIB = BuildMI(*MBB, MI, MI->getDebugLoc(),
TII->get(ARM::t2CMPri));
- MIB.addReg(ARM::LR);
+ MIB.add(MI->getOperand(0));
MIB.addImm(0);
MIB.addImm(ARMCC::AL);
- MIB.addReg(ARM::CPSR);
+ MIB.addReg(ARM::NoRegister);
// TODO: Try to use tBcc instead
MIB = BuildMI(*MBB, MI, MI->getDebugLoc(), TII->get(ARM::t2Bcc));
@@ -292,7 +292,7 @@
MIB.addReg(ARM::LR);
MIB.addImm(0);
MIB.addImm(ARMCC::AL);
- MIB.addReg(ARM::CPSR);
+ MIB.addReg(ARM::NoRegister);
// TODO Try to use tBcc instead.
// Create bne
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66243.215206.patch
Type: text/x-patch
Size: 2844 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190814/0d6613d9/attachment-0001.bin>
More information about the llvm-commits
mailing list