[spirv-reader] Add logical and, logical or
Bug: tint:3
Change-Id: Ia2bde9644a8e3cdd5871570354a380f968760711
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19562
Reviewed-by: dan sinclair <dsinclair@google.com>
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 0412c67..ae9b9ad 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -64,6 +64,10 @@
return ast::BinaryOp::kOr;
case SpvOpBitwiseXor:
return ast::BinaryOp::kXor;
+ case SpvOpLogicalAnd:
+ return ast::BinaryOp::kLogicalAnd;
+ case SpvOpLogicalOr:
+ return ast::BinaryOp::kLogicalOr;
default:
break;
}
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index f33e58f..4973ae9 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -57,6 +57,8 @@
%v2int = OpTypeVector %int 2
%v2float = OpTypeVector %float 2
+ %v2bool_t_f = OpConstantComposite %v2bool %true %false
+ %v2bool_f_t = OpConstantComposite %v2bool %false %true
%v2uint_10_20 = OpConstantComposite %v2uint %uint_10 %uint_20
%v2uint_20_10 = OpConstantComposite %v2uint %uint_20 %uint_10
%v2int_30_40 = OpConstantComposite %v2int %int_30 %int_40
@@ -214,6 +216,28 @@
"__vec_2__bool", AstFor("v2int_30_40"), "not_equal",
AstFor("v2int_40_30")}));
+INSTANTIATE_TEST_SUITE_P(
+ SpvParserTest_LogicalAnd,
+ SpvBinaryLogicalTest,
+ ::testing::Values(BinaryData{"bool", "true", "OpLogicalAnd", "false",
+ "__bool", "ScalarConstructor{true}",
+ "logical_and", "ScalarConstructor{false}"},
+ BinaryData{"v2bool", "v2bool_t_f", "OpLogicalAnd",
+ "v2bool_f_t", "__vec_2__bool",
+ AstFor("v2bool_t_f"), "logical_and",
+ AstFor("v2bool_f_t")}));
+
+INSTANTIATE_TEST_SUITE_P(
+ SpvParserTest_LogicalOr,
+ SpvBinaryLogicalTest,
+ ::testing::Values(BinaryData{"bool", "true", "OpLogicalOr", "false",
+ "__bool", "ScalarConstructor{true}",
+ "logical_or", "ScalarConstructor{false}"},
+ BinaryData{"v2bool", "v2bool_t_f", "OpLogicalOr",
+ "v2bool_f_t", "__vec_2__bool",
+ AstFor("v2bool_t_f"), "logical_or",
+ AstFor("v2bool_f_t")}));
+
} // namespace
} // namespace spirv
} // namespace reader