summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Braun <matze@braunis.de>2016-11-10 23:46:44 +0000
committerMatthias Braun <matze@braunis.de>2016-11-10 23:46:44 +0000
commitf29b12dca83ab27bcfe697c4f990ca2391c41681 (patch)
tree44e2de2cc8f7e23c4ab021b5efa505b7650dd99e
parentff82547f98e153646205168f4e072abfd72f0f21 (diff)
downloadbcm5719-llvm-f29b12dca83ab27bcfe697c4f990ca2391c41681.tar.gz
bcm5719-llvm-f29b12dca83ab27bcfe697c4f990ca2391c41681.zip
ScheduleDAGInstrs: Ignore dependencies of constant physregs
There is no need to track dependencies for constant physregs, as they don't change their value no matter in what order you read/write to them. Differential Revision: https://reviews.llvm.org/D26221 llvm-svn: 286526
-rw-r--r--llvm/lib/CodeGen/ScheduleDAGInstrs.cpp3
-rw-r--r--llvm/test/CodeGen/AArch64/machine_cse_impdef_killflags.ll4
-rw-r--r--llvm/test/CodeGen/AArch64/scheduledag-constreg.mir29
-rw-r--r--llvm/test/CodeGen/AArch64/subs-to-sub-opt.ll2
4 files changed, 35 insertions, 3 deletions
diff --git a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
index d184c0e240f..a9b5e88e5b4 100644
--- a/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
+++ b/llvm/lib/CodeGen/ScheduleDAGInstrs.cpp
@@ -323,6 +323,9 @@ void ScheduleDAGInstrs::addPhysRegDeps(SUnit *SU, unsigned OperIdx) {
MachineInstr *MI = SU->getInstr();
MachineOperand &MO = MI->getOperand(OperIdx);
unsigned Reg = MO.getReg();
+ // We do not need to track any dependencies for constant registers.
+ if (MRI.isConstantPhysReg(Reg))
+ return;
// Optionally add output and anti dependencies. For anti
// dependencies we use a latency of 0 because for a multi-issue
diff --git a/llvm/test/CodeGen/AArch64/machine_cse_impdef_killflags.ll b/llvm/test/CodeGen/AArch64/machine_cse_impdef_killflags.ll
index a3ee2b0069c..f1cd21dce45 100644
--- a/llvm/test/CodeGen/AArch64/machine_cse_impdef_killflags.ll
+++ b/llvm/test/CodeGen/AArch64/machine_cse_impdef_killflags.ll
@@ -8,8 +8,8 @@ define i64 @csed-impdef-killflag(i64 %a) {
; CHECK-DAG: orr [[REG1:w[0-9]+]], wzr, #0x1
; CHECK-DAG: orr [[REG2:x[0-9]+]], xzr, #0x2
; CHECK-DAG: orr [[REG3:x[0-9]+]], xzr, #0x3
-; CHECK: cmp x0, #0
-; CHECK-DAG: csel w[[SELECT_WREG_1:[0-9]+]], wzr, [[REG1]], ne
+; CHECK-DAG: cmp x0, #0
+; CHECK: csel w[[SELECT_WREG_1:[0-9]+]], wzr, [[REG1]], ne
; CHECK-DAG: csel [[SELECT_XREG_2:x[0-9]+]], [[REG2]], [[REG3]], ne
; CHECK: ubfx [[SELECT_XREG_1:x[0-9]+]], x[[SELECT_WREG_1]], #0, #32
; CHECK-NEXT: add x0, [[SELECT_XREG_2]], [[SELECT_XREG_1]]
diff --git a/llvm/test/CodeGen/AArch64/scheduledag-constreg.mir b/llvm/test/CodeGen/AArch64/scheduledag-constreg.mir
new file mode 100644
index 00000000000..23c785504f0
--- /dev/null
+++ b/llvm/test/CodeGen/AArch64/scheduledag-constreg.mir
@@ -0,0 +1,29 @@
+# RUN: llc -o /dev/null %s -mtriple=aarch64-- -run-pass=machine-scheduler -enable-misched -debug-only=misched 2>&1 | FileCheck %s
+# REQUIRES: asserts
+--- |
+ define void @func() { ret void }
+...
+---
+# Check that the instructions are not dependent on each other, even though
+# they all read/write to the zero register.
+# CHECK-LABEL: MI Scheduling
+# CHECK: SU(0): %WZR<def,dead> = SUBSWri %W1, 0, 0, %NZCV<imp-def,dead>
+# CHECK: # succs left : 0
+# CHECK-NOT: Successors:
+# CHECK: SU(1): %W2<def> = COPY %WZR
+# CHECK: # succs left : 0
+# CHECK-NOT: Successors:
+# CHECK: SU(2): %WZR<def,dead> = SUBSWri %W3, 0, 0, %NZCV<imp-def,dead>
+# CHECK: # succs left : 0
+# CHECK-NOT: Successors:
+# CHECK: SU(3): %W4<def> = COPY %WZR
+# CHECK: # succs left : 0
+# CHECK-NOT: Successors:
+name: func
+body: |
+ bb.0:
+ dead %wzr = SUBSWri %w1, 0, 0, implicit-def dead %nzcv
+ %w2 = COPY %wzr
+ dead %wzr = SUBSWri %w3, 0, 0, implicit-def dead %nzcv
+ %w4 = COPY %wzr
+...
diff --git a/llvm/test/CodeGen/AArch64/subs-to-sub-opt.ll b/llvm/test/CodeGen/AArch64/subs-to-sub-opt.ll
index f33e24e777f..ce544d351c8 100644
--- a/llvm/test/CodeGen/AArch64/subs-to-sub-opt.ll
+++ b/llvm/test/CodeGen/AArch64/subs-to-sub-opt.ll
@@ -7,7 +7,7 @@
define i32 @test01() nounwind {
; CHECK: ldrb {{.*}}
; CHECK-NEXT: ldrb {{.*}}
-; CHECK-NEXT: sub {{.*}}
+; CHECK: sub {{.*}}
; CHECK-NEXT: cmn {{.*}}
entry:
%0 = load i8, i8* @a, align 1
OpenPOWER on IntegriCloud