[tint] Fix max float as integer in conversion 'ConvF32ToIU32'

A missing equals in the clamping code is causing our clamping code to
miss out on the final largest integer in the conversion.

Context for why this clampling exists:
https://github.com/gpuweb/gpuweb/issues/3908

Original clamping bug:
crbug.com/42250907

CTS test to follow

Bug: 362659150
Change-Id: I01564a879e5decd5c724517f7a18c46b5f1b2f4c
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/205655
Commit-Queue: Peter McNeeley <petermcneeley@google.com>
Reviewed-by: James Price <jrprice@google.com>
diff --git a/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc b/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc
index bf323ba..6cd3439 100644
--- a/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc
+++ b/src/tint/lang/wgsl/ast/transform/builtin_polyfill.cc
@@ -28,6 +28,7 @@
 #include "src/tint/lang/wgsl/ast/transform/builtin_polyfill.h"
 
 #include <algorithm>
+#include <cstdint>
 #include <tuple>
 #include <unordered_map>
 #include <utility>
@@ -856,18 +857,21 @@
             AInt high_limit;
         };
         const bool is_signed = target->IsSignedIntegerScalarOrVector();
-        const Limits limits = is_signed ? Limits{
-                                              /* low_condition   */ -AFloat(0x80000000),
-                                              /* low_limit  */ -AInt(0x80000000),
-                                              /* high_condition  */ AFloat(0x7fffff80),
-                                              /* high_limit */ AInt(0x7fffffff),
-                                          }
-                                        : Limits{
-                                              /* low_condition   */ AFloat(0),
-                                              /* low_limit  */ AInt(0),
-                                              /* high_condition  */ AFloat(0xffffff00),
-                                              /* high_limit */ AInt(0xffffffff),
-                                          };
+        const uint32_t largest_signed_integer_float = 0x7fffff80;
+        const uint32_t largest_unsigned_integer_float = 0xffffff00;
+        const Limits limits =
+            is_signed ? Limits{
+                            /* low_condition   */ -AFloat(0x80000000),
+                            /* low_limit  */ -AInt(0x80000000),
+                            /* high_condition  */ AFloat(largest_signed_integer_float),
+                            /* high_limit */ AInt(0x7fffffff),
+                        }
+                      : Limits{
+                            /* low_condition   */ AFloat(0),
+                            /* low_limit  */ AInt(0),
+                            /* high_condition  */ AFloat(largest_unsigned_integer_float),
+                            /* high_limit */ AInt(0xffffffff),
+                        };
 
         const uint32_t width = WidthOf(target);
 
@@ -877,11 +881,14 @@
                                   ScalarOrVector(width, limits.low_limit),  //
                                   b.LessThan("v", ScalarOrVector(width, limits.low_condition)));
 
