mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
e2d6f91d63
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@190930 91177308-0d34-0410-b5e6-96231b3b80d8
62 lines
1.6 KiB
LLVM
62 lines
1.6 KiB
LLVM
; Test 64-bit unsigned comparisons in which the second operand is constant.
|
|
;
|
|
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
|
|
|
|
; 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, i64 %i1) {
|
|
; CHECK-LABEL: f1:
|
|
; CHECK: clgijh %r2, 1
|
|
; CHECK: ldr %f0, %f2
|
|
; CHECK: br %r14
|
|
%cond = icmp ugt i64 %i1, 1
|
|
%res = select i1 %cond, double %a, double %b
|
|
ret double %res
|
|
}
|
|
|
|
; Check the top of the CLGIJ range.
|
|
define double @f2(double %a, double %b, i64 %i1) {
|
|
; CHECK-LABEL: f2:
|
|
; CHECK: clgijl %r2, 255
|
|
; CHECK: ldr %f0, %f2
|
|
; CHECK: br %r14
|
|
%cond = icmp ult i64 %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, i64 %i1) {
|
|
; CHECK-LABEL: f3:
|
|
; CHECK: clgfi %r2, 256
|
|
; CHECK: jl
|
|
; CHECK: ldr %f0, %f2
|
|
; CHECK: br %r14
|
|
%cond = icmp ult i64 %i1, 256
|
|
%res = select i1 %cond, double %a, double %b
|
|
ret double %res
|
|
}
|
|
|
|
; Check the high end of the CLGFI range.
|
|
define double @f4(double %a, double %b, i64 %i1) {
|
|
; CHECK-LABEL: f4:
|
|
; CHECK: clgfi %r2, 4294967295
|
|
; CHECK-NEXT: jl
|
|
; CHECK: ldr %f0, %f2
|
|
; CHECK: br %r14
|
|
%cond = icmp ult i64 %i1, 4294967295
|
|
%res = select i1 %cond, double %a, double %b
|
|
ret double %res
|
|
}
|
|
|
|
; Check the next value up, which must use a register comparison.
|
|
define double @f5(double %a, double %b, i64 %i1) {
|
|
; CHECK-LABEL: f5:
|
|
; CHECK: clgrjl %r2,
|
|
; CHECK: ldr %f0, %f2
|
|
; CHECK: br %r14
|
|
%cond = icmp ult i64 %i1, 4294967296
|
|
%res = select i1 %cond, double %a, double %b
|
|
ret double %res
|
|
}
|