[spirv-reader] Add LogicalEqual LogicalNotEqual

Bug: tint:3
Change-Id: I4925ccf555ea7d0dadcafeb539317a00b1a4b92f
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/20242
Reviewed-by: dan sinclair <dsinclair@google.com>
diff --git a/src/reader/spirv/function.cc b/src/reader/spirv/function.cc
index 5dd261a..e779227 100644
--- a/src/reader/spirv/function.cc
+++ b/src/reader/spirv/function.cc
@@ -91,9 +91,11 @@
       return ast::BinaryOp::kShiftRight;
     case SpvOpShiftRightArithmetic:
       return ast::BinaryOp::kShiftRightArith;
+    case SpvOpLogicalEqual:
     case SpvOpIEqual:
     case SpvOpFOrdEqual:
       return ast::BinaryOp::kEqual;
+    case SpvOpLogicalNotEqual:
     case SpvOpINotEqual:
     case SpvOpFOrdNotEqual:
       return ast::BinaryOp::kNotEqual;
diff --git a/src/reader/spirv/function_logical_test.cc b/src/reader/spirv/function_logical_test.cc
index 5778396..001a551 100644
--- a/src/reader/spirv/function_logical_test.cc
+++ b/src/reader/spirv/function_logical_test.cc
@@ -189,7 +189,6 @@
       << ToString(fe.ast_body());
 }
 
-
 struct BinaryData {
   const std::string res_type;
   const std::string lhs;
@@ -322,13 +321,33 @@
                                  AstFor("v2bool_t_f"), "logical_or",
                                  AstFor("v2bool_f_t")}));
 
+INSTANTIATE_TEST_SUITE_P(
+    SpvParserTest_LogicalEqual,
+    SpvBinaryLogicalTest,
+    ::testing::Values(BinaryData{"bool", "true", "OpLogicalEqual", "false",
+                                 "__bool", "ScalarConstructor{true}", "equal",
+                                 "ScalarConstructor{false}"},
+                      BinaryData{"v2bool", "v2bool_t_f", "OpLogicalEqual",
+                                 "v2bool_f_t", "__vec_2__bool",
+                                 AstFor("v2bool_t_f"), "equal",
+                                 AstFor("v2bool_f_t")}));
+
+INSTANTIATE_TEST_SUITE_P(
+    SpvParserTest_LogicalNotEqual,
+    SpvBinaryLogicalTest,
+    ::testing::Values(BinaryData{"bool", "true", "OpLogicalNotEqual", "false",
+                                 "__bool", "ScalarConstructor{true}",
+                                 "not_equal", "ScalarConstructor{false}"},
+                      BinaryData{"v2bool", "v2bool_t_f", "OpLogicalNotEqual",
+                                 "v2bool_f_t", "__vec_2__bool",
+                                 AstFor("v2bool_t_f"), "not_equal",
+                                 AstFor("v2bool_f_t")}));
+
 // TODO(dneto): OpAny
 // TODO(dneto): OpAll
 // TODO(dneto): OpIsNan
 // TODO(dneto): OpIsInf
 // TODO(dneto): Kernel-guarded instructions.
-// TODO(dneto): OpLogicalEqual
-// TODO(dneto): OpLogicalNotEqual
 // TODO(dneto): OpSelect
 // TODO(dneto): OpUGreaterThan
 // TODO(dneto): OpSGreaterThan