[spirv-reader][ir] Support for LogicalOr

Bug: 402726783
Change-Id: I45df999e0daacfba4047508d6627afa4393b8c86
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/233494
Reviewed-by: James Price <jrprice@google.com>
Commit-Queue: dan sinclair <dsinclair@chromium.org>
Reviewed-by: dan sinclair <dsinclair@chromium.org>
Commit-Queue: James Price <jrprice@google.com>
diff --git a/src/tint/lang/spirv/reader/parser/parser.cc b/src/tint/lang/spirv/reader/parser/parser.cc
index 3ab9666..18160ed 100644
--- a/src/tint/lang/spirv/reader/parser/parser.cc
+++ b/src/tint/lang/spirv/reader/parser/parser.cc
@@ -194,6 +194,9 @@
                         case spv::Op::OpLogicalAnd:
                             EmitBinary(inst, core::BinaryOp::kAnd, 3);
                             break;
+                        case spv::Op::OpLogicalOr:
+                            EmitBinary(inst, core::BinaryOp::kOr, 3);
+                            break;
                         default:
                             TINT_ICE() << "Unknown spec constant operation: " << op;
                     }
diff --git a/src/tint/lang/spirv/reader/parser/var_test.cc b/src/tint/lang/spirv/reader/parser/var_test.cc
index a314d86..ce9a4d5 100644
--- a/src/tint/lang/spirv/reader/parser/var_test.cc
+++ b/src/tint/lang/spirv/reader/parser/var_test.cc
@@ -768,5 +768,39 @@
 )");
 }
 
+TEST_F(SpirvParserTest, Var_OpSpecConstantOp_LogicalOr) {
+    EXPECT_IR(R"(
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint GLCompute %main "main"
+               OpExecutionMode %main LocalSize 1 1 1
+               OpName %cond "myconst"
+       %void = OpTypeVoid
+       %bool = OpTypeBool
+      %false = OpSpecConstantFalse %bool
+       %true = OpSpecConstantTrue %bool
+       %cond = OpSpecConstantOp %bool LogicalOr %false %true
+     %voidfn = OpTypeFunction %void
+       %main = OpFunction %void None %voidfn
+ %main_entry = OpLabel
+          %b = OpLogicalOr %bool %cond %cond
+               OpReturn
+               OpFunctionEnd
+)",
+              R"(
+$B1: {  # root
+  %1:bool = or false, true
+  %myconst:bool = override %1
+}
+
+%main = @compute @workgroup_size(1u, 1u, 1u) func():void {
+  $B2: {
+    %4:bool = or %myconst, %myconst
+    ret
+  }
+}
+)");
+}
+
 }  // namespace
 }  // namespace tint::spirv::reader