summaryrefslogtreecommitdiffstats
path: root/llvm/test/CodeGen/SystemZ/int-cmp-10.ll
diff options
context:
space:
mode:
authorRichard Sandiford <rsandifo@linux.vnet.ibm.com>2013-09-18 09:56:40 +0000
committerRichard Sandiford <rsandifo@linux.vnet.ibm.com>2013-09-18 09:56:40 +0000
commit93183ee78c5850cc475f537ca14dd0a83c009bbf (patch)
treeac2d3378a8e73e7b26f3e3d53df6604e64cf2e0d /llvm/test/CodeGen/SystemZ/int-cmp-10.ll
parent36b2e5de3c3333507dd6d0cd4684859ce0cc010a (diff)
downloadbcm5719-llvm-93183ee78c5850cc475f537ca14dd0a83c009bbf.tar.gz
bcm5719-llvm-93183ee78c5850cc475f537ca14dd0a83c009bbf.zip
[SystemZ] Add unsigned compare-and-branch instructions
For some reason I never got around to adding these at the same time as the signed versions. No idea why. I'm not sure whether this SystemZII::BranchC* stuff is useful, or whether it should just be replaced with an "is normal" flag. I'll leave that for later though. There are some boundary conditions that can be tweaked, such as preferring unsigned comparisons for equality with [128, 256), and "<= 255" over "< 256", but again I'll leave those for a separate patch. llvm-svn: 190930
Diffstat (limited to 'llvm/test/CodeGen/SystemZ/int-cmp-10.ll')
-rw-r--r--llvm/test/CodeGen/SystemZ/int-cmp-10.ll32
1 files changed, 27 insertions, 5 deletions
diff --git a/llvm/test/CodeGen/SystemZ/int-cmp-10.ll b/llvm/test/CodeGen/SystemZ/int-cmp-10.ll
index e30e014319d..4d4c4bbd20d 100644
--- a/llvm/test/CodeGen/SystemZ/int-cmp-10.ll
+++ b/llvm/test/CodeGen/SystemZ/int-cmp-10.ll
@@ -2,12 +2,11 @@
;
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
-; Check a value near the low end of the range. We use CFI for comparisons
-; with zero, or things that are equivalent to them.
+; Check a value near the low end of the range. We use signed forms for
+; comparisons with zero, or things that are equivalent to them.
define double @f1(double %a, double %b, i32 %i1) {
; CHECK-LABEL: f1:
-; CHECK: clfi %r2, 1
-; CHECK-NEXT: jh
+; CHECK: clijh %r2, 1
; CHECK: ldr %f0, %f2
; CHECK: br %r14
%cond = icmp ugt i32 %i1, 1
@@ -15,9 +14,32 @@ define double @f1(double %a, double %b, i32 %i1) {
ret double %res
}
-; Check a value near the high end of the range.
+; Check the top of the CLIJ range.
define double @f2(double %a, double %b, i32 %i1) {
; CHECK-LABEL: f2:
+; CHECK: clijl %r2, 255
+; CHECK: ldr %f0, %f2
+; CHECK: br %r14
+ %cond = icmp ult i32 %i1, 255
+ %res = select i1 %cond, double %a, double %b
+ ret double %res
+}
+
+; Check the next value up, which needs a separate comparison.
+define double @f3(double %a, double %b, i32 %i1) {
+; CHECK-LABEL: f3:
+; CHECK: clfi %r2, 256
+; CHECK: jl
+; CHECK: ldr %f0, %f2
+; CHECK: br %r14
+ %cond = icmp ult i32 %i1, 256
+ %res = select i1 %cond, double %a, double %b
+ ret double %res
+}
+
+; Check a value near the high end of the range.
+define double @f4(double %a, double %b, i32 %i1) {
+; CHECK-LABEL: f4:
; CHECK: clfi %r2, 4294967280
; CHECK-NEXT: jl
; CHECK: ldr %f0, %f2
OpenPOWER on IntegriCloud