1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
; Test 32-bit equality comparisons that are really between a memory byte
; and a constant.
;
; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
; Check the low end of the 8-bit unsigned range, with zero extension.
define double @f1(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f1:
; CHECK: cli 0(%r2), 0
; CHECK-NEXT: ber %r14
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = zext i8 %val to i32
%cond = icmp eq i32 %ext, 0
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check the high end of the 8-bit unsigned range, with zero extension.
define double @f2(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f2:
; CHECK: cli 0(%r2), 255
; CHECK-NEXT: ber %r14
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = zext i8 %val to i32
%cond = icmp eq i32 %ext, 255
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check the next value up, with zero extension. The condition is always false.
define double @f3(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f3:
; CHECK-NOT: cli
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = zext i8 %val to i32
%cond = icmp eq i32 %ext, 256
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check comparisons with -1, with zero extension.
; This condition is also always false.
define double @f4(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f4:
; CHECK-NOT: cli
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = zext i8 %val to i32
%cond = icmp eq i32 %ext, -1
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check comparisons with 0, using sign extension.
define double @f5(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f5:
; CHECK: cli 0(%r2), 0
; CHECK-NEXT: ber %r14
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = sext i8 %val to i32
%cond = icmp eq i32 %ext, 0
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check the high end of the signed 8-bit range, using sign extension.
define double @f6(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f6:
; CHECK: cli 0(%r2), 127
; CHECK-NEXT: ber %r14
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = sext i8 %val to i32
%cond = icmp eq i32 %ext, 127
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check the next value up, using sign extension.
; The condition is always false.
define double @f7(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f7:
; CHECK-NOT: cli
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = sext i8 %val to i32
%cond = icmp eq i32 %ext, 128
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check comparisons with -1, using sign extension.
define double @f8(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f8:
; CHECK: cli 0(%r2), 255
; CHECK-NEXT: ber %r14
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = sext i8 %val to i32
%cond = icmp eq i32 %ext, -1
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check the low end of the signed 8-bit range, using sign extension.
define double @f9(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f9:
; CHECK: cli 0(%r2), 128
; CHECK-NEXT: ber %r14
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = sext i8 %val to i32
%cond = icmp eq i32 %ext, -128
%res = select i1 %cond, double %a, double %b
ret double %res
}
; Check the next value down, using sign extension.
; The condition is always false.
define double @f10(double %a, double %b, ptr %ptr) {
; CHECK-LABEL: f10:
; CHECK-NOT: cli
; CHECK: br %r14
%val = load i8, ptr %ptr
%ext = sext i8 %val to i32
%cond = icmp eq i32 %ext, -129
%res = select i1 %cond, double %a, double %b
ret double %res
}
|