[spirv-reader][ir] Support remaining OpFOrd instructions.

Add conversions for `OpFOrdNotEqual`, `OpFOrdGreaterThan`,
`OpFOrdGreaterThanEqual`, `OpFOrdLessThan`, and `OpFOrdLessThanEqual`.

Bug: 391486260, 391486721, 391487147, 391486343, 397725475
Change-Id: Ic82b9d26290ae0d36d1bf3cab4c5b4074426f047
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/226915
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
diff --git a/src/tint/lang/spirv/reader/parser/logical_test.cc b/src/tint/lang/spirv/reader/parser/logical_test.cc
index 7358a7f..fd83e1c 100644
--- a/src/tint/lang/spirv/reader/parser/logical_test.cc
+++ b/src/tint/lang/spirv/reader/parser/logical_test.cc
@@ -30,7 +30,18 @@
 namespace tint::spirv::reader {
 namespace {
 
-TEST_F(SpirvParserTest, FOrdEqual_Scalar) {
+struct SpirvLogicalParam {
+    std::string spv_name;
+    std::string wgsl_name;
+};
+[[maybe_unused]] inline std::ostream& operator<<(std::ostream& out, SpirvLogicalParam c) {
+    out << c.spv_name;
+    return out;
+}
+
+using SpirvParser_LogicalTest = SpirvParserTestWithParam<SpirvLogicalParam>;
+TEST_P(SpirvParser_LogicalTest, FOrd_Scalar) {
+    auto params = GetParam();
     EXPECT_IR(R"(
                OpCapability Shader
                OpCapability Float16
@@ -49,21 +60,24 @@
     %ep_type = OpTypeFunction %void
        %main = OpFunction %void None %ep_type
  %main_start = OpLabel
-          %1 = OpFOrdEqual %bool %one %two
+          %1 = OpFOrd)" +
+                  params.spv_name + R"( %bool %one %two
                OpReturn
                OpFunctionEnd
 )",
               R"(
 %main = @compute @workgroup_size(1u, 1u, 1u) func():void {
   $B1: {
-    %2:bool = eq 1.0f, 2.0f
+    %2:bool = )" + params.wgsl_name +
+                  R"( 1.0f, 2.0f
     ret
   }
 }
 )");
 }
 
-TEST_F(SpirvParserTest, FOrdEqual_Vector) {
+TEST_P(SpirvParser_LogicalTest, FOrd_Vector) {
+    auto params = GetParam();
     EXPECT_IR(R"(
                OpCapability Shader
                OpCapability Float16
@@ -82,19 +96,30 @@
     %ep_type = OpTypeFunction %void
        %main = OpFunction %void None %ep_type
  %main_start = OpLabel
-          %1 = OpFOrdEqual %v2bool %v2one %v2two
+          %1 = OpFOrd)" +
+                  params.spv_name + R"( %v2bool %v2one %v2two
                OpReturn
                OpFunctionEnd
 )",
               R"(
 %main = @compute @workgroup_size(1u, 1u, 1u) func():void {
   $B1: {
-    %2:vec2<bool> = eq vec2<f32>(1.0f), vec2<f32>(2.0f)
+    %2:vec2<bool> = )" +
+                  params.wgsl_name + R"( vec2<f32>(1.0f), vec2<f32>(2.0f)
     ret
   }
 }
 )");
 }
 
+INSTANTIATE_TEST_SUITE_P(SpirvParser,
+                         SpirvParser_LogicalTest,
+                         testing::Values(SpirvLogicalParam{"Equal", "eq"},
+                                         SpirvLogicalParam{"NotEqual", "neq"},
+                                         SpirvLogicalParam{"GreaterThan", "gt"},
+                                         SpirvLogicalParam{"GreaterThanEqual", "gte"},
+                                         SpirvLogicalParam{"LessThan", "lt"},
+                                         SpirvLogicalParam{"LessThanEqual", "lte"}));
+
 }  // namespace
 }  // namespace tint::spirv::reader
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc
index 7c944d8..bc98553 100644
--- a/src/tint/lang/spirv/reader/parser/parser.cc
+++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -725,6 +725,21 @@
                 case spv::Op::OpFOrdEqual:
                     EmitBinary(inst, core::BinaryOp::kEqual);
                     break;
+                case spv::Op::OpFOrdNotEqual:
+                    EmitBinary(inst, core::BinaryOp::kNotEqual);
+                    break;
+                case spv::Op::OpFOrdGreaterThan:
+                    EmitBinary(inst, core::BinaryOp::kGreaterThan);
+                    break;
+                case spv::Op::OpFOrdGreaterThanEqual:
+                    EmitBinary(inst, core::BinaryOp::kGreaterThanEqual);
+                    break;
+                case spv::Op::OpFOrdLessThan:
+                    EmitBinary(inst, core::BinaryOp::kLessThan);
+                    break;
+                case spv::Op::OpFOrdLessThanEqual:
+                    EmitBinary(inst, core::BinaryOp::kLessThanEqual);
+                    break;
                 case spv::Op::OpISub:
                     EmitSpirvExplicitBuiltinCall(inst, spirv::BuiltinFn::kSub);
                     break;