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