summaryrefslogtreecommitdiffstats
path: root/llvm/test/MachineVerifier
diff options
context:
space:
mode:
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>2019-11-19 12:34:49 +0100
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>2020-01-08 16:58:54 -0800
commit659efa21f1b3eded304b7239b356eecf1f5034ae (patch)
treecf7c44291ca2405ca6f1127aca0d1939e5122512 /llvm/test/MachineVerifier
parent85ee4ff4e474788abc7abdc939114281c2a68ec1 (diff)
downloadbcm5719-llvm-659efa21f1b3eded304b7239b356eecf1f5034ae.tar.gz
bcm5719-llvm-659efa21f1b3eded304b7239b356eecf1f5034ae.zip
Recommit "[MachineVerifier] Improve verification of live-in lists."
MachineVerifier::visitMachineFunctionAfter() is extended to check the live-through case for live-in lists. This is only done for registers without aliases and that are neither allocatable or reserved, such as the SystemZ::CC register. The MachineVerifier earlier only catched the case of a live-in use without an entry in the live-in list (as "using an undefined physical register"). A comment in LivePhysRegs.h has been added stating a guarantee that addLiveOuts() can be trusted for a full register both before and after register allocation. Review: Quentin Colombet Differential Revision: https://reviews.llvm.org/D68267
Diffstat (limited to 'llvm/test/MachineVerifier')
-rw-r--r--llvm/test/MachineVerifier/live-ins-01.mir57
-rw-r--r--llvm/test/MachineVerifier/live-ins-02.mir32
-rw-r--r--llvm/test/MachineVerifier/live-ins-03.mir36
3 files changed, 125 insertions, 0 deletions
diff --git a/llvm/test/MachineVerifier/live-ins-01.mir b/llvm/test/MachineVerifier/live-ins-01.mir
new file mode 100644
index 00000000000..51c05dacf05
--- /dev/null
+++ b/llvm/test/MachineVerifier/live-ins-01.mir
@@ -0,0 +1,57 @@
+# RUN: not llc -o - %s -mtriple=s390x-linux-gnu -mcpu=z14 -run-pass none 2>&1 | FileCheck %s
+# REQUIRES: systemz-registered-target
+
+# Test that a the machine verifier reports an error when a register in
+# liveins is not liveout from predecessor.
+
+---
+name: f1
+tracksRegLiveness: true
+machineFunctionInfo: {}
+body: |
+ bb.0:
+ liveins: $r2l, $r3l
+
+ %1:gr32bit = COPY $r3l
+ %0:gr32bit = COPY $r2l
+ CHIMux %0, 0, implicit-def $cc
+
+ bb.1:
+ liveins: $cc
+
+ bb.2:
+ liveins: $cc
+
+ %2:grx32bit = LOCRMux %1, %0, 14, 8, implicit $cc
+ $r2l = COPY %2
+ Return implicit $r2l
+...
+
+# CHECK: *** Bad machine code: Live in register not found to be live out from predecessor. ***
+# CHECK:- function: f2
+# CHECK:- basic block: %bb.2
+# CHECK:CC not found to be live out from %bb.1
+---
+name: f2
+tracksRegLiveness: true
+machineFunctionInfo: {}
+body: |
+ bb.0:
+ liveins: $r2l, $r3l
+
+ %1:gr32bit = COPY $r3l
+ %0:gr32bit = COPY $r2l
+ CHIMux %0, 0, implicit-def $cc
+
+ bb.1:
+ liveins: $cc
+ KILL killed $cc
+
+ bb.2:
+ liveins: $cc
+
+ %2:grx32bit = LOCRMux %1, %0, 14, 8, implicit $cc
+ $r2l = COPY %2
+ Return implicit $r2l
+
+...
diff --git a/llvm/test/MachineVerifier/live-ins-02.mir b/llvm/test/MachineVerifier/live-ins-02.mir
new file mode 100644
index 00000000000..d76325cdd10
--- /dev/null
+++ b/llvm/test/MachineVerifier/live-ins-02.mir
@@ -0,0 +1,32 @@
+# RUN: not llc -o - %s -mtriple=s390x-linux-gnu -mcpu=z14 -run-pass none 2>&1 | FileCheck %s
+# REQUIRES: systemz-registered-target
+
+# Test that a the machine verifier reports an error when a register in
+# liveins is not liveout from predecessor.
+
+---
+name: f1
+tracksRegLiveness: true
+machineFunctionInfo: {}
+body: |
+ bb.0:
+ liveins: $r2l, $r3l
+
+ %1:gr32bit = COPY $r3l
+ %0:gr32bit = COPY $r2l
+ CHIMux %0, 0, implicit-def $cc
+
+ bb.1:
+
+ bb.2:
+ liveins: $cc
+
+ %2:grx32bit = LOCRMux %1, %0, 14, 8, implicit $cc
+ $r2l = COPY %2
+ Return implicit $r2l
+...
+
+# CHECK: *** Bad machine code: Live in register not found to be live out from predecessor. ***
+# CHECK:- function: f1
+# CHECK:- basic block: %bb.2
+# CHECK:CC not found to be live out from %bb.1
diff --git a/llvm/test/MachineVerifier/live-ins-03.mir b/llvm/test/MachineVerifier/live-ins-03.mir
new file mode 100644
index 00000000000..b5345ccdc3b
--- /dev/null
+++ b/llvm/test/MachineVerifier/live-ins-03.mir
@@ -0,0 +1,36 @@
+# RUN: not llc -o - %s -mtriple=s390x-linux-gnu -mcpu=z14 -run-pass none 2>&1 | FileCheck %s
+# REQUIRES: systemz-registered-target
+
+# Test that a the machine verifier reports an error when a register in
+# liveins is not liveout from predecessor.
+
+---
+name: f1
+tracksRegLiveness: true
+machineFunctionInfo: {}
+body: |
+ bb.0:
+ liveins: $r2l, $r3l
+
+ %1:gr32bit = COPY $r3l
+ %0:gr32bit = COPY $r2l
+ CHIMux %0, 0, implicit-def $cc
+
+ bb.1:
+ liveins: $cc
+ BRC 14, 8, %bb.3, implicit $cc
+
+ bb.2:
+
+ bb.3:
+ liveins: $cc
+
+ %2:grx32bit = LOCRMux %1, %0, 14, 8, implicit $cc
+ $r2l = COPY %2
+ Return implicit $r2l
+...
+
+# CHECK: *** Bad machine code: Live in register not found to be live out from predecessor. ***
+# CHECK:- function: f1
+# CHECK:- basic block: %bb.3
+# CHECK:CC not found to be live out from %bb.2
OpenPOWER on IntegriCloud