diff options
author | dim <dim@FreeBSD.org> | 2013-06-10 20:36:52 +0000 |
---|---|---|
committer | dim <dim@FreeBSD.org> | 2013-06-10 20:36:52 +0000 |
commit | aa45f148926e3461a1fd8b10c990f0a51a908cc9 (patch) | |
tree | 909310b2e05119d1d6efda049977042abbb58bb1 /test/CodeGen/SystemZ/int-cmp-43.ll | |
parent | 169d2bd06003c39970bc94c99669a34b61bb7e45 (diff) | |
download | FreeBSD-src-aa45f148926e3461a1fd8b10c990f0a51a908cc9.zip FreeBSD-src-aa45f148926e3461a1fd8b10c990f0a51a908cc9.tar.gz |
Vendor import of llvm tags/RELEASE_33/final r183502 (effectively, 3.3
release):
http://llvm.org/svn/llvm-project/llvm/tags/RELEASE_33/final@183502
Diffstat (limited to 'test/CodeGen/SystemZ/int-cmp-43.ll')
-rw-r--r-- | test/CodeGen/SystemZ/int-cmp-43.ll | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/test/CodeGen/SystemZ/int-cmp-43.ll b/test/CodeGen/SystemZ/int-cmp-43.ll new file mode 100644 index 0000000..f387293 --- /dev/null +++ b/test/CodeGen/SystemZ/int-cmp-43.ll @@ -0,0 +1,78 @@ +; Test 64-bit comparisons in which the second operand is a PC-relative +; variable. +; +; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s + +@g = global i64 1 + +; Check signed comparisons. +define i64 @f1(i64 %src1) { +; CHECK: f1: +; CHECK: cgrl %r2, g +; CHECK-NEXT: j{{g?}}l +; CHECK: br %r14 +entry: + %src2 = load i64 *@g + %cond = icmp slt i64 %src1, %src2 + br i1 %cond, label %exit, label %mulb +mulb: + %mul = mul i64 %src1, %src1 + br label %exit +exit: + %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ] + ret i64 %res +} + +; Check unsigned comparisons. +define i64 @f2(i64 %src1) { +; CHECK: f2: +; CHECK: clgrl %r2, g +; CHECK-NEXT: j{{g?}}l +; CHECK: br %r14 +entry: + %src2 = load i64 *@g + %cond = icmp ult i64 %src1, %src2 + br i1 %cond, label %exit, label %mulb +mulb: + %mul = mul i64 %src1, %src1 + br label %exit +exit: + %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ] + ret i64 %res +} + +; Check equality, which can use CRL or CLRL. +define i64 @f3(i64 %src1) { +; CHECK: f3: +; CHECK: c{{l?}}grl %r2, g +; CHECK-NEXT: j{{g?}}e +; CHECK: br %r14 +entry: + %src2 = load i64 *@g + %cond = icmp eq i64 %src1, %src2 + br i1 %cond, label %exit, label %mulb +mulb: + %mul = mul i64 %src1, %src1 + br label %exit +exit: + %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ] + ret i64 %res +} + +; ...likewise inequality. +define i64 @f4(i64 %src1) { +; CHECK: f4: +; CHECK: c{{l?}}grl %r2, g +; CHECK-NEXT: j{{g?}}lh +; CHECK: br %r14 +entry: + %src2 = load i64 *@g + %cond = icmp ne i64 %src1, %src2 + br i1 %cond, label %exit, label %mulb +mulb: + %mul = mul i64 %src1, %src1 + br label %exit +exit: + %res = phi i64 [ %src1, %entry ], [ %mul, %mulb ] + ret i64 %res +} |