-        // select(high_limit, select_low, v < high_condition)
-        auto* select_high = b.Call(wgsl::BuiltinFn::kSelect,                  //
-                                   ScalarOrVector(width, limits.high_limit),  //
-                                   select_low,                                //
-                                   b.LessThan("v", ScalarOrVector(width, limits.high_condition)));
+        // select(high_limit, select_low, v <= high_condition)
+        // The equality test in the 'LessThanEqual' is used to ensure that the largest integer float
+        // will be converted to an integer.
+        auto* select_high =
+            b.Call(wgsl::BuiltinFn::kSelect,                  //
+                   ScalarOrVector(width, limits.high_limit),  //
+                   select_low,                                //
+                   b.LessThanEqual("v", ScalarOrVector(width, limits.high_condition)));
 
         auto name = b.Symbols().New(is_signed ? "tint_ftoi" : "tint_ftou");
         b.Func(name, tint::Vector{b.Param("v", T(source))}, T(target),
diff --git a/src/tint/lang/wgsl/ast/transform/builtin_polyfill_test.cc b/src/tint/lang/wgsl/ast/transform/builtin_polyfill_test.cc
index c380c3f..100ef50 100644
--- a/src/tint/lang/wgsl/ast/transform/builtin_polyfill_test.cc
+++ b/src/tint/lang/wgsl/ast/transform/builtin_polyfill_test.cc
@@ -962,7 +962,7 @@
 )";
     auto* expect = R"(
 fn tint_ftoi(v : f32) -> i32 {
-  return select(2147483647, select(i32(v), -2147483648, (v < -2147483648.0)), (v < 2147483520.0));
+  return select(2147483647, select(i32(v), -2147483648, (v < -2147483648.0)), (v <= 2147483520.0));
 }
 
 fn f() {
@@ -985,7 +985,7 @@
 )";
     auto* expect = R"(
 fn tint_ftou(v : f32) -> u32 {
-  return select(4294967295, select(u32(v), 0, (v < 0.0)), (v < 4294967040.0));
+  return select(4294967295, select(u32(v), 0, (v < 0.0)), (v <= 4294967040.0));
 }
 
 fn f() {
@@ -1008,7 +1008,7 @@
 )";
     auto* expect = R"(
 fn tint_ftoi(v : vec3<f32>) -> vec3<i32> {
-  return select(vec3(2147483647), select(vec3<i32>(v), vec3(-2147483648), (v < vec3(-2147483648.0))), (v < vec3(2147483520.0)));
+  return select(vec3(2147483647), select(vec3<i32>(v), vec3(-2147483648), (v < vec3(-2147483648.0))), (v <= vec3(2147483520.0)));
 }
 
 fn f() {
@@ -1031,7 +1031,7 @@
 )";
     auto* expect = R"(
 fn tint_ftou(v : vec3<f32>) -> vec3<u32> {
-  return select(vec3(4294967295), select(vec3<u32>(v), vec3(0), (v < vec3(0.0))), (v < vec3(4294967040.0)));
+  return select(vec3(4294967295), select(vec3<u32>(v), vec3(0), (v < vec3(0.0))), (v <= vec3(4294967040.0)));
 }
 
 fn f() {
diff --git a/test/tint/access/ptr.wgsl.expected.dxc.hlsl b/test/tint/access/ptr.wgsl.expected.dxc.hlsl
index 9adff6f..1bba264 100644
--- a/test/tint/access/ptr.wgsl.expected.dxc.hlsl
+++ b/test/tint/access/ptr.wgsl.expected.dxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 RWByteAddressBuffer s : register(u0);
diff --git a/test/tint/access/ptr.wgsl.expected.fxc.hlsl b/test/tint/access/ptr.wgsl.expected.fxc.hlsl
index 9adff6f..1bba264 100644
--- a/test/tint/access/ptr.wgsl.expected.fxc.hlsl
+++ b/test/tint/access/ptr.wgsl.expected.fxc.hlsl
@@ -9,7 +9,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 RWByteAddressBuffer s : register(u0);
diff --git a/test/tint/access/ptr.wgsl.expected.glsl b/test/tint/access/ptr.wgsl.expected.glsl
index f1248a35..a09f07e 100644
--- a/test/tint/access/ptr.wgsl.expected.glsl
+++ b/test/tint/access/ptr.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 shared int g1;
diff --git a/test/tint/access/ptr.wgsl.expected.msl b/test/tint/access/ptr.wgsl.expected.msl
index 0e29de7..871c123 100644
--- a/test/tint/access/ptr.wgsl.expected.msl
+++ b/test/tint/access/ptr.wgsl.expected.msl
@@ -9,7 +9,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct S {
diff --git a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.dxc.hlsl b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.dxc.hlsl
index fd3469f..6383fd4 100644
--- a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 ByteAddressBuffer sb : register(t0);
diff --git a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.fxc.hlsl b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.fxc.hlsl
index fd3469f..6383fd4 100644
--- a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.fxc.hlsl
+++ b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 ByteAddressBuffer sb : register(t0);
diff --git a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.glsl b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.glsl
index 78a14d5..9ec4ec0 100644
--- a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.glsl
+++ b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.msl b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.msl
index 46bcf9d..43474d1 100644
--- a/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.msl
+++ b/test/tint/buffer/storage/dynamic_index/read.wgsl.expected.msl
@@ -75,7 +75,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.dxc.hlsl b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.dxc.hlsl
index 959820f..2e78482 100644
--- a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 ByteAddressBuffer sb : register(t0);
diff --git a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.glsl b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.glsl
index 2dedec5..6d9916a 100644
--- a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.glsl
+++ b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.msl b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.msl
index 24fd000..ebfeca5 100644
--- a/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.msl
+++ b/test/tint/buffer/storage/dynamic_index/read_f16.wgsl.expected.msl
@@ -113,7 +113,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/static_index/read.wgsl.expected.dxc.hlsl b/test/tint/buffer/storage/static_index/read.wgsl.expected.dxc.hlsl
index 85fee8d..ac7b248 100644
--- a/test/tint/buffer/storage/static_index/read.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/storage/static_index/read.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/static_index/read.wgsl.expected.fxc.hlsl b/test/tint/buffer/storage/static_index/read.wgsl.expected.fxc.hlsl
index 85fee8d..ac7b248 100644
--- a/test/tint/buffer/storage/static_index/read.wgsl.expected.fxc.hlsl
+++ b/test/tint/buffer/storage/static_index/read.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/static_index/read.wgsl.expected.glsl b/test/tint/buffer/storage/static_index/read.wgsl.expected.glsl
index 185f228..d764eec 100644
--- a/test/tint/buffer/storage/static_index/read.wgsl.expected.glsl
+++ b/test/tint/buffer/storage/static_index/read.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/static_index/read.wgsl.expected.msl b/test/tint/buffer/storage/static_index/read.wgsl.expected.msl
index 86b6182..c57664f 100644
--- a/test/tint/buffer/storage/static_index/read.wgsl.expected.msl
+++ b/test/tint/buffer/storage/static_index/read.wgsl.expected.msl
@@ -79,7 +79,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct S {
diff --git a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.dxc.hlsl b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.dxc.hlsl
index c956eff..703c477 100644
--- a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.glsl b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.glsl
index d6e11f6..5d825ff 100644
--- a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.glsl
+++ b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.msl b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.msl
index 25223fa..3acb544 100644
--- a/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.msl
+++ b/test/tint/buffer/storage/static_index/read_f16.wgsl.expected.msl
@@ -119,7 +119,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct S {
diff --git a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.dxc.hlsl b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.dxc.hlsl
index 520d345..dfbe53a 100644
--- a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 cbuffer cbuffer_ub : register(b0) {
diff --git a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.fxc.hlsl b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.fxc.hlsl
index 520d345..dfbe53a 100644
--- a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.fxc.hlsl
+++ b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 cbuffer cbuffer_ub : register(b0) {
diff --git a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.glsl b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
index 80b8b45..49c3529 100644
--- a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.msl b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.msl
index b820506..fddc71c 100644
--- a/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.msl
+++ b/test/tint/buffer/uniform/dynamic_index/read.wgsl.expected.msl
@@ -75,7 +75,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.dxc.hlsl b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.dxc.hlsl
index 79dd94a..99e5b22 100644
--- a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 cbuffer cbuffer_ub : register(b0) {
diff --git a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.glsl b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.glsl
index 7ee99b6..e23114e 100644
--- a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 };
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.msl b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.msl
index 2d124a8..eac9363 100644
--- a/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.msl
+++ b/test/tint/buffer/uniform/dynamic_index/read_f16.wgsl.expected.msl
@@ -113,7 +113,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/static_index/read.wgsl.expected.dxc.hlsl b/test/tint/buffer/uniform/static_index/read.wgsl.expected.dxc.hlsl
index fb9d819..414cac5 100644
--- a/test/tint/buffer/uniform/static_index/read.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/uniform/static_index/read.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/static_index/read.wgsl.expected.fxc.hlsl b/test/tint/buffer/uniform/static_index/read.wgsl.expected.fxc.hlsl
index fb9d819..414cac5 100644
--- a/test/tint/buffer/uniform/static_index/read.wgsl.expected.fxc.hlsl
+++ b/test/tint/buffer/uniform/static_index/read.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/static_index/read.wgsl.expected.glsl b/test/tint/buffer/uniform/static_index/read.wgsl.expected.glsl
index a00e376..ffc7bc7 100644
--- a/test/tint/buffer/uniform/static_index/read.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/static_index/read.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/static_index/read.wgsl.expected.msl b/test/tint/buffer/uniform/static_index/read.wgsl.expected.msl
index af6bdf1..d3cb3bc 100644
--- a/test/tint/buffer/uniform/static_index/read.wgsl.expected.msl
+++ b/test/tint/buffer/uniform/static_index/read.wgsl.expected.msl
@@ -80,7 +80,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct S {
diff --git a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.dxc.hlsl b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.dxc.hlsl
index 426a04c..58a8e66 100644
--- a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.dxc.hlsl
+++ b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.glsl b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.glsl
index d0db985..5b52620 100644
--- a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.glsl
+++ b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.glsl
@@ -9,7 +9,7 @@
 };
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 struct Inner {
diff --git a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.msl b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.msl
index ccc2f32..22e33e1 100644
--- a/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.msl
+++ b/test/tint/buffer/uniform/static_index/read_f16.wgsl.expected.msl
@@ -118,7 +118,7 @@
 }
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct S {
diff --git a/test/tint/bug/chromium/1273230.wgsl.expected.dxc.hlsl b/test/tint/bug/chromium/1273230.wgsl.expected.dxc.hlsl
index 4d95c5e..85cafd7 100644
--- a/test/tint/bug/chromium/1273230.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/chromium/1273230.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 void marg8uintin() {
diff --git a/test/tint/bug/chromium/1273230.wgsl.expected.fxc.hlsl b/test/tint/bug/chromium/1273230.wgsl.expected.fxc.hlsl
index 4d95c5e..85cafd7 100644
--- a/test/tint/bug/chromium/1273230.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/chromium/1273230.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 void marg8uintin() {
diff --git a/test/tint/bug/chromium/1273230.wgsl.expected.glsl b/test/tint/bug/chromium/1273230.wgsl.expected.glsl
index 52fa64a..2cab808 100644
--- a/test/tint/bug/chromium/1273230.wgsl.expected.glsl
+++ b/test/tint/bug/chromium/1273230.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 
 
 uvec3 tint_ftou(vec3 v) {
-  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThan(v, vec3(4294967040.0f)));
+  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThanEqual(v, vec3(4294967040.0f)));
 }
 
 struct Uniforms {
diff --git a/test/tint/bug/chromium/1273230.wgsl.expected.msl b/test/tint/bug/chromium/1273230.wgsl.expected.msl
index 0bb95b5..6300a9d 100644
--- a/test/tint/bug/chromium/1273230.wgsl.expected.msl
+++ b/test/tint/bug/chromium/1273230.wgsl.expected.msl
@@ -26,7 +26,7 @@
 };
 
 uint3 tint_ftou(float3 v) {
-  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v < float3(4294967040.0f)));
+  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v <= float3(4294967040.0f)));
 }
 
 void marg8uintin() {
diff --git a/test/tint/bug/chromium/335592006.wgsl.expected.ir.dxc.hlsl b/test/tint/bug/chromium/335592006.wgsl.expected.ir.dxc.hlsl
index ba0068d..f96dc35 100644
--- a/test/tint/bug/chromium/335592006.wgsl.expected.ir.dxc.hlsl
+++ b/test/tint/bug/chromium/335592006.wgsl.expected.ir.dxc.hlsl
@@ -1,5 +1,3 @@
-SKIP: FAILED
-
 
 void f() {
   int a = 1;
diff --git a/test/tint/bug/tint/1113.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1113.wgsl.expected.dxc.hlsl
index 9cdf473..4c0b1de 100644
--- a/test/tint/bug/tint/1113.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1113.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 cbuffer cbuffer_uniforms : register(b0) {
diff --git a/test/tint/bug/tint/1113.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1113.wgsl.expected.fxc.hlsl
index 9cdf473..4c0b1de 100644
--- a/test/tint/bug/tint/1113.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1113.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 cbuffer cbuffer_uniforms : register(b0) {
diff --git a/test/tint/bug/tint/1113.wgsl.expected.glsl b/test/tint/bug/tint/1113.wgsl.expected.glsl
index 803ab3d..5b10f04 100644
--- a/test/tint/bug/tint/1113.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1113.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 
 
 uvec3 tint_ftou(vec3 v) {
-  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThan(v, vec3(4294967040.0f)));
+  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThanEqual(v, vec3(4294967040.0f)));
 }
 
 struct Uniforms {
@@ -209,7 +209,7 @@
 
 
 uvec3 tint_ftou(vec3 v) {
-  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThan(v, vec3(4294967040.0f)));
+  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThanEqual(v, vec3(4294967040.0f)));
 }
 
 struct Uniforms {
diff --git a/test/tint/bug/tint/1113.wgsl.expected.msl b/test/tint/bug/tint/1113.wgsl.expected.msl
index 38d605e..c5f5df1 100644
--- a/test/tint/bug/tint/1113.wgsl.expected.msl
+++ b/test/tint/bug/tint/1113.wgsl.expected.msl
@@ -26,7 +26,7 @@
 };
 
 uint3 tint_ftou(float3 v) {
-  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v < float3(4294967040.0f)));
+  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v <= float3(4294967040.0f)));
 }
 
 struct Uniforms {
diff --git a/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl b/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl
index ad77d59..1000f34 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1520.spvasm.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 cbuffer cbuffer_x_4 : register(b0) {
diff --git a/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl b/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl
index ad77d59..1000f34 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1520.spvasm.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 cbuffer cbuffer_x_4 : register(b0) {
diff --git a/test/tint/bug/tint/1520.spvasm.expected.glsl b/test/tint/bug/tint/1520.spvasm.expected.glsl
index a5cee51..3017acd 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.glsl
+++ b/test/tint/bug/tint/1520.spvasm.expected.glsl
@@ -8,7 +8,7 @@
 
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 layout(location = 0) in vec4 vcolor_S0_param_1;
diff --git a/test/tint/bug/tint/1520.spvasm.expected.msl b/test/tint/bug/tint/1520.spvasm.expected.msl
index d10b884..259f588 100644
--- a/test/tint/bug/tint/1520.spvasm.expected.msl
+++ b/test/tint/bug/tint/1520.spvasm.expected.msl
@@ -35,7 +35,7 @@
 };
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct UniformBuffer {
diff --git a/test/tint/bug/tint/1739.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1739.wgsl.expected.dxc.hlsl
index b79d036..bdf8a33 100644
--- a/test/tint/bug/tint/1739.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1739.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/bug/tint/1739.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1739.wgsl.expected.fxc.hlsl
index b79d036..bdf8a33 100644
--- a/test/tint/bug/tint/1739.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1739.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/bug/tint/1739.wgsl.expected.glsl b/test/tint/bug/tint/1739.wgsl.expected.glsl
index 61708d7..392a797 100644
--- a/test/tint/bug/tint/1739.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1739.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/bug/tint/1739.wgsl.expected.msl b/test/tint/bug/tint/1739.wgsl.expected.msl
index b9fef37..761ffe7 100644
--- a/test/tint/bug/tint/1739.wgsl.expected.msl
+++ b/test/tint/bug/tint/1739.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 int2 tint_clamp(int2 e, int2 low, int2 high) {
diff --git a/test/tint/bug/tint/1820.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/1820.wgsl.expected.dxc.hlsl
index 4f3f659..ff68574 100644
--- a/test/tint/bug/tint/1820.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/1820.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 void foo(float x) {
diff --git a/test/tint/bug/tint/1820.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/1820.wgsl.expected.fxc.hlsl
index 4f3f659..ff68574 100644
--- a/test/tint/bug/tint/1820.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/1820.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 void foo(float x) {
diff --git a/test/tint/bug/tint/1820.wgsl.expected.glsl b/test/tint/bug/tint/1820.wgsl.expected.glsl
index 8a84afa..6f5b2d1 100644
--- a/test/tint/bug/tint/1820.wgsl.expected.glsl
+++ b/test/tint/bug/tint/1820.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return;
 }
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 void foo(float x) {
diff --git a/test/tint/bug/tint/1820.wgsl.expected.msl b/test/tint/bug/tint/1820.wgsl.expected.msl
index fec8589..803141d 100644
--- a/test/tint/bug/tint/1820.wgsl.expected.msl
+++ b/test/tint/bug/tint/1820.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 void foo(float x) {
diff --git a/test/tint/bug/tint/349310442.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/349310442.wgsl.expected.dxc.hlsl
index f3c04a3..c910735 100644
--- a/test/tint/bug/tint/349310442.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/349310442.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/bug/tint/349310442.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/349310442.wgsl.expected.fxc.hlsl
index f3c04a3..c910735 100644
--- a/test/tint/bug/tint/349310442.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/349310442.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/bug/tint/349310442.wgsl.expected.glsl b/test/tint/bug/tint/349310442.wgsl.expected.glsl
index c277cf2..5bbe649 100644
--- a/test/tint/bug/tint/349310442.wgsl.expected.glsl
+++ b/test/tint/bug/tint/349310442.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/bug/tint/349310442.wgsl.expected.msl b/test/tint/bug/tint/349310442.wgsl.expected.msl
index a404640..d83b01e 100644
--- a/test/tint/bug/tint/349310442.wgsl.expected.msl
+++ b/test/tint/bug/tint/349310442.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float3 gammaCorrection(float3 v, GammaTransferParams params) {
diff --git a/test/tint/bug/tint/534.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/534.wgsl.expected.dxc.hlsl
index b11f2e3..922786e 100644
--- a/test/tint/bug/tint/534.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/534.wgsl.expected.dxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 uint4 tint_ftou(float4 v) {
-  return ((v < (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
+  return ((v <= (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
 }
 
 Texture2D<float4> src : register(t0);
diff --git a/test/tint/bug/tint/534.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/534.wgsl.expected.fxc.hlsl
index b11f2e3..922786e 100644
--- a/test/tint/bug/tint/534.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/534.wgsl.expected.fxc.hlsl
@@ -3,7 +3,7 @@
 }
 
 uint4 tint_ftou(float4 v) {
-  return ((v < (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
+  return ((v <= (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
 }
 
 Texture2D<float4> src : register(t0);
diff --git a/test/tint/bug/tint/534.wgsl.expected.glsl b/test/tint/bug/tint/534.wgsl.expected.glsl
index 49eb0a4..82733f7 100644
--- a/test/tint/bug/tint/534.wgsl.expected.glsl
+++ b/test/tint/bug/tint/534.wgsl.expected.glsl
@@ -6,7 +6,7 @@
 
 
 uvec4 tint_ftou(vec4 v) {
-  return tint_select(uvec4(4294967295u), tint_select(uvec4(v), uvec4(0u), lessThan(v, vec4(0.0f))), lessThan(v, vec4(4294967040.0f)));
+  return tint_select(uvec4(4294967295u), tint_select(uvec4(v), uvec4(0u), lessThan(v, vec4(0.0f))), lessThanEqual(v, vec4(4294967040.0f)));
 }
 
 struct Uniforms {
diff --git a/test/tint/bug/tint/534.wgsl.expected.msl b/test/tint/bug/tint/534.wgsl.expected.msl
index 4a79dfc..3fe0797 100644
--- a/test/tint/bug/tint/534.wgsl.expected.msl
+++ b/test/tint/bug/tint/534.wgsl.expected.msl
@@ -19,7 +19,7 @@
   if (VOLATILE_NAME)
 
 uint4 tint_ftou(float4 v) {
-  return select(uint4(4294967295u), select(uint4(v), uint4(0u), (v < float4(0.0f))), (v < float4(4294967040.0f)));
+  return select(uint4(4294967295u), select(uint4(v), uint4(0u), (v < float4(0.0f))), (v <= float4(4294967040.0f)));
 }
 
 struct Uniforms {
diff --git a/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl b/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl
index 318edf6..08f4aac 100644
--- a/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl
+++ b/test/tint/bug/tint/922.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Mat4x4_ {
diff --git a/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl b/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl
index 318edf6..08f4aac 100644
--- a/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl
+++ b/test/tint/bug/tint/922.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct Mat4x4_ {
diff --git a/test/tint/bug/tint/922.wgsl.expected.glsl b/test/tint/bug/tint/922.wgsl.expected.glsl
index eee08bf..3b70006 100644
--- a/test/tint/bug/tint/922.wgsl.expected.glsl
+++ b/test/tint/bug/tint/922.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 layout(location = 0) in vec3 a_Position_1;
diff --git a/test/tint/bug/tint/922.wgsl.expected.msl b/test/tint/bug/tint/922.wgsl.expected.msl
index 2d9e6a2..1f5048f 100644
--- a/test/tint/bug/tint/922.wgsl.expected.msl
+++ b/test/tint/bug/tint/922.wgsl.expected.msl
@@ -26,7 +26,7 @@
 };
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct Mat4x4_ {
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl
index 9148b8e..ac5ad88 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl
index 9148b8e..ac5ad88 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.glsl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.glsl
index 3df65d5..95d4ef8 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.glsl
@@ -12,7 +12,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -137,7 +137,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -263,7 +263,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 layout(location = 0) flat out vec4 prevent_dce_1;
diff --git a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.msl b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.msl
index 20b54be..924ff4b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/1bfdfb.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float3 gammaCorrection(float3 v, GammaTransferParams params) {
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.dxc.hlsl
index 3b6fec1..b7b0d63 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.fxc.hlsl
index 3b6fec1..b7b0d63 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.glsl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.glsl
index 1165d59..75f080b 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.glsl
@@ -12,7 +12,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -137,7 +137,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -263,7 +263,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 layout(location = 0) flat out vec4 prevent_dce_1;
diff --git a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.msl b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.msl
index 1a4aabf..fb0385f 100644
--- a/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/textureLoad/8acf41.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float3 gammaCorrection(float3 v, GammaTransferParams params) {
diff --git a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl
index d23f6a4..339d368 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl
index d23f6a4..339d368 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.glsl
index 96b1b32..102af37 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.glsl
@@ -12,7 +12,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -138,7 +138,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -265,7 +265,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 layout(location = 0) flat out vec4 prevent_dce_1;
diff --git a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.msl b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.msl
index 27f6057..3dfdf3b 100644
--- a/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureLoad/1bfdfb.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float3 gammaCorrection(float3 v, GammaTransferParams params) {
diff --git a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.dxc.hlsl
index ded9b4b..c9d4c8b 100644
--- a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.fxc.hlsl
index ded9b4b..c9d4c8b 100644
--- a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.glsl b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.glsl
index cd23f2d..1617a2c 100644
--- a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.glsl
@@ -12,7 +12,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -138,7 +138,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -265,7 +265,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 layout(location = 0) flat out vec4 prevent_dce_1;
diff --git a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.msl b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.msl
index 7aed180..419cfb5 100644
--- a/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/textureLoad/8acf41.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float3 gammaCorrection(float3 v, GammaTransferParams params) {
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.dxc.hlsl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.dxc.hlsl
index 14bb4a9..09dd8a4 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.fxc.hlsl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.fxc.hlsl
index 14bb4a9..09dd8a4 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.glsl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.glsl
index 9e1e629..4e3a06a 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.glsl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.glsl
@@ -10,7 +10,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -136,7 +136,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
@@ -255,7 +255,7 @@
 
 
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 struct GammaTransferParams {
diff --git a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
index 76042d4..93f5ec2 100644
--- a/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
+++ b/test/tint/builtins/textureLoad/texture_external_param.wgsl.expected.msl
@@ -90,7 +90,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float3 gammaCorrection(float3 v, GammaTransferParams params) {
diff --git a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.dxc.hlsl b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.dxc.hlsl
index a58ca70..c04139d 100644
--- a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.dxc.hlsl
+++ b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.dxc.hlsl
@@ -11,7 +11,7 @@
               ^
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 Texture2D<float4> t : register(t1);
diff --git a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.fxc.hlsl b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.fxc.hlsl
index a58ca70..c04139d 100644
--- a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.fxc.hlsl
+++ b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.fxc.hlsl
@@ -11,7 +11,7 @@
               ^
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 Texture2D<float4> t : register(t1);
diff --git a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.glsl b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.glsl
index cf8013b..9270052 100644
--- a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.glsl
+++ b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.glsl
@@ -15,7 +15,7 @@
 precision highp int;
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 layout(location = 0) in float x_1;
diff --git a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.msl b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.msl
index bd13c9c2..2131b8e 100644
--- a/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.msl
+++ b/test/tint/diagnostic_filtering/case_body_attribute.wgsl.expected.msl
@@ -14,7 +14,7 @@
 
 using namespace metal;
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct tint_symbol_2 {
diff --git a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.dxc.hlsl b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.dxc.hlsl
index 1bb03f9..d9f7148 100644
--- a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.dxc.hlsl
+++ b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.dxc.hlsl
@@ -11,7 +11,7 @@
               ^
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 Texture2D<float4> t : register(t1);
diff --git a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.fxc.hlsl b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.fxc.hlsl
index 1bb03f9..d9f7148 100644
--- a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.fxc.hlsl
+++ b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.fxc.hlsl
@@ -11,7 +11,7 @@
               ^
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 Texture2D<float4> t : register(t1);
diff --git a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.glsl b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.glsl
index 35ee4fa..20a9e00 100644
--- a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.glsl
+++ b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.glsl
@@ -15,7 +15,7 @@
 precision highp int;
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 layout(location = 0) in float x_1;
diff --git a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.msl b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.msl
index 0e35ccd..b74d503 100644
--- a/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.msl
+++ b/test/tint/diagnostic_filtering/default_case_body_attribute.wgsl.expected.msl
@@ -14,7 +14,7 @@
 
 using namespace metal;
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct tint_symbol_2 {
diff --git a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.dxc.hlsl b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.dxc.hlsl
index 046ad14..c29103a 100644
--- a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.dxc.hlsl
+++ b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.dxc.hlsl
@@ -11,7 +11,7 @@
               ^
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct tint_symbol_1 {
diff --git a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.fxc.hlsl b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.fxc.hlsl
index 046ad14..c29103a 100644
--- a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.fxc.hlsl
+++ b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.fxc.hlsl
@@ -11,7 +11,7 @@
               ^
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 struct tint_symbol_1 {
diff --git a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.glsl b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.glsl
index 5d22e3a..b5953ec 100644
--- a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.glsl
+++ b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.glsl
@@ -15,7 +15,7 @@
 precision highp int;
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 layout(location = 0) in float x_1;
diff --git a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.msl b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.msl
index b80a1db..6d6c836 100644
--- a/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.msl
+++ b/test/tint/diagnostic_filtering/switch_body_attribute.wgsl.expected.msl
@@ -14,7 +14,7 @@
 
 using namespace metal;
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct tint_symbol_2 {
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl
index 744033f..c62220c 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl
index 744033f..c62220c 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl
index 77e0afd..1b05d12 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return;
 }
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl
index d9e37b1..f468aaf 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 float m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl
index 41551c8..761ce99 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl
index 41551c8..761ce99 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl
index 3acd592..b8564a0 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return;
 }
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl
index f99b9c9..2a8a278 100644
--- a/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/function/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 float m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl
index 8b6ed20..17e5772 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 static float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl
index 8b6ed20..17e5772 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 static float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl
index 5041e94..89bc943 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return;
 }
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl
index 487685b..4a23d94 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl
index ecb4c1e..706e8a9 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 static float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl
index ecb4c1e..706e8a9 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 static float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl
index 6905b67..cb83984 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.glsl
@@ -5,7 +5,7 @@
   return;
 }
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 float u = 1.0f;
diff --git a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl
index c7b8e3d..32fccf6 100644
--- a/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/scalar/var/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl
index c67e356..1e5767a 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int2 tint_ftoi(float2 v) {
-  return ((v < (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
+  return ((v <= (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl
index c67e356..1e5767a 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int2 tint_ftoi(float2 v) {
-  return ((v < (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
+  return ((v <= (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl
index d3afdff..08f7381 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 ivec2 tint_ftoi(vec2 v) {
-  return tint_select(ivec2(2147483647), tint_select(ivec2(v), ivec2((-2147483647 - 1)), lessThan(v, vec2(-2147483648.0f))), lessThan(v, vec2(2147483520.0f)));
+  return tint_select(ivec2(2147483647), tint_select(ivec2(v), ivec2((-2147483647 - 1)), lessThan(v, vec2(-2147483648.0f))), lessThanEqual(v, vec2(2147483520.0f)));
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl
index e33bfc1..2053205 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int2 tint_ftoi(float2 v) {
-  return select(int2(2147483647), select(int2(v), int2((-2147483647 - 1)), (v < float2(-2147483648.0f))), (v < float2(2147483520.0f)));
+  return select(int2(2147483647), select(int2(v), int2((-2147483647 - 1)), (v < float2(-2147483648.0f))), (v <= float2(2147483520.0f)));
 }
 
 float2 m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl
index 649208a..d1ccc93 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl
index 649208a..d1ccc93 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl
index fb1d7fd..14414f8 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl
index 01ed808..2cd8ff3 100644
--- a/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/function/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 float2 m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.dxc.hlsl
index e8a1678..4bb6797 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int2 tint_ftoi(float2 v) {
-  return ((v < (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
+  return ((v <= (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
 }
 
 static float2 u = (1.0f).xx;
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.fxc.hlsl
index e8a1678..4bb6797 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int2 tint_ftoi(float2 v) {
-  return ((v < (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
+  return ((v <= (2147483520.0f).xx) ? ((v < (-2147483648.0f).xx) ? (-2147483648).xx : int2(v)) : (2147483647).xx);
 }
 
 static float2 u = (1.0f).xx;
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.glsl
index 6c79343..32f99c5 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 ivec2 tint_ftoi(vec2 v) {
-  return tint_select(ivec2(2147483647), tint_select(ivec2(v), ivec2((-2147483647 - 1)), lessThan(v, vec2(-2147483648.0f))), lessThan(v, vec2(2147483520.0f)));
+  return tint_select(ivec2(2147483647), tint_select(ivec2(v), ivec2((-2147483647 - 1)), lessThan(v, vec2(-2147483648.0f))), lessThanEqual(v, vec2(2147483520.0f)));
 }
 
 vec2 u = vec2(1.0f);
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.msl
index 0b65c82..4fa3a7c 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int2 tint_ftoi(float2 v) {
-  return select(int2(2147483647), select(int2(v), int2((-2147483647 - 1)), (v < float2(-2147483648.0f))), (v < float2(2147483520.0f)));
+  return select(int2(2147483647), select(int2(v), int2((-2147483647 - 1)), (v < float2(-2147483648.0f))), (v <= float2(2147483520.0f)));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.dxc.hlsl
index c0b7a43..c430025 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 static float2 u = (1.0f).xx;
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.fxc.hlsl
index c0b7a43..c430025 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint2 tint_ftou(float2 v) {
-  return ((v < (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
+  return ((v <= (4294967040.0f).xx) ? ((v < (0.0f).xx) ? (0u).xx : uint2(v)) : (4294967295u).xx);
 }
 
 static float2 u = (1.0f).xx;
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.glsl
index 5ce5803..baae45e 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 uvec2 tint_ftou(vec2 v) {
-  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThan(v, vec2(4294967040.0f)));
+  return tint_select(uvec2(4294967295u), tint_select(uvec2(v), uvec2(0u), lessThan(v, vec2(0.0f))), lessThanEqual(v, vec2(4294967040.0f)));
 }
 
 vec2 u = vec2(1.0f);
diff --git a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.msl
index dc1cf0f..8f12501 100644
--- a/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec2/var/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint2 tint_ftou(float2 v) {
-  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v < float2(4294967040.0f)));
+  return select(uint2(4294967295u), select(uint2(v), uint2(0u), (v < float2(0.0f))), (v <= float2(4294967040.0f)));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.dxc.hlsl
index a2a7ea3..8b58d10 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int3 tint_ftoi(float3 v) {
-  return ((v < (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
+  return ((v <= (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.fxc.hlsl
index a2a7ea3..8b58d10 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int3 tint_ftoi(float3 v) {
-  return ((v < (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
+  return ((v <= (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.glsl
index 4941250..4c39e24 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 ivec3 tint_ftoi(vec3 v) {
-  return tint_select(ivec3(2147483647), tint_select(ivec3(v), ivec3((-2147483647 - 1)), lessThan(v, vec3(-2147483648.0f))), lessThan(v, vec3(2147483520.0f)));
+  return tint_select(ivec3(2147483647), tint_select(ivec3(v), ivec3((-2147483647 - 1)), lessThan(v, vec3(-2147483648.0f))), lessThanEqual(v, vec3(2147483520.0f)));
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.msl
index 345e554..8e684f3 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int3 tint_ftoi(float3 v) {
-  return select(int3(2147483647), select(int3(v), int3((-2147483647 - 1)), (v < float3(-2147483648.0f))), (v < float3(2147483520.0f)));
+  return select(int3(2147483647), select(int3(v), int3((-2147483647 - 1)), (v < float3(-2147483648.0f))), (v <= float3(2147483520.0f)));
 }
 
 float3 m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.dxc.hlsl
index f8bb14a..0b0d4b0 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.fxc.hlsl
index f8bb14a..0b0d4b0 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.glsl
index 8e1b3c1..8c46c48 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 uvec3 tint_ftou(vec3 v) {
-  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThan(v, vec3(4294967040.0f)));
+  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThanEqual(v, vec3(4294967040.0f)));
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.msl
index fc37190..1f9022f 100644
--- a/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec3/function/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint3 tint_ftou(float3 v) {
-  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v < float3(4294967040.0f)));
+  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v <= float3(4294967040.0f)));
 }
 
 float3 m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.dxc.hlsl
index e7ebba4..f1020b8 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int3 tint_ftoi(float3 v) {
-  return ((v < (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
+  return ((v <= (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
 }
 
 static float3 u = (1.0f).xxx;
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.fxc.hlsl
index e7ebba4..f1020b8 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int3 tint_ftoi(float3 v) {
-  return ((v < (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
+  return ((v <= (2147483520.0f).xxx) ? ((v < (-2147483648.0f).xxx) ? (-2147483648).xxx : int3(v)) : (2147483647).xxx);
 }
 
 static float3 u = (1.0f).xxx;
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.glsl
index 83cd400..0d4a7b9 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 ivec3 tint_ftoi(vec3 v) {
-  return tint_select(ivec3(2147483647), tint_select(ivec3(v), ivec3((-2147483647 - 1)), lessThan(v, vec3(-2147483648.0f))), lessThan(v, vec3(2147483520.0f)));
+  return tint_select(ivec3(2147483647), tint_select(ivec3(v), ivec3((-2147483647 - 1)), lessThan(v, vec3(-2147483648.0f))), lessThanEqual(v, vec3(2147483520.0f)));
 }
 
 vec3 u = vec3(1.0f);
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.msl
index 217ec91..108148a 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int3 tint_ftoi(float3 v) {
-  return select(int3(2147483647), select(int3(v), int3((-2147483647 - 1)), (v < float3(-2147483648.0f))), (v < float3(2147483520.0f)));
+  return select(int3(2147483647), select(int3(v), int3((-2147483647 - 1)), (v < float3(-2147483648.0f))), (v <= float3(2147483520.0f)));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.dxc.hlsl
index 555ac46..30cb479 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 static float3 u = (1.0f).xxx;
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.fxc.hlsl
index 555ac46..30cb479 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint3 tint_ftou(float3 v) {
-  return ((v < (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
+  return ((v <= (4294967040.0f).xxx) ? ((v < (0.0f).xxx) ? (0u).xxx : uint3(v)) : (4294967295u).xxx);
 }
 
 static float3 u = (1.0f).xxx;
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.glsl
index 7b3dee0..cd85e7d 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 uvec3 tint_ftou(vec3 v) {
-  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThan(v, vec3(4294967040.0f)));
+  return tint_select(uvec3(4294967295u), tint_select(uvec3(v), uvec3(0u), lessThan(v, vec3(0.0f))), lessThanEqual(v, vec3(4294967040.0f)));
 }
 
 vec3 u = vec3(1.0f);
diff --git a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.msl
index df43faf..79e3e81 100644
--- a/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec3/var/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint3 tint_ftou(float3 v) {
-  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v < float3(4294967040.0f)));
+  return select(uint3(4294967295u), select(uint3(v), uint3(0u), (v < float3(0.0f))), (v <= float3(4294967040.0f)));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.dxc.hlsl
index c803fd8..bf9be55 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int4 tint_ftoi(float4 v) {
-  return ((v < (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
+  return ((v <= (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.fxc.hlsl
index c803fd8..bf9be55 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int4 tint_ftoi(float4 v) {
-  return ((v < (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
+  return ((v <= (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.glsl
index 4dbbae9..b8faed3 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 ivec4 tint_ftoi(vec4 v) {
-  return tint_select(ivec4(2147483647), tint_select(ivec4(v), ivec4((-2147483647 - 1)), lessThan(v, vec4(-2147483648.0f))), lessThan(v, vec4(2147483520.0f)));
+  return tint_select(ivec4(2147483647), tint_select(ivec4(v), ivec4((-2147483647 - 1)), lessThan(v, vec4(-2147483648.0f))), lessThanEqual(v, vec4(2147483520.0f)));
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.msl
index 850c881..d2e46ab 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int4 tint_ftoi(float4 v) {
-  return select(int4(2147483647), select(int4(v), int4((-2147483647 - 1)), (v < float4(-2147483648.0f))), (v < float4(2147483520.0f)));
+  return select(int4(2147483647), select(int4(v), int4((-2147483647 - 1)), (v < float4(-2147483648.0f))), (v <= float4(2147483520.0f)));
 }
 
 float4 m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.dxc.hlsl
index b70388a..b3c2c88 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint4 tint_ftou(float4 v) {
-  return ((v < (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
+  return ((v <= (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.fxc.hlsl
index b70388a..b3c2c88 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint4 tint_ftou(float4 v) {
-  return ((v < (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
+  return ((v <= (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
 }
 
 static float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.glsl
index 58174fb..f027cbb 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 uvec4 tint_ftou(vec4 v) {
-  return tint_select(uvec4(4294967295u), tint_select(uvec4(v), uvec4(0u), lessThan(v, vec4(0.0f))), lessThan(v, vec4(4294967040.0f)));
+  return tint_select(uvec4(4294967295u), tint_select(uvec4(v), uvec4(0u), lessThan(v, vec4(0.0f))), lessThanEqual(v, vec4(4294967040.0f)));
 }
 
 float t = 0.0f;
diff --git a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.msl
index f51511f..2517455 100644
--- a/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec4/function/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint4 tint_ftou(float4 v) {
-  return select(uint4(4294967295u), select(uint4(v), uint4(0u), (v < float4(0.0f))), (v < float4(4294967040.0f)));
+  return select(uint4(4294967295u), select(uint4(v), uint4(0u), (v < float4(0.0f))), (v <= float4(4294967040.0f)));
 }
 
 float4 m(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.dxc.hlsl
index 95d1e53..b97a357 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int4 tint_ftoi(float4 v) {
-  return ((v < (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
+  return ((v <= (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
 }
 
 static float4 u = (1.0f).xxxx;
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.fxc.hlsl
index 95d1e53..b97a357 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 int4 tint_ftoi(float4 v) {
-  return ((v < (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
+  return ((v <= (2147483520.0f).xxxx) ? ((v < (-2147483648.0f).xxxx) ? (-2147483648).xxxx : int4(v)) : (2147483647).xxxx);
 }
 
 static float4 u = (1.0f).xxxx;
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.glsl
index 5aae484..95ace30 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 ivec4 tint_ftoi(vec4 v) {
-  return tint_select(ivec4(2147483647), tint_select(ivec4(v), ivec4((-2147483647 - 1)), lessThan(v, vec4(-2147483648.0f))), lessThan(v, vec4(2147483520.0f)));
+  return tint_select(ivec4(2147483647), tint_select(ivec4(v), ivec4((-2147483647 - 1)), lessThan(v, vec4(-2147483648.0f))), lessThanEqual(v, vec4(2147483520.0f)));
 }
 
 vec4 u = vec4(1.0f);
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.msl
index e0ef880..406f0ba 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-i32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 int4 tint_ftoi(float4 v) {
-  return select(int4(2147483647), select(int4(v), int4((-2147483647 - 1)), (v < float4(-2147483648.0f))), (v < float4(2147483520.0f)));
+  return select(int4(2147483647), select(int4(v), int4((-2147483647 - 1)), (v < float4(-2147483648.0f))), (v <= float4(2147483520.0f)));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.dxc.hlsl b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.dxc.hlsl
index 9a75d5d..37c6a17 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.dxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.dxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint4 tint_ftou(float4 v) {
-  return ((v < (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
+  return ((v <= (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
 }
 
 static float4 u = (1.0f).xxxx;
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.fxc.hlsl b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.fxc.hlsl
index 9a75d5d..37c6a17 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.fxc.hlsl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.fxc.hlsl
@@ -4,7 +4,7 @@
 }
 
 uint4 tint_ftou(float4 v) {
-  return ((v < (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
+  return ((v <= (4294967040.0f).xxxx) ? ((v < (0.0f).xxxx) ? (0u).xxxx : uint4(v)) : (4294967295u).xxxx);
 }
 
 static float4 u = (1.0f).xxxx;
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.glsl b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.glsl
index 983c0b9..28f9fd4 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.glsl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.glsl
@@ -10,7 +10,7 @@
   return;
 }
 uvec4 tint_ftou(vec4 v) {
-  return tint_select(uvec4(4294967295u), tint_select(uvec4(v), uvec4(0u), lessThan(v, vec4(0.0f))), lessThan(v, vec4(4294967040.0f)));
+  return tint_select(uvec4(4294967295u), tint_select(uvec4(v), uvec4(0u), lessThan(v, vec4(0.0f))), lessThanEqual(v, vec4(4294967040.0f)));
 }
 
 vec4 u = vec4(1.0f);
diff --git a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.msl b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.msl
index 3097856..3e29a99 100644
--- a/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.msl
+++ b/test/tint/expressions/type_conv/vec4/var/f32-u32.wgsl.expected.msl
@@ -6,7 +6,7 @@
 };
 
 uint4 tint_ftou(float4 v) {
-  return select(uint4(4294967295u), select(uint4(v), uint4(0u), (v < float4(0.0f))), (v < float4(4294967040.0f)));
+  return select(uint4(4294967295u), select(uint4(v), uint4(0u), (v < float4(0.0f))), (v <= float4(4294967040.0f)));
 }
 
 void f(thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.dxc.hlsl
index 2ded420..9598c84 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.dxc.hlsl
@@ -29,7 +29,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.fxc.hlsl
index 2ded420..9598c84 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.fxc.hlsl
@@ -29,7 +29,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl
index 22f07c2..6583509 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin.wgsl.expected.msl
@@ -30,7 +30,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(float4 pos, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.dxc.hlsl
index b7a3e94..69bc101 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.dxc.hlsl
@@ -30,7 +30,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos, float4 uv) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.fxc.hlsl
index b7a3e94..69bc101 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.fxc.hlsl
@@ -30,7 +30,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos, float4 uv) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl
index e4e53f6..94bdeb4 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location.wgsl.expected.msl
@@ -31,7 +31,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(float4 pos, float4 uv, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.dxc.hlsl
index f1ff84c..ccd1108 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.dxc.hlsl
@@ -33,7 +33,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos, In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.fxc.hlsl
index f1ff84c..ccd1108 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.fxc.hlsl
@@ -33,7 +33,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos, In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl
index 3702226..0ff3a59 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_and_location_in_struct.wgsl.expected.msl
@@ -35,7 +35,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(float4 pos, In in, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.dxc.hlsl
index 8a5c3f1..db77980 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.dxc.hlsl
@@ -32,7 +32,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.fxc.hlsl
index 8a5c3f1..db77980 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.fxc.hlsl
@@ -32,7 +32,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl
index b268226..1360112 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct.wgsl.expected.msl
@@ -34,7 +34,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(In in, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.dxc.hlsl
index 37e74b5..9a74254 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.dxc.hlsl
@@ -33,7 +33,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol, float4 uv) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.fxc.hlsl
index 37e74b5..9a74254 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.fxc.hlsl
@@ -33,7 +33,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol, float4 uv) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl
index 912cda3..c66db6b 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location.wgsl.expected.msl
@@ -35,7 +35,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(In in, float4 uv, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.dxc.hlsl
index d28b9c1..e3e050e 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.dxc.hlsl
@@ -34,7 +34,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.fxc.hlsl
index d28b9c1..e3e050e 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.fxc.hlsl
@@ -34,7 +34,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl
index ca1c170..4ddb0ef 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/builtin_in_struct_and_location_in_struct.wgsl.expected.msl
@@ -36,7 +36,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(In in, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.dxc.hlsl
index 93fe157..ca97de7 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.dxc.hlsl
@@ -29,7 +29,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.fxc.hlsl
index 93fe157..ca97de7 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.fxc.hlsl
@@ -29,7 +29,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 pos) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl
index 22f07c2..6583509 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin.wgsl.expected.msl
@@ -30,7 +30,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(float4 pos, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.dxc.hlsl
index 37a46cc..10c278f 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.dxc.hlsl
@@ -32,7 +32,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.fxc.hlsl
index 37a46cc..10c278f 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.fxc.hlsl
@@ -32,7 +32,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl
index b268226..1360112 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/invariant_builtin_in_struct.wgsl.expected.msl
@@ -34,7 +34,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(In in, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.dxc.hlsl
index f154fd5..28f22e7 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.dxc.hlsl
@@ -31,7 +31,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 a, float4 b) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.fxc.hlsl
index f154fd5..28f22e7 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.fxc.hlsl
@@ -31,7 +31,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(float4 a, float4 b) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl
index 44a3bec..23c96f2 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location.wgsl.expected.msl
@@ -32,7 +32,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(float4 a, float4 b, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.dxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.dxc.hlsl
index 05873d6..9d4217d 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.dxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.dxc.hlsl
@@ -35,7 +35,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.fxc.hlsl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.fxc.hlsl
index 05873d6..9d4217d 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.fxc.hlsl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.fxc.hlsl
@@ -35,7 +35,7 @@
 };
 
 uint tint_ftou(float v) {
-  return ((v < 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
+  return ((v <= 4294967040.0f) ? ((v < 0.0f) ? 0u : uint(v)) : 4294967295u);
 }
 
 void f_inner(In tint_symbol) {
diff --git a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl
index 4fe9b49..7ea93fb 100644
--- a/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl
+++ b/test/tint/extensions/pixel_local/entry_point_use/additional_params/location_in_struct.wgsl.expected.msl
@@ -37,7 +37,7 @@
 };
 
 uint tint_ftou(float v) {
-  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v < 4294967040.0f));
+  return select(4294967295u, select(uint(v), 0u, (v < 0.0f)), (v <= 4294967040.0f));
 }
 
 void f_inner(In in, thread tint_private_vars_struct* const tint_private_vars) {
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.dxc.hlsl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.dxc.hlsl
index 2552ae9..aa4cd83 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.dxc.hlsl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.dxc.hlsl
@@ -1,7 +1,7 @@
 static bool tint_discarded = false;
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 Texture2D<float4> t : register(t0);
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.fxc.hlsl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.fxc.hlsl
index 2552ae9..aa4cd83 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.fxc.hlsl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.fxc.hlsl
@@ -1,7 +1,7 @@
 static bool tint_discarded = false;
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? -2147483648 : int(v)) : 2147483647);
 }
 
 Texture2D<float4> t : register(t0);
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.glsl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.glsl
index d523df0..934ccda 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.glsl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.glsl
@@ -3,7 +3,7 @@
 precision highp int;
 
 int tint_ftoi(float v) {
-  return ((v < 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
+  return ((v <= 2147483520.0f) ? ((v < -2147483648.0f) ? (-2147483647 - 1) : int(v)) : 2147483647);
 }
 
 bool tint_discarded = false;
diff --git a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.msl b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.msl
index c1ac153..5c54c35 100644
--- a/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.msl
+++ b/test/tint/statements/discard/atomic_in_for_loop_continuing.wgsl.expected.msl
@@ -11,7 +11,7 @@
 };
 
 int tint_ftoi(float v) {
-  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v < 2147483520.0f));
+  return select(2147483647, select(int(v), (-2147483647 - 1), (v < -2147483648.0f)), (v <= 2147483520.0f));
 }
 
 struct tint_symbol_2 {