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