summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/SystemZ
diff options
context:
space:
mode:
authorJonas Paulsson <paulsson@linux.vnet.ibm.com>2018-01-15 15:41:26 +0000
committerJonas Paulsson <paulsson@linux.vnet.ibm.com>2018-01-15 15:41:26 +0000
commit776a81a483da73b52f8d73ce441b0f03dbf5411b (patch)
tree741f6d0c18061180376d244be6a0d01830cfab21 /llvm/test/CodeGen/SystemZ
parent264a683ec89b676fabce9ebdce671a86859caa73 (diff)
downloadbcm5719-llvm-776a81a483da73b52f8d73ce441b0f03dbf5411b.tar.gz
bcm5719-llvm-776a81a483da73b52f8d73ce441b0f03dbf5411b.zip
[SystemZ] Check for legality before doing LOAD AND TEST transformations.
Since a load and test instruction treat its operands as signed, it can only replace a logical compare for EQ/NE uses. Review: Ulrich Weigand https://bugs.llvm.org/show_bug.cgi?id=35662 llvm-svn: 322488
Diffstat (limited to 'llvm/test/CodeGen/SystemZ')
-rw-r--r--llvm/test/CodeGen/SystemZ/load-and-test.mir52
1 files changed, 52 insertions, 0 deletions
diff --git a/llvm/test/CodeGen/SystemZ/load-and-test.mir b/llvm/test/CodeGen/SystemZ/load-and-test.mir
new file mode 100644
index 00000000000..da01dbc79a9
--- /dev/null
+++ b/llvm/test/CodeGen/SystemZ/load-and-test.mir
@@ -0,0 +1,52 @@
+# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 -start-before=postrapseudos %s -o - \
+# RUN: | FileCheck %s
+#
+# Check that integer load and test instructions are not emitted for unsigned
+# comparisons unless checking for equality. That would be wrong, since the
+# operands are implicitly treated as signed values.
+
+# Not legal: Logical comparison used for >= (CCMask is 10).
+# CHECK-LABEL: fun0
+# CHECK-NOT: lt
+---
+name: fun0
+tracksRegLiveness: true
+body: |
+ bb.0 ():
+ liveins: %r1d
+ renamable %r0l = L %r1d, 0, %noreg
+ CLFIMux killed renamable %r0l, 0, implicit-def %cc
+ BRC 14, 10, %bb.2, implicit %cc
+
+ bb.1 ():
+ liveins: %r0l
+ ST killed renamable %r0l, %r15d, 164, %noreg
+
+ bb.2 ():
+ liveins: %r0l
+ ST killed renamable %r0l, %r15d, 164, %noreg
+ Return
+...
+
+# Legal: Logical comparison used for == (CCMask is 8).
+# CHECK-LABEL: fun1
+# CHECK: lt
+---
+name: fun1
+tracksRegLiveness: true
+body: |
+ bb.0 ():
+ liveins: %r1d
+ renamable %r0l = L %r1d, 0, %noreg
+ CLFIMux killed renamable %r0l, 0, implicit-def %cc
+ BRC 14, 8, %bb.2, implicit %cc
+
+ bb.1 ():
+ liveins: %r0l
+ ST killed renamable %r0l, %r15d, 164, %noreg
+
+ bb.2 ():
+ liveins: %r0l
+ ST killed renamable %r0l, %r15d, 164, %noreg
+ Return
+...
OpenPOWER on IntegriCloud