blob: fafb234616f11a972cfcbb04744a9566a7ca19a7 [file] [log] [blame]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +00001; Test all condition-code masks that are relevant for floating-point
2; comparisons.
3;
4; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
5
6define void @f1(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +00007; CHECK-LABEL: f1:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +00008; CHECK: .cfi_startproc
9; CHECK: .L[[LABEL:.*]]:
10; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +000011; CHECK-NEXT: je .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000012 br label %loop
13loop:
14 %val = load volatile float *%src
15 %cond = fcmp oeq float %target, %val
16 br i1 %cond, label %loop, label %exit
17exit:
18 ret void
19}
20
21define void @f2(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +000022; CHECK-LABEL: f2:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000023; CHECK: .cfi_startproc
24; CHECK: .L[[LABEL:.*]]:
25; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +000026; CHECK-NEXT: jlh .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000027 br label %loop
28loop:
29 %val = load volatile float *%src
30 %cond = fcmp one float %target, %val
31 br i1 %cond, label %loop, label %exit
32exit:
33 ret void
34}
35
36define void @f3(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +000037; CHECK-LABEL: f3:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000038; CHECK: .cfi_startproc
39; CHECK: .L[[LABEL:.*]]:
40; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +000041; CHECK-NEXT: jle .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000042 br label %loop
43loop:
44 %val = load volatile float *%src
45 %cond = fcmp ole float %target, %val
46 br i1 %cond, label %loop, label %exit
47exit:
48 ret void
49}
50
51define void @f4(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +000052; CHECK-LABEL: f4:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000053; CHECK: .cfi_startproc
54; CHECK: .L[[LABEL:.*]]:
55; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +000056; CHECK-NEXT: jl .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000057 br label %loop
58loop:
59 %val = load volatile float *%src
60 %cond = fcmp olt float %target, %val
61 br i1 %cond, label %loop, label %exit
62exit:
63 ret void
64}
65
66define void @f5(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +000067; CHECK-LABEL: f5:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000068; CHECK: .cfi_startproc
69; CHECK: .L[[LABEL:.*]]:
70; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +000071; CHECK-NEXT: jh .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000072 br label %loop
73loop:
74 %val = load volatile float *%src
75 %cond = fcmp ogt float %target, %val
76 br i1 %cond, label %loop, label %exit
77exit:
78 ret void
79}
80
81define void @f6(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +000082; CHECK-LABEL: f6:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000083; CHECK: .cfi_startproc
84; CHECK: .L[[LABEL:.*]]:
85; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +000086; CHECK-NEXT: jhe .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000087 br label %loop
88loop:
89 %val = load volatile float *%src
90 %cond = fcmp oge float %target, %val
91 br i1 %cond, label %loop, label %exit
92exit:
93 ret void
94}
95
96define void @f7(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +000097; CHECK-LABEL: f7:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +000098; CHECK: .cfi_startproc
99; CHECK: .L[[LABEL:.*]]:
100; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000101; CHECK-NEXT: jnlh .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000102 br label %loop
103loop:
104 %val = load volatile float *%src
105 %cond = fcmp ueq float %target, %val
106 br i1 %cond, label %loop, label %exit
107exit:
108 ret void
109}
110
111define void @f8(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000112; CHECK-LABEL: f8:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000113; CHECK: .cfi_startproc
114; CHECK: .L[[LABEL:.*]]:
115; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000116; CHECK-NEXT: jne .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000117 br label %loop
118loop:
119 %val = load volatile float *%src
120 %cond = fcmp une float %target, %val
121 br i1 %cond, label %loop, label %exit
122exit:
123 ret void
124}
125
126define void @f9(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000127; CHECK-LABEL: f9:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000128; CHECK: .cfi_startproc
129; CHECK: .L[[LABEL:.*]]:
130; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000131; CHECK-NEXT: jnh .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000132 br label %loop
133loop:
134 %val = load volatile float *%src
135 %cond = fcmp ule float %target, %val
136 br i1 %cond, label %loop, label %exit
137exit:
138 ret void
139}
140
141define void @f10(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000142; CHECK-LABEL: f10:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000143; CHECK: .cfi_startproc
144; CHECK: .L[[LABEL:.*]]:
145; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000146; CHECK-NEXT: jnhe .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000147 br label %loop
148loop:
149 %val = load volatile float *%src
150 %cond = fcmp ult float %target, %val
151 br i1 %cond, label %loop, label %exit
152exit:
153 ret void
154}
155
156define void @f11(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000157; CHECK-LABEL: f11:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000158; CHECK: .cfi_startproc
159; CHECK: .L[[LABEL:.*]]:
160; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000161; CHECK-NEXT: jnle .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000162 br label %loop
163loop:
164 %val = load volatile float *%src
165 %cond = fcmp ugt float %target, %val
166 br i1 %cond, label %loop, label %exit
167exit:
168 ret void
169}
170
171define void @f12(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000172; CHECK-LABEL: f12:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000173; CHECK: .cfi_startproc
174; CHECK: .L[[LABEL:.*]]:
175; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000176; CHECK-NEXT: jnl .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000177 br label %loop
178loop:
179 %val = load volatile float *%src
180 %cond = fcmp uge float %target, %val
181 br i1 %cond, label %loop, label %exit
182exit:
183 ret void
184}
185
186; "jno" == "jump if no overflow", which corresponds to "jump if ordered"
187; rather than "jump if not ordered" after a floating-point comparison.
188define void @f13(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000189; CHECK-LABEL: f13:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000190; CHECK: .cfi_startproc
191; CHECK: .L[[LABEL:.*]]:
192; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000193; CHECK-NEXT: jno .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000194 br label %loop
195loop:
196 %val = load volatile float *%src
197 %cond = fcmp ord float %target, %val
198 br i1 %cond, label %loop, label %exit
199exit:
200 ret void
201}
202
203; "jo" == "jump if overflow", which corresponds to "jump if not ordered"
204; rather than "jump if ordered" after a floating-point comparison.
205define void @f14(float *%src, float %target) {
Stephen Lind24ab202013-07-14 06:24:09 +0000206; CHECK-LABEL: f14:
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000207; CHECK: .cfi_startproc
208; CHECK: .L[[LABEL:.*]]:
209; CHECK: ceb %f0, 0(%r2)
Richard Sandiford586f4172013-05-21 08:53:17 +0000210; CHECK-NEXT: jo .L[[LABEL]]
Ulrich Weigand9e3577f2013-05-06 16:17:29 +0000211 br label %loop
212loop:
213 %val = load volatile float *%src
214 %cond = fcmp uno float %target, %val
215 br i1 %cond, label %loop, label %exit
216exit:
217 ret void
218}