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