xref: /llvm-project/flang/test/Fir/logical-convert.fir (revision f9e995b4bdce7e3afbda0997b606fdc80112f803)
1// RUN: fir-opt --split-input-file --fir-to-llvm-ir="target=x86_64-unknown-linux-gnu" %s | FileCheck %s
2// RUN: fir-opt --split-input-file --fir-to-llvm-ir="target=aarch64-unknown-linux-gnu" %s | FileCheck %s
3// RUN: fir-opt --split-input-file --fir-to-llvm-ir="target=i386-unknown-linux-gnu" %s | FileCheck %s
4// RUN: fir-opt --split-input-file --fir-to-llvm-ir="target=powerpc64le-unknown-linux-gn" %s | FileCheck %s
5
6// -----
7// CHECK-LABEL: @test_l1_i1
8// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
9// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
10// CHECK: llvm.return [[t1]] : i1
11func.func @test_l1_i1(%arg0: !fir.logical<1>) -> i1 {
12  %0 = fir.convert %arg0 : (!fir.logical<1>) -> i1
13  return %0 : i1
14}
15// -----
16// CHECK-LABEL: @test_l1_i8
17// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
18// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
19// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
20// CHECK: llvm.return [[t2]] : i8
21func.func @test_l1_i8(%arg0: !fir.logical<1>) -> i8 {
22  %0 = fir.convert %arg0 : (!fir.logical<1>) -> i8
23  return %0 : i8
24}
25// -----
26// CHECK-LABEL: @test_l1_i16
27// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
28// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
29// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
30// CHECK: llvm.return [[t2]] : i16
31func.func @test_l1_i16(%arg0: !fir.logical<1>) -> i16 {
32  %0 = fir.convert %arg0 : (!fir.logical<1>) -> i16
33  return %0 : i16
34}
35// -----
36// CHECK-LABEL: @test_l1_i32
37// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
38// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
39// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
40// CHECK: llvm.return [[t2]] : i32
41func.func @test_l1_i32(%arg0: !fir.logical<1>) -> i32 {
42  %0 = fir.convert %arg0 : (!fir.logical<1>) -> i32
43  return %0 : i32
44}
45// -----
46// CHECK-LABEL: @test_l1_i64
47// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
48// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
49// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
50// CHECK: llvm.return [[t2]] : i64
51func.func @test_l1_i64(%arg0: !fir.logical<1>) -> i64 {
52  %0 = fir.convert %arg0 : (!fir.logical<1>) -> i64
53  return %0 : i64
54}
55// -----
56// CHECK-LABEL: @test_l2_i1
57// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
58// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
59// CHECK: llvm.return [[t1]] : i1
60func.func @test_l2_i1(%arg0: !fir.logical<2>) -> i1 {
61  %0 = fir.convert %arg0 : (!fir.logical<2>) -> i1
62  return %0 : i1
63}
64// -----
65// CHECK-LABEL: @test_l2_i8
66// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
67// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
68// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
69// CHECK: llvm.return [[t2]] : i8
70func.func @test_l2_i8(%arg0: !fir.logical<2>) -> i8 {
71  %0 = fir.convert %arg0 : (!fir.logical<2>) -> i8
72  return %0 : i8
73}
74// -----
75// CHECK-LABEL: @test_l2_i16
76// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
77// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
78// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
79// CHECK: llvm.return [[t2]] : i16
80func.func @test_l2_i16(%arg0: !fir.logical<2>) -> i16 {
81  %0 = fir.convert %arg0 : (!fir.logical<2>) -> i16
82  return %0 : i16
83}
84// -----
85// CHECK-LABEL: @test_l2_i32
86// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
87// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
88// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
89// CHECK: llvm.return [[t2]] : i32
90func.func @test_l2_i32(%arg0: !fir.logical<2>) -> i32 {
91  %0 = fir.convert %arg0 : (!fir.logical<2>) -> i32
92  return %0 : i32
93}
94// -----
95// CHECK-LABEL: @test_l2_i64
96// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
97// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
98// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
99// CHECK: llvm.return [[t2]] : i64
100func.func @test_l2_i64(%arg0: !fir.logical<2>) -> i64 {
101  %0 = fir.convert %arg0 : (!fir.logical<2>) -> i64
102  return %0 : i64
103}
104// -----
105// CHECK-LABEL: @test_l4_i1
106// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
107// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
108// CHECK: llvm.return [[t1]] : i1
109func.func @test_l4_i1(%arg0: !fir.logical<4>) -> i1 {
110  %0 = fir.convert %arg0 : (!fir.logical<4>) -> i1
111  return %0 : i1
112}
113// -----
114// CHECK-LABEL: @test_l4_i8
115// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
116// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
117// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
118// CHECK: llvm.return [[t2]] : i8
119func.func @test_l4_i8(%arg0: !fir.logical<4>) -> i8 {
120  %0 = fir.convert %arg0 : (!fir.logical<4>) -> i8
121  return %0 : i8
122}
123// -----
124// CHECK-LABEL: @test_l4_i16
125// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
126// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
127// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
128// CHECK: llvm.return [[t2]] : i16
129func.func @test_l4_i16(%arg0: !fir.logical<4>) -> i16 {
130  %0 = fir.convert %arg0 : (!fir.logical<4>) -> i16
131  return %0 : i16
132}
133// -----
134// CHECK-LABEL: @test_l4_i32
135// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
136// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
137// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
138// CHECK: llvm.return [[t2]] : i32
139func.func @test_l4_i32(%arg0: !fir.logical<4>) -> i32 {
140  %0 = fir.convert %arg0 : (!fir.logical<4>) -> i32
141  return %0 : i32
142}
143// -----
144// CHECK-LABEL: @test_l4_i64
145// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
146// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
147// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
148// CHECK: llvm.return [[t2]] : i64
149func.func @test_l4_i64(%arg0: !fir.logical<4>) -> i64 {
150  %0 = fir.convert %arg0 : (!fir.logical<4>) -> i64
151  return %0 : i64
152}
153// -----
154// CHECK-LABEL: @test_l8_i1
155// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
156// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
157// CHECK: llvm.return [[t1]] : i1
158func.func @test_l8_i1(%arg0: !fir.logical<8>) -> i1 {
159  %0 = fir.convert %arg0 : (!fir.logical<8>) -> i1
160  return %0 : i1
161}
162// -----
163// CHECK-LABEL: @test_l8_i8
164// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
165// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
166// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
167// CHECK: llvm.return [[t2]] : i8
168func.func @test_l8_i8(%arg0: !fir.logical<8>) -> i8 {
169  %0 = fir.convert %arg0 : (!fir.logical<8>) -> i8
170  return %0 : i8
171}
172// -----
173// CHECK-LABEL: @test_l8_i16
174// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
175// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
176// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
177// CHECK: llvm.return [[t2]] : i16
178func.func @test_l8_i16(%arg0: !fir.logical<8>) -> i16 {
179  %0 = fir.convert %arg0 : (!fir.logical<8>) -> i16
180  return %0 : i16
181}
182// -----
183// CHECK-LABEL: @test_l8_i32
184// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
185// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
186// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
187// CHECK: llvm.return [[t2]] : i32
188func.func @test_l8_i32(%arg0: !fir.logical<8>) -> i32 {
189  %0 = fir.convert %arg0 : (!fir.logical<8>) -> i32
190  return %0 : i32
191}
192// -----
193// CHECK-LABEL: @test_l8_i64
194// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
195// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
196// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
197// CHECK: llvm.return [[t2]] : i64
198func.func @test_l8_i64(%arg0: !fir.logical<8>) -> i64 {
199  %0 = fir.convert %arg0 : (!fir.logical<8>) -> i64
200  return %0 : i64
201}
202// -----
203// CHECK-LABEL: @test_i1_l1
204// CHECK: [[t0:%[0-9]*]] = llvm.zext %arg0 : i1 to i8
205// CHECK: llvm.return [[t0]] : i8
206func.func @test_i1_l1(%arg0: i1) -> !fir.logical<1> {
207  %0 = fir.convert %arg0 : (i1) -> !fir.logical<1>
208  return %0 : !fir.logical<1>
209}
210// -----
211// CHECK-LABEL: @test_i1_l2
212// CHECK: [[t0:%[0-9]*]] = llvm.zext %arg0 : i1 to i16
213// CHECK: llvm.return [[t0]] : i16
214func.func @test_i1_l2(%arg0: i1) -> !fir.logical<2> {
215  %0 = fir.convert %arg0 : (i1) -> !fir.logical<2>
216  return %0 : !fir.logical<2>
217}
218// -----
219// CHECK-LABEL: @test_i1_l4
220// CHECK: [[t0:%[0-9]*]] = llvm.zext %arg0 : i1 to i32
221// CHECK: llvm.return [[t0]] : i32
222func.func @test_i1_l4(%arg0: i1) -> !fir.logical<4> {
223  %0 = fir.convert %arg0 : (i1) -> !fir.logical<4>
224  return %0 : !fir.logical<4>
225}
226// -----
227// CHECK-LABEL: @test_i1_l8
228// CHECK: [[t0:%[0-9]*]] = llvm.zext %arg0 : i1 to i64
229// CHECK: llvm.return [[t0]] : i64
230func.func @test_i1_l8(%arg0: i1) -> !fir.logical<8> {
231  %0 = fir.convert %arg0 : (i1) -> !fir.logical<8>
232  return %0 : !fir.logical<8>
233}
234// -----
235// CHECK-LABEL: @test_i8_l1
236// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
237// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
238// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
239// CHECK: llvm.return [[t2]] : i8
240func.func @test_i8_l1(%arg0: i8) -> !fir.logical<1> {
241  %0 = fir.convert %arg0 : (i8) -> !fir.logical<1>
242  return %0 : !fir.logical<1>
243}
244// -----
245// CHECK-LABEL: @test_i8_l2
246// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
247// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
248// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
249// CHECK: llvm.return [[t2]] : i16
250func.func @test_i8_l2(%arg0: i8) -> !fir.logical<2> {
251  %0 = fir.convert %arg0 : (i8) -> !fir.logical<2>
252  return %0 : !fir.logical<2>
253}
254// -----
255// CHECK-LABEL: @test_i8_l4
256// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
257// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
258// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
259// CHECK: llvm.return [[t2]] : i32
260func.func @test_i8_l4(%arg0: i8) -> !fir.logical<4> {
261  %0 = fir.convert %arg0 : (i8) -> !fir.logical<4>
262  return %0 : !fir.logical<4>
263}
264// -----
265// CHECK-LABEL: @test_i8_l8
266// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
267// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
268// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
269// CHECK: llvm.return [[t2]] : i64
270func.func @test_i8_l8(%arg0: i8) -> !fir.logical<8> {
271  %0 = fir.convert %arg0 : (i8) -> !fir.logical<8>
272  return %0 : !fir.logical<8>
273}
274// -----
275// CHECK-LABEL: @test_i16_l1
276// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
277// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
278// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
279// CHECK: llvm.return [[t2]] : i8
280func.func @test_i16_l1(%arg0: i16) -> !fir.logical<1> {
281  %0 = fir.convert %arg0 : (i16) -> !fir.logical<1>
282  return %0 : !fir.logical<1>
283}
284// -----
285// CHECK-LABEL: @test_i16_l2
286// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
287// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
288// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
289// CHECK: llvm.return [[t2]] : i16
290func.func @test_i16_l2(%arg0: i16) -> !fir.logical<2> {
291  %0 = fir.convert %arg0 : (i16) -> !fir.logical<2>
292  return %0 : !fir.logical<2>
293}
294// -----
295// CHECK-LABEL: @test_i16_l4
296// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
297// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
298// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
299// CHECK: llvm.return [[t2]] : i32
300func.func @test_i16_l4(%arg0: i16) -> !fir.logical<4> {
301  %0 = fir.convert %arg0 : (i16) -> !fir.logical<4>
302  return %0 : !fir.logical<4>
303}
304// -----
305// CHECK-LABEL: @test_i16_l8
306// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
307// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
308// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
309// CHECK: llvm.return [[t2]] : i64
310func.func @test_i16_l8(%arg0: i16) -> !fir.logical<8> {
311  %0 = fir.convert %arg0 : (i16) -> !fir.logical<8>
312  return %0 : !fir.logical<8>
313}
314// -----
315// CHECK-LABEL: @test_i32_l1
316// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
317// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
318// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
319// CHECK: llvm.return [[t2]] : i8
320func.func @test_i32_l1(%arg0: i32) -> !fir.logical<1> {
321  %0 = fir.convert %arg0 : (i32) -> !fir.logical<1>
322  return %0 : !fir.logical<1>
323}
324// -----
325// CHECK-LABEL: @test_i32_l2
326// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
327// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
328// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
329// CHECK: llvm.return [[t2]] : i16
330func.func @test_i32_l2(%arg0: i32) -> !fir.logical<2> {
331  %0 = fir.convert %arg0 : (i32) -> !fir.logical<2>
332  return %0 : !fir.logical<2>
333}
334// -----
335// CHECK-LABEL: @test_i32_l4
336// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
337// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
338// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
339// CHECK: llvm.return [[t2]] : i32
340func.func @test_i32_l4(%arg0: i32) -> !fir.logical<4> {
341  %0 = fir.convert %arg0 : (i32) -> !fir.logical<4>
342  return %0 : !fir.logical<4>
343}
344// -----
345// CHECK-LABEL: @test_i32_l8
346// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
347// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
348// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
349// CHECK: llvm.return [[t2]] : i64
350func.func @test_i32_l8(%arg0: i32) -> !fir.logical<8> {
351  %0 = fir.convert %arg0 : (i32) -> !fir.logical<8>
352  return %0 : !fir.logical<8>
353}
354// -----
355// CHECK-LABEL: @test_i64_l1
356// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
357// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
358// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
359// CHECK: llvm.return [[t2]] : i8
360func.func @test_i64_l1(%arg0: i64) -> !fir.logical<1> {
361  %0 = fir.convert %arg0 : (i64) -> !fir.logical<1>
362  return %0 : !fir.logical<1>
363}
364// -----
365// CHECK-LABEL: @test_i64_l2
366// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
367// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
368// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
369// CHECK: llvm.return [[t2]] : i16
370func.func @test_i64_l2(%arg0: i64) -> !fir.logical<2> {
371  %0 = fir.convert %arg0 : (i64) -> !fir.logical<2>
372  return %0 : !fir.logical<2>
373}
374// -----
375// CHECK-LABEL: @test_i64_l4
376// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
377// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
378// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
379// CHECK: llvm.return [[t2]] : i32
380func.func @test_i64_l4(%arg0: i64) -> !fir.logical<4> {
381  %0 = fir.convert %arg0 : (i64) -> !fir.logical<4>
382  return %0 : !fir.logical<4>
383}
384// -----
385// CHECK-LABEL: @test_i64_l8
386// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
387// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
388// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
389// CHECK: llvm.return [[t2]] : i64
390func.func @test_i64_l8(%arg0: i64) -> !fir.logical<8> {
391  %0 = fir.convert %arg0 : (i64) -> !fir.logical<8>
392  return %0 : !fir.logical<8>
393}
394// -----
395// CHECK-LABEL: @test_l1_l2
396// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
397// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
398// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
399// CHECK: llvm.return [[t2]] : i16
400func.func @test_l1_l2(%arg0: !fir.logical<1>) -> !fir.logical<2> {
401  %0 = fir.convert %arg0 : (!fir.logical<1>) -> !fir.logical<2>
402  return %0 : !fir.logical<2>
403}
404// -----
405// CHECK-LABEL: @test_l1_l4
406// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
407// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
408// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
409// CHECK: llvm.return [[t2]] : i32
410func.func @test_l1_l4(%arg0: !fir.logical<1>) -> !fir.logical<4> {
411  %0 = fir.convert %arg0 : (!fir.logical<1>) -> !fir.logical<4>
412  return %0 : !fir.logical<4>
413}
414// -----
415// CHECK-LABEL: @test_l1_l8
416// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i8
417// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i8
418// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
419// CHECK: llvm.return [[t2]] : i64
420func.func @test_l1_l8(%arg0: !fir.logical<1>) -> !fir.logical<8> {
421  %0 = fir.convert %arg0 : (!fir.logical<1>) -> !fir.logical<8>
422  return %0 : !fir.logical<8>
423}
424// -----
425// CHECK-LABEL: @test_l2_l1
426// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
427// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
428// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
429// CHECK: llvm.return [[t2]] : i8
430func.func @test_l2_l1(%arg0: !fir.logical<2>) -> !fir.logical<1> {
431  %0 = fir.convert %arg0 : (!fir.logical<2>) -> !fir.logical<1>
432  return %0 : !fir.logical<1>
433}
434// -----
435// CHECK-LABEL: @test_l2_l4
436// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
437// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
438// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
439// CHECK: llvm.return [[t2]] : i32
440func.func @test_l2_l4(%arg0: !fir.logical<2>) -> !fir.logical<4> {
441  %0 = fir.convert %arg0 : (!fir.logical<2>) -> !fir.logical<4>
442  return %0 : !fir.logical<4>
443}
444// -----
445// CHECK-LABEL: @test_l2_l8
446// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i16
447// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i16
448// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
449// CHECK: llvm.return [[t2]] : i64
450func.func @test_l2_l8(%arg0: !fir.logical<2>) -> !fir.logical<8> {
451  %0 = fir.convert %arg0 : (!fir.logical<2>) -> !fir.logical<8>
452  return %0 : !fir.logical<8>
453}
454// -----
455// CHECK-LABEL: @test_l4_l1
456// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
457// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
458// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
459// CHECK: llvm.return [[t2]] : i8
460func.func @test_l4_l1(%arg0: !fir.logical<4>) -> !fir.logical<1> {
461  %0 = fir.convert %arg0 : (!fir.logical<4>) -> !fir.logical<1>
462  return %0 : !fir.logical<1>
463}
464// -----
465// CHECK-LABEL: @test_l4_l2
466// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
467// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
468// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
469// CHECK: llvm.return [[t2]] : i16
470func.func @test_l4_l2(%arg0: !fir.logical<4>) -> !fir.logical<2> {
471  %0 = fir.convert %arg0 : (!fir.logical<4>) -> !fir.logical<2>
472  return %0 : !fir.logical<2>
473}
474// -----
475// CHECK-LABEL: @test_l4_l8
476// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i32
477// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i32
478// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i64
479// CHECK: llvm.return [[t2]] : i64
480func.func @test_l4_l8(%arg0: !fir.logical<4>) -> !fir.logical<8> {
481  %0 = fir.convert %arg0 : (!fir.logical<4>) -> !fir.logical<8>
482  return %0 : !fir.logical<8>
483}
484// -----
485// CHECK-LABEL: @test_l8_l1
486// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
487// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
488// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i8
489// CHECK: llvm.return [[t2]] : i8
490func.func @test_l8_l1(%arg0: !fir.logical<8>) -> !fir.logical<1> {
491  %0 = fir.convert %arg0 : (!fir.logical<8>) -> !fir.logical<1>
492  return %0 : !fir.logical<1>
493}
494// -----
495// CHECK-LABEL: @test_l8_l2
496// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
497// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
498// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i16
499// CHECK: llvm.return [[t2]] : i16
500func.func @test_l8_l2(%arg0: !fir.logical<8>) -> !fir.logical<2> {
501  %0 = fir.convert %arg0 : (!fir.logical<8>) -> !fir.logical<2>
502  return %0 : !fir.logical<2>
503}
504// -----
505// CHECK-LABEL: @test_l8_l4
506// CHECK: [[t0:%[0-9]*]] = llvm.mlir.constant(0 : i64) : i64
507// CHECK: [[t1:%[0-9]*]] = llvm.icmp "ne" %arg0, [[t0]] : i64
508// CHECK: [[t2:%[0-9]*]] = llvm.zext [[t1]] : i1 to i32
509// CHECK: llvm.return [[t2]] : i32
510func.func @test_l8_l4(%arg0: !fir.logical<8>) -> !fir.logical<4> {
511  %0 = fir.convert %arg0 : (!fir.logical<8>) -> !fir.logical<4>
512  return %0 : !fir.logical<4>
513}
514