[spirv-writer] Add binary less than equal.

This CL adds generation for the less than equal binary operator.

Bug: tint:5
Change-Id: Ic9d0eb107079c29b2ca1b0eb088e3b2eb7531e1e
Reviewed-on: https://dawn-review.googlesource.com/c/tint/+/19406
Reviewed-by: Ryan Harrison <rharrison@chromium.org>
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index c06cba4..1126dc3 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -595,6 +595,14 @@
     } else {
       op = spv::Op::OpSLessThan;
     }
+  } else if (expr->IsLessThanEqual()) {
+    if (lhs_is_float_or_vec) {
+      op = spv::Op::OpFOrdLessThanEqual;
+    } else if (lhs_is_unsigned) {
+      op = spv::Op::OpULessThanEqual;
+    } else {
+      op = spv::Op::OpSLessThanEqual;
+    }
   } else if (expr->IsNotEqual()) {
     op = lhs_is_float_or_vec ? spv::Op::OpFOrdNotEqual : spv::Op::OpINotEqual;
   } else {
diff --git a/src/writer/spirv/builder_binary_expression_test.cc b/src/writer/spirv/builder_binary_expression_test.cc
index e344776..ae2ef18 100644
--- a/src/writer/spirv/builder_binary_expression_test.cc
+++ b/src/writer/spirv/builder_binary_expression_test.cc
@@ -283,6 +283,8 @@
     testing::Values(BinaryData{ast::BinaryOp::kEqual, "OpIEqual"},
                     BinaryData{ast::BinaryOp::kGreaterThan, "OpUGreaterThan"},
                     BinaryData{ast::BinaryOp::kLessThan, "OpULessThan"},
+                    BinaryData{ast::BinaryOp::kLessThanEqual,
+                               "OpULessThanEqual"},
                     BinaryData{ast::BinaryOp::kNotEqual, "OpINotEqual"}));
 
 using BinaryCompareSignedIntegerTest = testing::TestWithParam<BinaryData>;
@@ -367,6 +369,8 @@
     testing::Values(BinaryData{ast::BinaryOp::kEqual, "OpIEqual"},
                     BinaryData{ast::BinaryOp::kGreaterThan, "OpSGreaterThan"},
                     BinaryData{ast::BinaryOp::kLessThan, "OpSLessThan"},
+                    BinaryData{ast::BinaryOp::kLessThanEqual,
+                               "OpSLessThanEqual"},
                     BinaryData{ast::BinaryOp::kNotEqual, "OpINotEqual"}));
 
 using BinaryCompareFloatTest = testing::TestWithParam<BinaryData>;
@@ -448,11 +452,12 @@
 INSTANTIATE_TEST_SUITE_P(
     BuilderTest,
     BinaryCompareFloatTest,
-    testing::Values(BinaryData{ast::BinaryOp::kEqual, "OpFOrdEqual"},
-                    BinaryData{ast::BinaryOp::kGreaterThan,
-                               "OpFOrdGreaterThan"},
-                    BinaryData{ast::BinaryOp::kLessThan, "OpFOrdLessThan"},
-                    BinaryData{ast::BinaryOp::kNotEqual, "OpFOrdNotEqual"}));
+    testing::Values(
+        BinaryData{ast::BinaryOp::kEqual, "OpFOrdEqual"},
+        BinaryData{ast::BinaryOp::kGreaterThan, "OpFOrdGreaterThan"},
+        BinaryData{ast::BinaryOp::kLessThan, "OpFOrdLessThan"},
+        BinaryData{ast::BinaryOp::kLessThanEqual, "OpFOrdLessThanEqual"},
+        BinaryData{ast::BinaryOp::kNotEqual, "OpFOrdNotEqual"}));
 
 }  // namespace
 }  // namespace spirv