1// RUN: mlir-opt -convert-spirv-to-llvm %s | FileCheck %s
2
3//===----------------------------------------------------------------------===//
4// spv.LogicalEqual
5//===----------------------------------------------------------------------===//
6
7func @logical_equal_scalar(%arg0: i1, %arg1: i1) {
8  // CHECK: %{{.*}} = llvm.icmp "eq" %{{.*}}, %{{.*}} : !llvm.i1
9	%0 = spv.LogicalEqual %arg0, %arg0 : i1
10  return
11}
12
13func @logical_equal_vector(%arg0: vector<4xi1>, %arg1: vector<4xi1>) {
14  // CHECK: %{{.*}} = llvm.icmp "eq" %{{.*}}, %{{.*}} : !llvm<"<4 x i1>">
15	%0 = spv.LogicalEqual %arg0, %arg0 : vector<4xi1>
16  return
17}
18
19//===----------------------------------------------------------------------===//
20// spv.LogicalNotEqual
21//===----------------------------------------------------------------------===//
22
23func @logical_not_equal_scalar(%arg0: i1, %arg1: i1) {
24  // CHECK: %{{.*}} = llvm.icmp "ne" %{{.*}}, %{{.*}} : !llvm.i1
25	%0 = spv.LogicalNotEqual %arg0, %arg0 : i1
26  return
27}
28
29func @logical_not_equal_vector(%arg0: vector<4xi1>, %arg1: vector<4xi1>) {
30  // CHECK: %{{.*}} = llvm.icmp "ne" %{{.*}}, %{{.*}} : !llvm<"<4 x i1>">
31	%0 = spv.LogicalNotEqual %arg0, %arg0 : vector<4xi1>
32  return
33}
34
35//===----------------------------------------------------------------------===//
36// spv.LogicalNot
37//===----------------------------------------------------------------------===//
38
39func @logical_not__scalar(%arg0: i1) {
40  // CHECK: %[[CONST:.*]] = llvm.mlir.constant(true) : !llvm.i1
41  // CHECK: %{{.*}} = llvm.xor %{{.*}}, %[[CONST]] : !llvm.i1
42	%0 = spv.LogicalNot %arg0 : i1
43  return
44}
45
46func @logical_not_vector(%arg0: vector<4xi1>) {
47  // CHECK: %[[CONST:.*]] = llvm.mlir.constant(dense<true> : vector<4xi1>) : !llvm<"<4 x i1>">
48  // CHECK: %{{.*}} = llvm.xor %{{.*}}, %[[CONST]] : !llvm<"<4 x i1>">
49	%0 = spv.LogicalNot %arg0 : vector<4xi1>
50  return
51}
52
53//===----------------------------------------------------------------------===//
54// spv.LogicalAnd
55//===----------------------------------------------------------------------===//
56
57func @logical_and_scalar(%arg0: i1, %arg1: i1) {
58  // CHECK: %{{.*}} = llvm.and %{{.*}}, %{{.*}} : !llvm.i1
59	%0 = spv.LogicalAnd %arg0, %arg0 : i1
60  return
61}
62
63func @logical_and_vector(%arg0: vector<4xi1>, %arg1: vector<4xi1>) {
64  // CHECK: %{{.*}} = llvm.and %{{.*}}, %{{.*}} : !llvm<"<4 x i1>">
65	%0 = spv.LogicalAnd %arg0, %arg0 : vector<4xi1>
66  return
67}
68
69//===----------------------------------------------------------------------===//
70// spv.LogicalOr
71//===----------------------------------------------------------------------===//
72
73func @logical_or_scalar(%arg0: i1, %arg1: i1) {
74  // CHECK: %{{.*}} = llvm.or %{{.*}}, %{{.*}} : !llvm.i1
75	%0 = spv.LogicalOr %arg0, %arg0 : i1
76  return
77}
78
79func @logical_or_vector(%arg0: vector<4xi1>, %arg1: vector<4xi1>) {
80  // CHECK: %{{.*}} = llvm.or %{{.*}}, %{{.*}} : !llvm<"<4 x i1>">
81	%0 = spv.LogicalOr %arg0, %arg0 : vector<4xi1>
82  return
83}
84