diff --git a/src/tint/intrinsics.def b/src/tint/intrinsics.def
index f2b4d7e..4bb101e 100644
--- a/src/tint/intrinsics.def
+++ b/src/tint/intrinsics.def
@@ -491,8 +491,8 @@
 fn inverseSqrt<N: num, T: f32_f16>(vec<N, T>) -> vec<N, T>
 fn ldexp<T: f32_f16>(T, i32) -> T
 fn ldexp<N: num, T: f32_f16>(vec<N, T>, vec<N, i32>) -> vec<N, T>
-fn length<T: f32_f16>(T) -> T
-fn length<N: num, T: f32_f16>(vec<N, T>) -> T
+@const fn length<T: fa_f32_f16>(@test_value(0.0) T) -> T
+@const fn length<N: num, T: fa_f32_f16>(@test_value(0.0) vec<N, T>) -> T
 fn log<T: f32_f16>(T) -> T
 fn log<N: num, T: f32_f16>(vec<N, T>) -> vec<N, T>
 fn log2<T: f32_f16>(T) -> T
diff --git a/src/tint/resolver/builtin_test.cc b/src/tint/resolver/builtin_test.cc
index 9fc6090..c6ca1f4 100644
--- a/src/tint/resolver/builtin_test.cc
+++ b/src/tint/resolver/builtin_test.cc
@@ -1184,8 +1184,8 @@
     EXPECT_EQ(r()->error(), R"(error: no matching call to length()
 
 2 candidate functions:
-  length(T) -> T  where: T is f32 or f16
-  length(vecN<T>) -> T  where: T is f32 or f16
+  length(T) -> T  where: T is abstract-float, f32 or f16
+  length(vecN<T>) -> T  where: T is abstract-float, f32 or f16
 )");
 }
 
@@ -1198,8 +1198,8 @@
     EXPECT_EQ(r()->error(), R"(error: no matching call to length(f32, f32)
 
 2 candidate functions:
-  length(T) -> T  where: T is f32 or f16
-  length(vecN<T>) -> T  where: T is f32 or f16
+  length(T) -> T  where: T is abstract-float, f32 or f16
+  length(vecN<T>) -> T  where: T is abstract-float, f32 or f16
 )");
 }
 
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index 28e100e..6cdf8f4 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -891,6 +891,24 @@
 }
 
 template <typename NumberT>
+utils::Result<NumberT> ConstEval::Sqrt(const Source& source, NumberT v) {
+    if (v < NumberT(0)) {
+        AddError("sqrt must be called with a value >= 0", source);
+        return utils::Failure;
+    }
+    return NumberT{std::sqrt(v)};
+}
+
+auto ConstEval::SqrtFunc(const Source& source, const sem::Type* elem_ty) {
+    return [=](auto v) -> ImplResult {
+        if (auto r = Sqrt(source, v)) {
+            return CreateElement(builder, source, elem_ty, r.Get());
+        }
+        return utils::Failure;
+    };
+}
+
+template <typename NumberT>
 utils::Result<NumberT> ConstEval::Clamp(const Source&, NumberT e, NumberT low, NumberT high) {
     return NumberT{std::min(std::max(e, low), high)};
 }
@@ -968,6 +986,33 @@
         };
 }
 
+ConstEval::Result ConstEval::Dot(const Source& source,
+                                 const sem::Constant* v1,
+                                 const sem::Constant* v2) {
+    auto* vec_ty = v1->Type()->As<sem::Vector>();
+    TINT_ASSERT(Resolver, vec_ty);
+    auto* elem_ty = vec_ty->type();
+    switch (vec_ty->Width()) {
+        case 2:
+            return Dispatch_fia_fiu32_f16(   //
+                Dot2Func(source, elem_ty),   //
+                v1->Index(0), v1->Index(1),  //
+                v2->Index(0), v2->Index(1));
+        case 3:
+            return Dispatch_fia_fiu32_f16(                 //
+                Dot3Func(source, elem_ty),                 //
+                v1->Index(0), v1->Index(1), v1->Index(2),  //
+                v2->Index(0), v2->Index(1), v2->Index(2));
+        case 4:
+            return Dispatch_fia_fiu32_f16(                               //
+                Dot4Func(source, elem_ty),                               //
+                v1->Index(0), v1->Index(1), v1->Index(2), v1->Index(3),  //
+                v2->Index(0), v2->Index(1), v2->Index(2), v2->Index(3));
+    }
+    TINT_ICE(Resolver, builder.Diagnostics()) << "Expected vector";
+    return utils::Failure;
+}
+
 auto ConstEval::Det2Func(const Source& source, const sem::Type* elem_ty) {
     return [=](auto a, auto b, auto c, auto d) -> ImplResult {
         if (auto r = Det2(source, a, b, c, d)) {
@@ -1969,30 +2014,10 @@
     return TransformElements(builder, ty, transform, args[0]);
 }
 
-ConstEval::Result ConstEval::dot(const sem::Type* ty,
+ConstEval::Result ConstEval::dot(const sem::Type*,
                                  utils::VectorRef<const sem::Constant*> args,
                                  const Source& source) {
-    auto calculate = [&]() -> ImplResult {
-        auto* v1 = args[0];
-        auto* v2 = args[1];
-        auto* vec_ty = v1->Type()->As<sem::Vector>();
-        switch (vec_ty->Width()) {
-            case 2:
-                return Dispatch_fia_fiu32_f16(Dot2Func(source, ty), v1->Index(0), v1->Index(1),
-                                              v2->Index(0), v2->Index(1));
-            case 3:
-                return Dispatch_fia_fiu32_f16(Dot3Func(source, ty), v1->Index(0), v1->Index(1),
-                                              v1->Index(2), v2->Index(0), v2->Index(1),
-                                              v2->Index(2));
-            case 4:
-                return Dispatch_fia_fiu32_f16(Dot4Func(source, ty), v1->Index(0), v1->Index(1),
-                                              v1->Index(2), v1->Index(3), v2->Index(0),
-                                              v2->Index(1), v2->Index(2), v2->Index(3));
-        }
-        TINT_ICE(Resolver, builder.Diagnostics()) << "Expected scalar or vector";
-        return utils::Failure;
-    };
-    auto r = calculate();
+    auto r = Dot(source, args[0], args[1]);
     if (!r) {
         AddNote("when calculating dot", source);
     }
@@ -2188,6 +2213,35 @@
     return TransformElements(builder, ty, transform, args[0], args[1]);
 }
 
+ConstEval::Result ConstEval::length(const sem::Type* ty,
+                                    utils::VectorRef<const sem::Constant*> args,
+                                    const Source& source) {
+    auto calculate = [&]() -> ImplResult {
+        auto* vec_ty = args[0]->Type()->As<sem::Vector>();
+
+        // Evaluates to the absolute value of e if T is scalar.
+        if (vec_ty == nullptr) {
+            auto create = [&](auto e) {
+                using NumberT = decltype(e);
+                return CreateElement(builder, source, ty, NumberT{std::abs(e)});
+            };
+            return Dispatch_fa_f32_f16(create, args[0]);
+        }
+
+        // Evaluates to sqrt(e[0]^2 + e[1]^2 + ...) if T is a vector type.
+        auto d = Dot(source, args[0], args[0]);
+        if (!d) {
+            return utils::Failure;
+        }
+        return Dispatch_fa_f32_f16(SqrtFunc(source, ty), d.Get());
+    };
+    auto r = calculate();
+    if (!r) {
+        AddNote("when calculating length", source);
+    }
+    return r;
+}
+
 ConstEval::Result ConstEval::max(const sem::Type* ty,
                                  utils::VectorRef<const sem::Constant*> args,
                                  const Source& source) {
@@ -2561,15 +2615,7 @@
                                   utils::VectorRef<const sem::Constant*> args,
                                   const Source& source) {
     auto transform = [&](const sem::Constant* c0) {
-        auto create = [&](auto i) -> ImplResult {
-            using NumberT = decltype(i);
-            if (i < NumberT(0)) {
-                AddError("sqrt must be called with a value >= 0", source);
-                return utils::Failure;
-            }
-            return CreateElement(builder, source, c0->Type(), NumberT(std::sqrt(i.value)));
-        };
-        return Dispatch_fa_f32_f16(create, c0);
+        return Dispatch_fa_f32_f16(SqrtFunc(source, c0->Type()), c0);
     };
 
     return TransformElements(builder, ty, transform, args[0]);
diff --git a/src/tint/resolver/const_eval.h b/src/tint/resolver/const_eval.h
index cb1babd..496e138 100644
--- a/src/tint/resolver/const_eval.h
+++ b/src/tint/resolver/const_eval.h
@@ -601,6 +601,15 @@
                       utils::VectorRef<const sem::Constant*> args,
                       const Source& source);
 
+    /// length builtin
+    /// @param ty the expression type
+    /// @param args the input arguments
+    /// @param source the source location
+    /// @return the result value, or null if the value cannot be calculated
+    Result length(const sem::Type* ty,
+                  utils::VectorRef<const sem::Constant*> args,
+                  const Source& source);
+
     /// max builtin
     /// @param ty the expression type
     /// @param args the input arguments
@@ -962,6 +971,9 @@
                                 NumberT b1,
                                 NumberT b2);
 
+    template <typename NumberT>
+    utils::Result<NumberT> Sqrt(const Source& source, NumberT v);
+
     /// Clamps e between low and high
     /// @param source the source location
     /// @param e the number to clamp
@@ -1034,6 +1046,20 @@
     /// @returns the callable function
     auto ClampFunc(const Source& source, const sem::Type* elem_ty);
 
+    /// Returns a callable that calls SqrtFunc, and creates a Constant with its
+    /// result of type `elem_ty` if successful, or returns Failure otherwise.
+    /// @param source the source location
+    /// @param elem_ty the element type of the Constant to create on success
+    /// @returns the callable function
+    auto SqrtFunc(const Source& source, const sem::Type* elem_ty);
+
+    /// Returns the dot product of v1 and v2.
+    /// @param source the source location
+    /// @param v1 the first vector
+    /// @param v2 the second vector
+    /// @returns the dot product
+    Result Dot(const Source& source, const sem::Constant* v1, const sem::Constant* v2);
+
     ProgramBuilder& builder;
 };
 
diff --git a/src/tint/resolver/const_eval_builtin_test.cc b/src/tint/resolver/const_eval_builtin_test.cc
index 6c6d193..13bbac5 100644
--- a/src/tint/resolver/const_eval_builtin_test.cc
+++ b/src/tint/resolver/const_eval_builtin_test.cc
@@ -41,10 +41,12 @@
         return *this;
     }
 
-    /// Expected value should be compared using FLOAT_EQ instead of EQ
-    Case& FloatComp() {
+    /// Expected value should be compared using EXPECT_FLOAT_EQ instead of EXPECT_EQ.
+    /// If optional epsilon is passed in, will be compared using EXPECT_NEAR with that epsilon.
+    Case& FloatComp(std::optional<double> epsilon = {}) {
         Success s = expected.Get();
         s.flags.float_compare = true;
+        s.flags.float_compare_epsilon = epsilon;
         expected = s;
         return *this;
     }
@@ -1177,6 +1179,65 @@
                                               ExtractBitsCases<u32>()))));
 
 template <typename T>
+std::vector<Case> LengthCases() {
+    const auto kSqrtOfHighest = T(std::sqrt(T::Highest()));
+    const auto kSqrtOfHighestSquared = T(kSqrtOfHighest * kSqrtOfHighest);
+
+    auto error_msg = [](auto a, const char* op, auto b) {
+        return "12:34 error: " + OverflowErrorMessage(a, op, b) + R"(
+12:34 note: when calculating length)";
+    };
+    return {
+        C({T(0)}, T(0)),
+        C({Vec(T(0), T(0))}, Val(T(0))),
+        C({Vec(T(0), T(0), T(0))}, Val(T(0))),
+        C({Vec(T(0), T(0), T(0), T(0))}, Val(T(0))),
+
+        C({T(1)}, T(1)),
+        C({Vec(T(1), T(1))}, Val(T(std::sqrt(2)))),
+        C({Vec(T(1), T(1), T(1))}, Val(T(std::sqrt(3)))),
+        C({Vec(T(1), T(1), T(1), T(1))}, Val(T(std::sqrt(4)))),
+
+        C({T(2)}, T(2)),
+        C({Vec(T(2), T(2))}, Val(T(std::sqrt(8)))),
+        C({Vec(T(2), T(2), T(2))}, Val(T(std::sqrt(12)))),
+        C({Vec(T(2), T(2), T(2), T(2))}, Val(T(std::sqrt(16)))),
+
+        C({Vec(T(2), T(3))}, Val(T(std::sqrt(13)))),
+        C({Vec(T(2), T(3), T(4))}, Val(T(std::sqrt(29)))),
+        C({Vec(T(2), T(3), T(4), T(5))}, Val(T(std::sqrt(54)))),
+
+        C({T(-5)}, T(5)),
+        C({T::Highest()}, T::Highest()),
+        C({T::Lowest()}, T::Highest()),
+
+        C({Vec(T(-2), T(-3), T(-4), T(-5))}, Val(T(std::sqrt(54)))),
+        C({Vec(T(2), T(-3), T(4), T(-5))}, Val(T(std::sqrt(54)))),
+        C({Vec(T(-2), T(3), T(-4), T(5))}, Val(T(std::sqrt(54)))),
+
+        C({Vec(kSqrtOfHighest, T(0))}, Val(kSqrtOfHighest)).FloatComp(0.2),
+        C({Vec(T(0), kSqrtOfHighest)}, Val(kSqrtOfHighest)).FloatComp(0.2),
+
+        C({Vec(-kSqrtOfHighest, T(0))}, Val(kSqrtOfHighest)).FloatComp(0.2),
+        C({Vec(T(0), -kSqrtOfHighest)}, Val(kSqrtOfHighest)).FloatComp(0.2),
+
+        // Overflow when squaring a term
+        E({Vec(T::Highest(), T(0))}, error_msg(T::Highest(), "*", T::Highest())),
+        E({Vec(T(0), T::Highest())}, error_msg(T::Highest(), "*", T::Highest())),
+        // Overflow when adding squared terms
+        E({Vec(kSqrtOfHighest, kSqrtOfHighest)},
+          error_msg(kSqrtOfHighestSquared, "+", kSqrtOfHighestSquared)),
+    };
+}
+INSTANTIATE_TEST_SUITE_P(  //
+    Length,
+    ResolverConstEvalBuiltinTest,
+    testing::Combine(testing::Values(sem::BuiltinType::kLength),
+                     testing::ValuesIn(Concat(LengthCases<AFloat>(),  //
+                                              LengthCases<f32>(),
+                                              LengthCases<f16>()))));
+
+template <typename T>
 std::vector<Case> MaxCases() {
     return {
         C({T(0), T(0)}, T(0)),
diff --git a/src/tint/resolver/const_eval_test.h b/src/tint/resolver/const_eval_test.h
index 908d7e2..bc85542 100644
--- a/src/tint/resolver/const_eval_test.h
+++ b/src/tint/resolver/const_eval_test.h
@@ -16,6 +16,7 @@
 #define SRC_TINT_RESOLVER_CONST_EVAL_TEST_H_
 
 #include <limits>
+#include <optional>
 #include <string>
 #include <utility>
 
@@ -74,8 +75,11 @@
 struct CheckConstantFlags {
     /// Expected value may be positive or negative
     bool pos_or_neg = false;
-    /// Expected value should be compared using FLOAT_EQ instead of EQ
+    /// Expected value should be compared using EXPECT_FLOAT_EQ instead of EQ, or EXPECT_NEAR if
+    /// float_compare_epsilon is set.
     bool float_compare = false;
+    /// Expected value should be compared using EXPECT_NEAR if float_compare is set.
+    std::optional<double> float_compare_epsilon;
 };
 
 /// CheckConstant checks that @p got_constant, the result value of
@@ -106,18 +110,16 @@
                         EXPECT_TRUE(std::isnan(got));
                     } else {
                         if (flags.pos_or_neg) {
-                            auto got_abs = Abs(got);
-                            if (flags.float_compare) {
-                                EXPECT_FLOAT_EQ(got_abs, expected);
+                            got = Abs(got);
+                        }
+                        if (flags.float_compare) {
+                            if (flags.float_compare_epsilon) {
+                                EXPECT_NEAR(got, expected, *flags.float_compare_epsilon);
                             } else {
-                                EXPECT_EQ(got_abs, expected);
+                                EXPECT_FLOAT_EQ(got, expected);
                             }
                         } else {
-                            if (flags.float_compare) {
-                                EXPECT_FLOAT_EQ(got, expected);
-                            } else {
-                                EXPECT_EQ(got, expected);
-                            }
+                            EXPECT_EQ(got, expected);
                         }
                     }
                 } else {
diff --git a/src/tint/resolver/intrinsic_table.inl b/src/tint/resolver/intrinsic_table.inl
index 91ff68c..7744960 100644
--- a/src/tint/resolver/intrinsic_table.inl
+++ b/src/tint/resolver/intrinsic_table.inl
@@ -12726,24 +12726,24 @@
     /* num parameters */ 1,
     /* num template types */ 1,
     /* num template numbers */ 0,
-    /* template types */ &kTemplateTypes[26],
+    /* template types */ &kTemplateTypes[23],
     /* template numbers */ &kTemplateNumbers[10],
     /* parameters */ &kParameters[872],
     /* return matcher indices */ &kMatcherIndices[3],
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
-    /* const eval */ nullptr,
+    /* const eval */ &ConstEval::length,
   },
   {
     /* [368] */
     /* num parameters */ 1,
     /* num template types */ 1,
     /* num template numbers */ 1,
-    /* template types */ &kTemplateTypes[26],
+    /* template types */ &kTemplateTypes[23],
     /* template numbers */ &kTemplateNumbers[4],
     /* parameters */ &kParameters[873],
     /* return matcher indices */ &kMatcherIndices[3],
     /* flags */ OverloadFlags(OverloadFlag::kIsBuiltin, OverloadFlag::kSupportsVertexPipeline, OverloadFlag::kSupportsFragmentPipeline, OverloadFlag::kSupportsComputePipeline),
-    /* const eval */ nullptr,
+    /* const eval */ &ConstEval::length,
   },
   {
     /* [369] */
@@ -14308,8 +14308,8 @@
   },
   {
     /* [47] */
-    /* fn length<T : f32_f16>(T) -> T */
-    /* fn length<N : num, T : f32_f16>(vec<N, T>) -> T */
+    /* fn length<T : fa_f32_f16>(@test_value(0) T) -> T */
+    /* fn length<N : num, T : fa_f32_f16>(@test_value(0) vec<N, T>) -> T */
     /* num overloads */ 2,
     /* overloads */ &kOverloads[367],
   },
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl b/test/tint/builtins/gen/literal/length/056071.wgsl
index 8fc39ba..e8d182c 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(vec<3, f32>) -> f32
 fn length_056071() {
-  var res: f32 = length(vec3<f32>(1.f));
+  var res: f32 = length(vec3<f32>(0.f));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl
index 059bd52..5866d13 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_056071() {
-  float res = length((1.0f).xxx);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl
index 059bd52..5866d13 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_056071() {
-  float res = length((1.0f).xxx);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl
index 13c4890..d70b411 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_056071() {
-  float res = length(vec3(1.0f));
+  float res = 0.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void length_056071() {
-  float res = length(vec3(1.0f));
+  float res = 0.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void length_056071() {
-  float res = length(vec3(1.0f));
+  float res = 0.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl
index 387e06d..7ccfb33 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_056071() {
-  float res = length(float3(1.0f));
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm
index 9f13f37..0a8134b 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
-         %14 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -31,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v3float %float_1 %float_1 %float_1
 %_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpTypeFunction %v4float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_056071 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_float Function %8
-         %13 = OpExtInst %float %14 Length %17
-               OpStore %res %13
+               OpStore %res %8
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %length_056071
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_056071
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %length_056071
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_056071
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_056071
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_056071
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl
index d83825d..34f59eb 100644
--- a/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/056071.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_056071() {
-  var res : f32 = length(vec3<f32>(1.0f));
+  var res : f32 = length(vec3<f32>(0.0f));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl
index 61b3d2b..44fc5bf 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<2, f16>) -> f16
 fn length_3f0e13() {
-  var res: f16 = length(vec2<f16>(1.h));
+  var res: f16 = length(vec2<f16>(0.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl
index aeb2c63..25a71d7 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_3f0e13() {
-  float16_t res = length((float16_t(1.0h)).xx);
+  float16_t res = float16_t(0.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl
index d1738a3..aa45582 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  float16_t res = length(f16vec2(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_3f0e13() {
-  float16_t res = length(f16vec2(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  float16_t res = length(f16vec2(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl
index 82464e6..4709c0d 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_3f0e13() {
-  half res = length(half2(1.0h));
+  half res = 0.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm
index c026dd5..8e47cf3 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.spvasm
@@ -1,14 +1,13 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -36,39 +35,35 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-     %v2half = OpTypeVector %half 2
-%half_0x1p_0 = OpConstant %half 0x1p+0
-         %18 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %14 = OpConstantNull %half
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %17 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_3f0e13 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %21
-         %13 = OpExtInst %half %15 Length %18
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_half Function %14
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %length_3f0e13
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %length_3f0e13
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_3f0e13
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %length_3f0e13
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl
index 295b05e..920ea1a 100644
--- a/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/3f0e13.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_3f0e13() {
-  var res : f16 = length(vec2<f16>(1.0h));
+  var res : f16 = length(vec2<f16>(0.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl b/test/tint/builtins/gen/literal/length/555aba.wgsl
new file mode 100644
index 0000000..595bb1b
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl
@@ -0,0 +1,43 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(vec<3, fa>) -> fa
+fn length_555aba() {
+  var res = length(vec3(0.));
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_555aba();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_555aba();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_555aba();
+}
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..ae75f2e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_555aba() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_555aba();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_555aba();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_555aba();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..ae75f2e
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_555aba() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_555aba();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_555aba();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_555aba();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.glsl
new file mode 100644
index 0000000..fb815a6
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_555aba() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_555aba();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_555aba() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_555aba();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_555aba() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_555aba();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.msl
new file mode 100644
index 0000000..c59618c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_555aba() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_555aba();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_555aba();
+  return;
+}
+
+kernel void compute_main() {
+  length_555aba();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.spvasm
new file mode 100644
index 0000000..d8d7c41
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_555aba "length_555aba"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_555aba = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_555aba
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_555aba
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_555aba
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.wgsl
new file mode 100644
index 0000000..ebae2ef
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/555aba.wgsl.expected.wgsl
@@ -0,0 +1,19 @@
+fn length_555aba() {
+  var res = length(vec3(0.0));
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_555aba();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_555aba();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_555aba();
+}
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl
index 50a2ef1..a15a013 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<4, f16>) -> f16
 fn length_5b1a9b() {
-  var res: f16 = length(vec4<f16>(1.h));
+  var res: f16 = length(vec4<f16>(0.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl
index df13890..1e64383 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_5b1a9b() {
-  float16_t res = length((float16_t(1.0h)).xxxx);
+  float16_t res = float16_t(0.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl
index faca950..27c14fd 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  float16_t res = length(f16vec4(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_5b1a9b() {
-  float16_t res = length(f16vec4(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  float16_t res = length(f16vec4(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl
index dff63ba..5fd0861 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_5b1a9b() {
-  half res = length(half4(1.0h));
+  half res = 0.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm
index bdc9042..3d31fb3 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.spvasm
@@ -1,14 +1,13 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -36,39 +35,35 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-     %v4half = OpTypeVector %half 4
-%half_0x1p_0 = OpConstant %half 0x1p+0
-         %18 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %14 = OpConstantNull %half
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %17 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_5b1a9b = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %21
-         %13 = OpExtInst %half %15 Length %18
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_half Function %14
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %length_5b1a9b
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %length_5b1a9b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_5b1a9b
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %length_5b1a9b
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl
index e94fb3f..c218c4a 100644
--- a/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/5b1a9b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_5b1a9b() {
-  var res : f16 = length(vec4<f16>(1.0h));
+  var res : f16 = length(vec4<f16>(0.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl b/test/tint/builtins/gen/literal/length/602a17.wgsl
index a9d4624..491582f 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(f32) -> f32
 fn length_602a17() {
-  var res: f32 = length(1.f);
+  var res: f32 = length(0.f);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl
index 0c0ce39..68960df 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_602a17() {
-  float res = length(1.0f);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl
index 0c0ce39..68960df 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_602a17() {
-  float res = length(1.0f);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl
index d6cce45..579e675 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_602a17() {
-  float res = length(1.0f);
+  float res = 0.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void length_602a17() {
-  float res = length(1.0f);
+  float res = 0.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void length_602a17() {
-  float res = length(1.0f);
+  float res = 0.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl
index 86bfa31..ee0c167 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_602a17() {
-  float res = fabs(1.0f);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm
index f42a9a5..d0aedc4 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 31
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
-         %14 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -31,35 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
-         %18 = OpTypeFunction %v4float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_602a17 = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_float Function %8
-         %13 = OpExtInst %float %14 Length %float_1
-               OpStore %res %13
+               OpStore %res %8
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %18
-         %20 = OpLabel
-         %21 = OpFunctionCall %void %length_602a17
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_602a17
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %23 = OpLabel
-         %24 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %24
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %length_602a17
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_602a17
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %length_602a17
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_602a17
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl
index 9209e3f..e1220e5 100644
--- a/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/602a17.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_602a17() {
-  var res : f32 = length(1.0f);
+  var res : f32 = length(0.0f);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl
new file mode 100644
index 0000000..359f2a0
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl
@@ -0,0 +1,43 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(vec<2, fa>) -> fa
+fn length_7b4741() {
+  var res = length(vec2(0.));
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_7b4741();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_7b4741();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_7b4741();
+}
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..08e83f5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_7b4741();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_7b4741();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_7b4741();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..08e83f5
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_7b4741();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_7b4741();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_7b4741();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.glsl
new file mode 100644
index 0000000..16c9226
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_7b4741();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_7b4741();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_7b4741();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.msl
new file mode 100644
index 0000000..7c9de19
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_7b4741();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_7b4741();
+  return;
+}
+
+kernel void compute_main() {
+  length_7b4741();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.spvasm
new file mode 100644
index 0000000..c85d9f2
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_7b4741 "length_7b4741"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_7b4741 = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_7b4741
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_7b4741
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_7b4741
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.wgsl
new file mode 100644
index 0000000..d38ad2a
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/7b4741.wgsl.expected.wgsl
@@ -0,0 +1,19 @@
+fn length_7b4741() {
+  var res = length(vec2(0.0));
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_7b4741();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_7b4741();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_7b4741();
+}
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl
new file mode 100644
index 0000000..1a5ea92
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl
@@ -0,0 +1,43 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(fa) -> fa
+fn length_936ad5() {
+  var res = length(0.);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_936ad5();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_936ad5();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_936ad5();
+}
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..cf6a772
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_936ad5();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_936ad5();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_936ad5();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..cf6a772
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_936ad5();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_936ad5();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_936ad5();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.glsl
new file mode 100644
index 0000000..cfb1b8c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_936ad5();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_936ad5();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_936ad5();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.msl
new file mode 100644
index 0000000..6a2e0a7
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_936ad5();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_936ad5();
+  return;
+}
+
+kernel void compute_main() {
+  length_936ad5();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.spvasm
new file mode 100644
index 0000000..a28538d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_936ad5 "length_936ad5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_936ad5 = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_936ad5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_936ad5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_936ad5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.wgsl
new file mode 100644
index 0000000..2e9ee0d
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/936ad5.wgsl.expected.wgsl
@@ -0,0 +1,19 @@
+fn length_936ad5() {
+  var res = length(0.0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_936ad5();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_936ad5();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_936ad5();
+}
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl
index 4d0092b..722e73f 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(vec<2, f32>) -> f32
 fn length_afde8b() {
-  var res: f32 = length(vec2<f32>(1.f));
+  var res: f32 = length(vec2<f32>(0.f));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl
index fedf5b1..42456bf 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_afde8b() {
-  float res = length((1.0f).xx);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl
index fedf5b1..42456bf 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_afde8b() {
-  float res = length((1.0f).xx);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl
index c81bf7b..769f7f0 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_afde8b() {
-  float res = length(vec2(1.0f));
+  float res = 0.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void length_afde8b() {
-  float res = length(vec2(1.0f));
+  float res = 0.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void length_afde8b() {
-  float res = length(vec2(1.0f));
+  float res = 0.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl
index 74668c5..5fed668 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_afde8b() {
-  float res = length(float2(1.0f));
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm
index d82d662..e17edea 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 33
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
-         %14 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -31,37 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %17 = OpConstantComposite %v2float %float_1 %float_1
 %_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpTypeFunction %v4float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_afde8b = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_float Function %8
-         %13 = OpExtInst %float %14 Length %17
-               OpStore %res %13
+               OpStore %res %8
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %length_afde8b
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_afde8b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %length_afde8b
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_afde8b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_afde8b
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_afde8b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl
index 77a600c..06b7d27 100644
--- a/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/afde8b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_afde8b() {
-  var res : f32 = length(vec2<f32>(1.0f));
+  var res : f32 = length(vec2<f32>(0.0f));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl
index cca9b19..1319ded 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<3, f16>) -> f16
 fn length_ba16d6() {
-  var res: f16 = length(vec3<f16>(1.h));
+  var res: f16 = length(vec3<f16>(0.h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl
index 9cb7003..6439c99 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_ba16d6() {
-  float16_t res = length((float16_t(1.0h)).xxx);
+  float16_t res = float16_t(0.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl
index 676602a..11ed9cc 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  float16_t res = length(f16vec3(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_ba16d6() {
-  float16_t res = length(f16vec3(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  float16_t res = length(f16vec3(1.0hf));
+  float16_t res = 0.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl
index 02c8d79..f0ac6aa 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_ba16d6() {
-  half res = length(half3(1.0h));
+  half res = 0.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm
index bb6cac0..4dc8dc4 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.spvasm
@@ -1,14 +1,13 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -36,39 +35,35 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-     %v3half = OpTypeVector %half 3
-%half_0x1p_0 = OpConstant %half 0x1p+0
-         %18 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %14 = OpConstantNull %half
 %_ptr_Function_half = OpTypePointer Function %half
-         %21 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %17 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_ba16d6 = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %21
-         %13 = OpExtInst %half %15 Length %18
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_half Function %14
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %length_ba16d6
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %length_ba16d6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_ba16d6
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %length_ba16d6
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl
index 7c54ecb..16aee35 100644
--- a/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/ba16d6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_ba16d6() {
-  var res : f16 = length(vec3<f16>(1.0h));
+  var res : f16 = length(vec3<f16>(0.0h));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl b/test/tint/builtins/gen/literal/length/becebf.wgsl
index 7429e61..55981c8 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(vec<4, f32>) -> f32
 fn length_becebf() {
-  var res: f32 = length(vec4<f32>(1.f));
+  var res: f32 = length(vec4<f32>(0.f));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl
index 2d55ef8..340a531 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_becebf() {
-  float res = length((1.0f).xxxx);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl
index 2d55ef8..340a531 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_becebf() {
-  float res = length((1.0f).xxxx);
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl
index b836746..1f7b1da 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_becebf() {
-  float res = length(vec4(1.0f));
+  float res = 0.0f;
 }
 
 vec4 vertex_main() {
@@ -21,7 +21,7 @@
 precision mediump float;
 
 void length_becebf() {
-  float res = length(vec4(1.0f));
+  float res = 0.0f;
 }
 
 void fragment_main() {
@@ -35,7 +35,7 @@
 #version 310 es
 
 void length_becebf() {
-  float res = length(vec4(1.0f));
+  float res = 0.0f;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl
index fdc96aa..5ddf5a6 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_becebf() {
-  float res = length(float4(1.0f));
+  float res = 0.0f;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm
index 5ca602f..a5cc92d 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.spvasm
@@ -1,10 +1,9 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 32
+; Bound: 29
 ; Schema: 0
                OpCapability Shader
-         %14 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -31,36 +30,34 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-         %16 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
 %_ptr_Function_float = OpTypePointer Function %float
-         %19 = OpTypeFunction %v4float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_becebf = OpFunction %void None %9
          %12 = OpLabel
         %res = OpVariable %_ptr_Function_float Function %8
-         %13 = OpExtInst %float %14 Length %16
-               OpStore %res %13
+               OpStore %res %8
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %19
-         %21 = OpLabel
-         %22 = OpFunctionCall %void %length_becebf
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_becebf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %24 = OpLabel
-         %25 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %25
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %void %length_becebf
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_becebf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %length_becebf
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_becebf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl
index e6e3b71..4433e77 100644
--- a/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/becebf.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_becebf() {
-  var res : f32 = length(vec4<f32>(1.0f));
+  var res : f32 = length(vec4<f32>(0.0f));
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl b/test/tint/builtins/gen/literal/length/c158da.wgsl
index cde0e0c..9733c9e 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(f16) -> f16
 fn length_c158da() {
-  var res: f16 = length(1.h);
+  var res: f16 = length(0.h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl
index 05771c2..26407dc 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_c158da() {
-  float16_t res = length(float16_t(1.0h));
+  float16_t res = float16_t(0.0h);
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl
index d60a08b..b276e06 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t res = length(1.0hf);
+  float16_t res = 0.0hf;
 }
 
 vec4 vertex_main() {
@@ -23,7 +23,7 @@
 precision mediump float;
 
 void length_c158da() {
-  float16_t res = length(1.0hf);
+  float16_t res = 0.0hf;
 }
 
 void fragment_main() {
@@ -38,7 +38,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t res = length(1.0hf);
+  float16_t res = 0.0hf;
 }
 
 void compute_main() {
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl
index b1858e1..432f101 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_c158da() {
-  half res = fabs(1.0h);
+  half res = 0.0h;
 }
 
 struct tint_symbol {
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm
index ec976a1..f822ca5 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.spvasm
@@ -1,14 +1,13 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 34
+; Bound: 31
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %15 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -36,37 +35,35 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-%half_0x1p_0 = OpConstant %half 0x1p+0
+         %14 = OpConstantNull %half
 %_ptr_Function_half = OpTypePointer Function %half
-         %19 = OpConstantNull %half
-         %20 = OpTypeFunction %v4float
+         %17 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_c158da = OpFunction %void None %9
          %12 = OpLabel
-        %res = OpVariable %_ptr_Function_half Function %19
-         %13 = OpExtInst %half %15 Length %half_0x1p_0
-               OpStore %res %13
+        %res = OpVariable %_ptr_Function_half Function %14
+               OpStore %res %14
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %length_c158da
+%vertex_main_inner = OpFunction %v4float None %17
+         %19 = OpLabel
+         %20 = OpFunctionCall %void %length_c158da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %22 = OpLabel
+         %23 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %23
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %void %length_c158da
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %length_c158da
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl
index 66e82b1..46edf49 100644
--- a/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/literal/length/c158da.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_c158da() {
-  var res : f16 = length(1.0h);
+  var res : f16 = length(0.0h);
 }
 
 @vertex
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl
new file mode 100644
index 0000000..516c67f
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl
@@ -0,0 +1,43 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(vec<4, fa>) -> fa
+fn length_c2c544() {
+  var res = length(vec4(0.));
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_c2c544();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_c2c544();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_c2c544();
+}
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..3182250
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_c2c544();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_c2c544();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_c2c544();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..3182250
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_c2c544();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_c2c544();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_c2c544();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.glsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.glsl
new file mode 100644
index 0000000..6c6a328
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_c2c544();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_c2c544();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_c2c544();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.msl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.msl
new file mode 100644
index 0000000..e4d987c
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_c2c544();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_c2c544();
+  return;
+}
+
+kernel void compute_main() {
+  length_c2c544();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.spvasm b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.spvasm
new file mode 100644
index 0000000..c3a38b8
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_c2c544 "length_c2c544"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_c2c544 = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_c2c544
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_c2c544
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_c2c544
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.wgsl b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.wgsl
new file mode 100644
index 0000000..b16a1750
--- /dev/null
+++ b/test/tint/builtins/gen/literal/length/c2c544.wgsl.expected.wgsl
@@ -0,0 +1,19 @@
+fn length_c2c544() {
+  var res = length(vec4(0.0));
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_c2c544();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_c2c544();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_c2c544();
+}
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl b/test/tint/builtins/gen/var/length/056071.wgsl
index 2755232..f353299 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(vec<3, f32>) -> f32
 fn length_056071() {
-  var arg_0 = vec3<f32>(1.f);
+  var arg_0 = vec3<f32>(0.f);
   var res: f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl
index 563246c..bd540fb 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_056071() {
-  float3 arg_0 = (1.0f).xxx;
+  float3 arg_0 = (0.0f).xxx;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl
index 563246c..bd540fb 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_056071() {
-  float3 arg_0 = (1.0f).xxx;
+  float3 arg_0 = (0.0f).xxx;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl
index c7442a6..f4f3920 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_056071() {
-  vec3 arg_0 = vec3(1.0f);
+  vec3 arg_0 = vec3(0.0f);
   float res = length(arg_0);
 }
 
@@ -22,7 +22,7 @@
 precision mediump float;
 
 void length_056071() {
-  vec3 arg_0 = vec3(1.0f);
+  vec3 arg_0 = vec3(0.0f);
   float res = length(arg_0);
 }
 
@@ -37,7 +37,7 @@
 #version 310 es
 
 void length_056071() {
-  vec3 arg_0 = vec3(1.0f);
+  vec3 arg_0 = vec3(0.0f);
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl
index f2ba3c3..1727b62 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_056071() {
-  float3 arg_0 = float3(1.0f);
+  float3 arg_0 = float3(0.0f);
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm
index 45c6997..fb485c7 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
-         %20 = OpExtInstImport "GLSL.std.450"
+         %18 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -33,41 +33,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
     %v3float = OpTypeVector %float 3
-    %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v3float %float_1 %float_1 %float_1
+         %14 = OpConstantNull %v3float
 %_ptr_Function_v3float = OpTypePointer Function %v3float
-         %18 = OpConstantNull %v3float
 %_ptr_Function_float = OpTypePointer Function %float
-         %24 = OpTypeFunction %v4float
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_056071 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3float Function %18
+      %arg_0 = OpVariable %_ptr_Function_v3float Function %14
         %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %arg_0 %15
-         %21 = OpLoad %v3float %arg_0
-         %19 = OpExtInst %float %20 Length %21
-               OpStore %res %19
+               OpStore %arg_0 %14
+         %19 = OpLoad %v3float %arg_0
+         %17 = OpExtInst %float %18 Length %19
+               OpStore %res %17
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %length_056071
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_056071
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %length_056071
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %length_056071
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %length_056071
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %length_056071
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl
index b5ddeb0..ff5c0f2 100644
--- a/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/056071.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_056071() {
-  var arg_0 = vec3<f32>(1.0f);
+  var arg_0 = vec3<f32>(0.0f);
   var res : f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl
index cc5f92f..053f8b7 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<2, f16>) -> f16
 fn length_3f0e13() {
-  var arg_0 = vec2<f16>(1.h);
+  var arg_0 = vec2<f16>(0.h);
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl
index 59d9493..ef03b06 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_3f0e13() {
-  vector<float16_t, 2> arg_0 = (float16_t(1.0h)).xx;
+  vector<float16_t, 2> arg_0 = (float16_t(0.0h)).xx;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl
index 30425e5..a5f2471 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_0 = f16vec2(0.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_3f0e13() {
-  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_0 = f16vec2(0.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_3f0e13() {
-  f16vec2 arg_0 = f16vec2(1.0hf);
+  f16vec2 arg_0 = f16vec2(0.0hf);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl
index 403f079..797b6fb 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_3f0e13() {
-  half2 arg_0 = half2(1.0h);
+  half2 arg_0 = half2(0.0h);
   half res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm
index bcc5e638..a92c3f1 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,43 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v2half = OpTypeVector %half 2
-%half_0x1p_0 = OpConstant %half 0x1p+0
-         %16 = OpConstantComposite %v2half %half_0x1p_0 %half_0x1p_0
+         %15 = OpConstantNull %v2half
 %_ptr_Function_v2half = OpTypePointer Function %v2half
-         %19 = OpConstantNull %v2half
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpConstantNull %half
-         %26 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_3f0e13 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2half Function %19
-        %res = OpVariable %_ptr_Function_half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %v2half %arg_0
-         %20 = OpExtInst %half %21 Length %22
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v2half Function %15
+        %res = OpVariable %_ptr_Function_half Function %23
+               OpStore %arg_0 %15
+         %20 = OpLoad %v2half %arg_0
+         %18 = OpExtInst %half %19 Length %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %length_3f0e13
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_3f0e13
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %length_3f0e13
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %length_3f0e13
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %length_3f0e13
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl
index aa47114..1f69181 100644
--- a/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/3f0e13.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_3f0e13() {
-  var arg_0 = vec2<f16>(1.0h);
+  var arg_0 = vec2<f16>(0.0h);
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl b/test/tint/builtins/gen/var/length/555aba.wgsl
new file mode 100644
index 0000000..c16c099
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl
@@ -0,0 +1,44 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(vec<3, fa>) -> fa
+fn length_555aba() {
+  const arg_0 = vec3(0.);
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_555aba();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_555aba();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_555aba();
+}
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..ae75f2e
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_555aba() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_555aba();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_555aba();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_555aba();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..ae75f2e
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_555aba() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_555aba();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_555aba();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_555aba();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.glsl
new file mode 100644
index 0000000..fb815a6
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_555aba() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_555aba();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_555aba() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_555aba();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_555aba() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_555aba();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.msl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.msl
new file mode 100644
index 0000000..c59618c
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_555aba() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_555aba();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_555aba();
+  return;
+}
+
+kernel void compute_main() {
+  length_555aba();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.spvasm
new file mode 100644
index 0000000..d8d7c41
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_555aba "length_555aba"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_555aba = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_555aba
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_555aba
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_555aba
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/555aba.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.wgsl
new file mode 100644
index 0000000..5fa0c1b
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/555aba.wgsl.expected.wgsl
@@ -0,0 +1,20 @@
+fn length_555aba() {
+  const arg_0 = vec3(0.0);
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_555aba();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_555aba();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_555aba();
+}
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl
index 629e9ce..cef2978 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<4, f16>) -> f16
 fn length_5b1a9b() {
-  var arg_0 = vec4<f16>(1.h);
+  var arg_0 = vec4<f16>(0.h);
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl
index ff848f8..4865222 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_5b1a9b() {
-  vector<float16_t, 4> arg_0 = (float16_t(1.0h)).xxxx;
+  vector<float16_t, 4> arg_0 = (float16_t(0.0h)).xxxx;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl
index 0d54625..75b0701 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_0 = f16vec4(0.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_5b1a9b() {
-  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_0 = f16vec4(0.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_5b1a9b() {
-  f16vec4 arg_0 = f16vec4(1.0hf);
+  f16vec4 arg_0 = f16vec4(0.0hf);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl
index 2b9aa9f..885dd66 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_5b1a9b() {
-  half4 arg_0 = half4(1.0h);
+  half4 arg_0 = half4(0.0h);
   half res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm
index b880106..0d97afe 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,43 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v4half = OpTypeVector %half 4
-%half_0x1p_0 = OpConstant %half 0x1p+0
-         %16 = OpConstantComposite %v4half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %15 = OpConstantNull %v4half
 %_ptr_Function_v4half = OpTypePointer Function %v4half
-         %19 = OpConstantNull %v4half
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpConstantNull %half
-         %26 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_5b1a9b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v4half Function %19
-        %res = OpVariable %_ptr_Function_half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %v4half %arg_0
-         %20 = OpExtInst %half %21 Length %22
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v4half Function %15
+        %res = OpVariable %_ptr_Function_half Function %23
+               OpStore %arg_0 %15
+         %20 = OpLoad %v4half %arg_0
+         %18 = OpExtInst %half %19 Length %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %length_5b1a9b
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_5b1a9b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %length_5b1a9b
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %length_5b1a9b
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %length_5b1a9b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl
index c008e07..5a4657d 100644
--- a/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/5b1a9b.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_5b1a9b() {
-  var arg_0 = vec4<f16>(1.0h);
+  var arg_0 = vec4<f16>(0.0h);
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl b/test/tint/builtins/gen/var/length/602a17.wgsl
index 407ab65..e96d9d3 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(f32) -> f32
 fn length_602a17() {
-  var arg_0 = 1.f;
+  var arg_0 = 0.f;
   var res: f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl
index 5f4310e..a887d00 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_602a17() {
-  float arg_0 = 1.0f;
+  float arg_0 = 0.0f;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl
index 5f4310e..a887d00 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_602a17() {
-  float arg_0 = 1.0f;
+  float arg_0 = 0.0f;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl
index 41ad408..2fb5467 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_602a17() {
-  float arg_0 = 1.0f;
+  float arg_0 = 0.0f;
   float res = length(arg_0);
 }
 
@@ -22,7 +22,7 @@
 precision mediump float;
 
 void length_602a17() {
-  float arg_0 = 1.0f;
+  float arg_0 = 0.0f;
   float res = length(arg_0);
 }
 
@@ -37,7 +37,7 @@
 #version 310 es
 
 void length_602a17() {
-  float arg_0 = 1.0f;
+  float arg_0 = 0.0f;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl
index a88e9ed..b7bbcd9 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_602a17() {
-  float arg_0 = 1.0f;
+  float arg_0 = 0.0f;
   float res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm
index 7d99bcc..087b034 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.spvasm
@@ -4,7 +4,7 @@
 ; Bound: 33
 ; Schema: 0
                OpCapability Shader
-         %17 = OpExtInstImport "GLSL.std.450"
+         %16 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -32,28 +32,28 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
 %_ptr_Function_float = OpTypePointer Function %float
-         %20 = OpTypeFunction %v4float
+         %19 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_602a17 = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_float Function %8
         %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %arg_0 %float_1
-         %18 = OpLoad %float %arg_0
-         %16 = OpExtInst %float %17 Length %18
-               OpStore %res %16
+               OpStore %arg_0 %8
+         %17 = OpLoad %float %arg_0
+         %15 = OpExtInst %float %16 Length %17
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %20
-         %22 = OpLabel
-         %23 = OpFunctionCall %void %length_602a17
+%vertex_main_inner = OpFunction %v4float None %19
+         %21 = OpLabel
+         %22 = OpFunctionCall %void %length_602a17
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %25 = OpLabel
-         %26 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %26
+         %24 = OpLabel
+         %25 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %25
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl
index 7d1a3db..aaeb9ed 100644
--- a/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/602a17.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_602a17() {
-  var arg_0 = 1.0f;
+  var arg_0 = 0.0f;
   var res : f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl b/test/tint/builtins/gen/var/length/7b4741.wgsl
new file mode 100644
index 0000000..ef76630
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl
@@ -0,0 +1,44 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(vec<2, fa>) -> fa
+fn length_7b4741() {
+  const arg_0 = vec2(0.);
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_7b4741();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_7b4741();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_7b4741();
+}
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..08e83f5
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_7b4741();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_7b4741();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_7b4741();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..08e83f5
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_7b4741();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_7b4741();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_7b4741();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.glsl
new file mode 100644
index 0000000..16c9226
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_7b4741();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_7b4741();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_7b4741();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.msl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.msl
new file mode 100644
index 0000000..7c9de19
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_7b4741() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_7b4741();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_7b4741();
+  return;
+}
+
+kernel void compute_main() {
+  length_7b4741();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.spvasm
new file mode 100644
index 0000000..c85d9f2
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_7b4741 "length_7b4741"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_7b4741 = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_7b4741
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_7b4741
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_7b4741
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.wgsl
new file mode 100644
index 0000000..96518d9
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/7b4741.wgsl.expected.wgsl
@@ -0,0 +1,20 @@
+fn length_7b4741() {
+  const arg_0 = vec2(0.0);
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_7b4741();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_7b4741();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_7b4741();
+}
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl b/test/tint/builtins/gen/var/length/936ad5.wgsl
new file mode 100644
index 0000000..ffaf899
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl
@@ -0,0 +1,44 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(fa) -> fa
+fn length_936ad5() {
+  const arg_0 = 0.;
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_936ad5();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_936ad5();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_936ad5();
+}
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..cf6a772
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_936ad5();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_936ad5();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_936ad5();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..cf6a772
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_936ad5();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_936ad5();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_936ad5();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.glsl
new file mode 100644
index 0000000..cfb1b8c
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_936ad5();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_936ad5();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_936ad5();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.msl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.msl
new file mode 100644
index 0000000..6a2e0a7
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_936ad5() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_936ad5();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_936ad5();
+  return;
+}
+
+kernel void compute_main() {
+  length_936ad5();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.spvasm
new file mode 100644
index 0000000..a28538d
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_936ad5 "length_936ad5"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_936ad5 = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_936ad5
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_936ad5
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_936ad5
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.wgsl
new file mode 100644
index 0000000..5075b6d
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/936ad5.wgsl.expected.wgsl
@@ -0,0 +1,20 @@
+fn length_936ad5() {
+  const arg_0 = 0.0;
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_936ad5();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_936ad5();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_936ad5();
+}
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl b/test/tint/builtins/gen/var/length/afde8b.wgsl
index d24ca0b..20d6230 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(vec<2, f32>) -> f32
 fn length_afde8b() {
-  var arg_0 = vec2<f32>(1.f);
+  var arg_0 = vec2<f32>(0.f);
   var res: f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl
index 3652276..f1ca92a 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_afde8b() {
-  float2 arg_0 = (1.0f).xx;
+  float2 arg_0 = (0.0f).xx;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl
index 3652276..f1ca92a 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_afde8b() {
-  float2 arg_0 = (1.0f).xx;
+  float2 arg_0 = (0.0f).xx;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl
index 95b2f85..bee8807 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_afde8b() {
-  vec2 arg_0 = vec2(1.0f);
+  vec2 arg_0 = vec2(0.0f);
   float res = length(arg_0);
 }
 
@@ -22,7 +22,7 @@
 precision mediump float;
 
 void length_afde8b() {
-  vec2 arg_0 = vec2(1.0f);
+  vec2 arg_0 = vec2(0.0f);
   float res = length(arg_0);
 }
 
@@ -37,7 +37,7 @@
 #version 310 es
 
 void length_afde8b() {
-  vec2 arg_0 = vec2(1.0f);
+  vec2 arg_0 = vec2(0.0f);
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl
index b283afe..ebda0cb 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_afde8b() {
-  float2 arg_0 = float2(1.0f);
+  float2 arg_0 = float2(0.0f);
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm
index 603a9b0..975439c 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 37
+; Bound: 36
 ; Schema: 0
                OpCapability Shader
-         %20 = OpExtInstImport "GLSL.std.450"
+         %18 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -33,41 +33,40 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
     %v2float = OpTypeVector %float 2
-    %float_1 = OpConstant %float 1
-         %15 = OpConstantComposite %v2float %float_1 %float_1
+         %14 = OpConstantNull %v2float
 %_ptr_Function_v2float = OpTypePointer Function %v2float
-         %18 = OpConstantNull %v2float
 %_ptr_Function_float = OpTypePointer Function %float
-         %24 = OpTypeFunction %v4float
+         %22 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_afde8b = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v2float Function %18
+      %arg_0 = OpVariable %_ptr_Function_v2float Function %14
         %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %arg_0 %15
-         %21 = OpLoad %v2float %arg_0
-         %19 = OpExtInst %float %20 Length %21
-               OpStore %res %19
+               OpStore %arg_0 %14
+         %19 = OpLoad %v2float %arg_0
+         %17 = OpExtInst %float %18 Length %19
+               OpStore %res %17
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %24
-         %26 = OpLabel
-         %27 = OpFunctionCall %void %length_afde8b
+%vertex_main_inner = OpFunction %v4float None %22
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_afde8b
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %29 = OpLabel
-         %30 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %30
+         %27 = OpLabel
+         %28 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %28
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %32 = OpLabel
-         %33 = OpFunctionCall %void %length_afde8b
+         %31 = OpLabel
+         %32 = OpFunctionCall %void %length_afde8b
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %length_afde8b
+         %34 = OpLabel
+         %35 = OpFunctionCall %void %length_afde8b
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl
index 17ad733..8fad0c3 100644
--- a/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/afde8b.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_afde8b() {
-  var arg_0 = vec2<f32>(1.0f);
+  var arg_0 = vec2<f32>(0.0f);
   var res : f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl
index 7c69210..c838fd5 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(vec<3, f16>) -> f16
 fn length_ba16d6() {
-  var arg_0 = vec3<f16>(1.h);
+  var arg_0 = vec3<f16>(0.h);
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl
index a69b529..7480de0 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_ba16d6() {
-  vector<float16_t, 3> arg_0 = (float16_t(1.0h)).xxx;
+  vector<float16_t, 3> arg_0 = (float16_t(0.0h)).xxx;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl
index f73d680..ea04f30 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_0 = f16vec3(0.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_ba16d6() {
-  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_0 = f16vec3(0.0hf);
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_ba16d6() {
-  f16vec3 arg_0 = f16vec3(1.0hf);
+  f16vec3 arg_0 = f16vec3(0.0hf);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl
index bb585a0..54123fc 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_ba16d6() {
-  half3 arg_0 = half3(1.0h);
+  half3 arg_0 = half3(0.0h);
   half res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm
index 60a8f8b..4ec76a0 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 40
+; Bound: 38
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %21 = OpExtInstImport "GLSL.std.450"
+         %19 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -38,43 +38,41 @@
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
      %v3half = OpTypeVector %half 3
-%half_0x1p_0 = OpConstant %half 0x1p+0
-         %16 = OpConstantComposite %v3half %half_0x1p_0 %half_0x1p_0 %half_0x1p_0
+         %15 = OpConstantNull %v3half
 %_ptr_Function_v3half = OpTypePointer Function %v3half
-         %19 = OpConstantNull %v3half
 %_ptr_Function_half = OpTypePointer Function %half
-         %25 = OpConstantNull %half
-         %26 = OpTypeFunction %v4float
+         %23 = OpConstantNull %half
+         %24 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_ba16d6 = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_v3half Function %19
-        %res = OpVariable %_ptr_Function_half Function %25
-               OpStore %arg_0 %16
-         %22 = OpLoad %v3half %arg_0
-         %20 = OpExtInst %half %21 Length %22
-               OpStore %res %20
+      %arg_0 = OpVariable %_ptr_Function_v3half Function %15
+        %res = OpVariable %_ptr_Function_half Function %23
+               OpStore %arg_0 %15
+         %20 = OpLoad %v3half %arg_0
+         %18 = OpExtInst %half %19 Length %20
+               OpStore %res %18
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %26
-         %28 = OpLabel
-         %29 = OpFunctionCall %void %length_ba16d6
+%vertex_main_inner = OpFunction %v4float None %24
+         %26 = OpLabel
+         %27 = OpFunctionCall %void %length_ba16d6
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %32
+         %29 = OpLabel
+         %30 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %30
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %35 = OpLabel
-         %36 = OpFunctionCall %void %length_ba16d6
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %38 = OpLabel
-         %39 = OpFunctionCall %void %length_ba16d6
+         %36 = OpLabel
+         %37 = OpFunctionCall %void %length_ba16d6
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl
index a3dcd56..2319558 100644
--- a/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/ba16d6.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_ba16d6() {
-  var arg_0 = vec3<f16>(1.0h);
+  var arg_0 = vec3<f16>(0.0h);
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl b/test/tint/builtins/gen/var/length/becebf.wgsl
index ef00979..32cdab7 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl
@@ -23,7 +23,7 @@
 
 // fn length(vec<4, f32>) -> f32
 fn length_becebf() {
-  var arg_0 = vec4<f32>(1.f);
+  var arg_0 = vec4<f32>(0.f);
   var res: f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl
index 12594bc..e7760dd8 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_becebf() {
-  float4 arg_0 = (1.0f).xxxx;
+  float4 arg_0 = (0.0f).xxxx;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl
index 12594bc..e7760dd8 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.fxc.hlsl
@@ -1,5 +1,5 @@
 void length_becebf() {
-  float4 arg_0 = (1.0f).xxxx;
+  float4 arg_0 = (0.0f).xxxx;
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl
index abe433f..a87cbf7 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.glsl
@@ -1,7 +1,7 @@
 #version 310 es
 
 void length_becebf() {
-  vec4 arg_0 = vec4(1.0f);
+  vec4 arg_0 = vec4(0.0f);
   float res = length(arg_0);
 }
 
@@ -22,7 +22,7 @@
 precision mediump float;
 
 void length_becebf() {
-  vec4 arg_0 = vec4(1.0f);
+  vec4 arg_0 = vec4(0.0f);
   float res = length(arg_0);
 }
 
@@ -37,7 +37,7 @@
 #version 310 es
 
 void length_becebf() {
-  vec4 arg_0 = vec4(1.0f);
+  vec4 arg_0 = vec4(0.0f);
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl
index 27c3e89..6909b06 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_becebf() {
-  float4 arg_0 = float4(1.0f);
+  float4 arg_0 = float4(0.0f);
   float res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm
index 7b2a58a..4162c69 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.spvasm
@@ -1,10 +1,10 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 35
+; Bound: 34
 ; Schema: 0
                OpCapability Shader
-         %18 = OpExtInstImport "GLSL.std.450"
+         %16 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -32,40 +32,39 @@
 %vertex_point_size = OpVariable %_ptr_Output_float Output %8
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
-    %float_1 = OpConstant %float 1
-         %14 = OpConstantComposite %v4float %float_1 %float_1 %float_1 %float_1
 %_ptr_Function_v4float = OpTypePointer Function %v4float
 %_ptr_Function_float = OpTypePointer Function %float
-         %22 = OpTypeFunction %v4float
+         %20 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
 %length_becebf = OpFunction %void None %9
          %12 = OpLabel
       %arg_0 = OpVariable %_ptr_Function_v4float Function %5
         %res = OpVariable %_ptr_Function_float Function %8
-               OpStore %arg_0 %14
-         %19 = OpLoad %v4float %arg_0
-         %17 = OpExtInst %float %18 Length %19
-               OpStore %res %17
+               OpStore %arg_0 %5
+         %17 = OpLoad %v4float %arg_0
+         %15 = OpExtInst %float %16 Length %17
+               OpStore %res %15
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %length_becebf
+%vertex_main_inner = OpFunction %v4float None %20
+         %22 = OpLabel
+         %23 = OpFunctionCall %void %length_becebf
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %25 = OpLabel
+         %26 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %26
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %30 = OpLabel
-         %31 = OpFunctionCall %void %length_becebf
+         %29 = OpLabel
+         %30 = OpFunctionCall %void %length_becebf
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %33 = OpLabel
-         %34 = OpFunctionCall %void %length_becebf
+         %32 = OpLabel
+         %33 = OpFunctionCall %void %length_becebf
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl
index 9f7791a..2d1b76d 100644
--- a/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/becebf.wgsl.expected.wgsl
@@ -1,5 +1,5 @@
 fn length_becebf() {
-  var arg_0 = vec4<f32>(1.0f);
+  var arg_0 = vec4<f32>(0.0f);
   var res : f32 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl b/test/tint/builtins/gen/var/length/c158da.wgsl
index 9c175dc..8205577 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl
@@ -25,7 +25,7 @@
 
 // fn length(f16) -> f16
 fn length_c158da() {
-  var arg_0 = 1.h;
+  var arg_0 = 0.h;
   var res: f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl
index b3b16c3..e8ad9f7 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.dxc.hlsl
@@ -1,5 +1,5 @@
 void length_c158da() {
-  float16_t arg_0 = float16_t(1.0h);
+  float16_t arg_0 = float16_t(0.0h);
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl
index 64a00e1..023690c 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.glsl
@@ -2,7 +2,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t arg_0 = 1.0hf;
+  float16_t arg_0 = 0.0hf;
   float16_t res = length(arg_0);
 }
 
@@ -24,7 +24,7 @@
 precision mediump float;
 
 void length_c158da() {
-  float16_t arg_0 = 1.0hf;
+  float16_t arg_0 = 0.0hf;
   float16_t res = length(arg_0);
 }
 
@@ -40,7 +40,7 @@
 #extension GL_AMD_gpu_shader_half_float : require
 
 void length_c158da() {
-  float16_t arg_0 = 1.0hf;
+  float16_t arg_0 = 0.0hf;
   float16_t res = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl
index 9854ae1..ea75d99 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.msl
@@ -2,7 +2,7 @@
 
 using namespace metal;
 void length_c158da() {
-  half arg_0 = 1.0h;
+  half arg_0 = 0.0h;
   half res = fabs(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm
index 5c55dc8..5b14574 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.spvasm
@@ -1,14 +1,14 @@
 ; SPIR-V
 ; Version: 1.3
 ; Generator: Google Tint Compiler; 0
-; Bound: 36
+; Bound: 35
 ; Schema: 0
                OpCapability Shader
                OpCapability Float16
                OpCapability UniformAndStorageBuffer16BitAccess
                OpCapability StorageBuffer16BitAccess
                OpCapability StorageInputOutput16
-         %19 = OpExtInstImport "GLSL.std.450"
+         %18 = OpExtInstImport "GLSL.std.450"
                OpMemoryModel Logical GLSL450
                OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
                OpEntryPoint Fragment %fragment_main "fragment_main"
@@ -37,40 +37,39 @@
        %void = OpTypeVoid
           %9 = OpTypeFunction %void
        %half = OpTypeFloat 16
-%half_0x1p_0 = OpConstant %half 0x1p+0
+         %14 = OpConstantNull %half
 %_ptr_Function_half = OpTypePointer Function %half
-         %17 = OpConstantNull %half
-         %22 = OpTypeFunction %v4float
+         %21 = OpTypeFunction %v4float
     %float_1 = OpConstant %float 1
 %length_c158da = OpFunction %void None %9
          %12 = OpLabel
-      %arg_0 = OpVariable %_ptr_Function_half Function %17
-        %res = OpVariable %_ptr_Function_half Function %17
-               OpStore %arg_0 %half_0x1p_0
-         %20 = OpLoad %half %arg_0
-         %18 = OpExtInst %half %19 Length %20
-               OpStore %res %18
+      %arg_0 = OpVariable %_ptr_Function_half Function %14
+        %res = OpVariable %_ptr_Function_half Function %14
+               OpStore %arg_0 %14
+         %19 = OpLoad %half %arg_0
+         %17 = OpExtInst %half %18 Length %19
+               OpStore %res %17
                OpReturn
                OpFunctionEnd
-%vertex_main_inner = OpFunction %v4float None %22
-         %24 = OpLabel
-         %25 = OpFunctionCall %void %length_c158da
+%vertex_main_inner = OpFunction %v4float None %21
+         %23 = OpLabel
+         %24 = OpFunctionCall %void %length_c158da
                OpReturnValue %5
                OpFunctionEnd
 %vertex_main = OpFunction %void None %9
-         %27 = OpLabel
-         %28 = OpFunctionCall %v4float %vertex_main_inner
-               OpStore %value %28
+         %26 = OpLabel
+         %27 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %27
                OpStore %vertex_point_size %float_1
                OpReturn
                OpFunctionEnd
 %fragment_main = OpFunction %void None %9
-         %31 = OpLabel
-         %32 = OpFunctionCall %void %length_c158da
+         %30 = OpLabel
+         %31 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
 %compute_main = OpFunction %void None %9
-         %34 = OpLabel
-         %35 = OpFunctionCall %void %length_c158da
+         %33 = OpLabel
+         %34 = OpFunctionCall %void %length_c158da
                OpReturn
                OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl
index 2017cde..dc07d4b 100644
--- a/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl
+++ b/test/tint/builtins/gen/var/length/c158da.wgsl.expected.wgsl
@@ -1,7 +1,7 @@
 enable f16;
 
 fn length_c158da() {
-  var arg_0 = 1.0h;
+  var arg_0 = 0.0h;
   var res : f16 = length(arg_0);
 }
 
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl b/test/tint/builtins/gen/var/length/c2c544.wgsl
new file mode 100644
index 0000000..5e145ff
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl
@@ -0,0 +1,44 @@
+// Copyright 2022 The Tint Authors.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+////////////////////////////////////////////////////////////////////////////////
+// File generated by tools/src/cmd/gen
+// using the template:
+//   test/tint/builtins/gen/gen.wgsl.tmpl
+//
+// Do not modify this file directly
+////////////////////////////////////////////////////////////////////////////////
+
+
+// fn length(vec<4, fa>) -> fa
+fn length_c2c544() {
+  const arg_0 = vec4(0.);
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_c2c544();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_c2c544();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_c2c544();
+}
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.dxc.hlsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.dxc.hlsl
new file mode 100644
index 0000000..3182250
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.dxc.hlsl
@@ -0,0 +1,30 @@
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_c2c544();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_c2c544();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_c2c544();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.fxc.hlsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.fxc.hlsl
new file mode 100644
index 0000000..3182250
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.fxc.hlsl
@@ -0,0 +1,30 @@
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value : SV_Position;
+};
+
+float4 vertex_main_inner() {
+  length_c2c544();
+  return (0.0f).xxxx;
+}
+
+tint_symbol vertex_main() {
+  const float4 inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = (tint_symbol)0;
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+void fragment_main() {
+  length_c2c544();
+  return;
+}
+
+[numthreads(1, 1, 1)]
+void compute_main() {
+  length_c2c544();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.glsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.glsl
new file mode 100644
index 0000000..6c6a328
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.glsl
@@ -0,0 +1,49 @@
+#version 310 es
+
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+vec4 vertex_main() {
+  length_c2c544();
+  return vec4(0.0f);
+}
+
+void main() {
+  gl_PointSize = 1.0;
+  vec4 inner_result = vertex_main();
+  gl_Position = inner_result;
+  gl_Position.y = -(gl_Position.y);
+  gl_Position.z = ((2.0f * gl_Position.z) - gl_Position.w);
+  return;
+}
+#version 310 es
+precision mediump float;
+
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+void fragment_main() {
+  length_c2c544();
+}
+
+void main() {
+  fragment_main();
+  return;
+}
+#version 310 es
+
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+void compute_main() {
+  length_c2c544();
+}
+
+layout(local_size_x = 1, local_size_y = 1, local_size_z = 1) in;
+void main() {
+  compute_main();
+  return;
+}
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.msl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.msl
new file mode 100644
index 0000000..e4d987c
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.msl
@@ -0,0 +1,33 @@
+#include <metal_stdlib>
+
+using namespace metal;
+void length_c2c544() {
+  float res = 0.0f;
+}
+
+struct tint_symbol {
+  float4 value [[position]];
+};
+
+float4 vertex_main_inner() {
+  length_c2c544();
+  return float4(0.0f);
+}
+
+vertex tint_symbol vertex_main() {
+  float4 const inner_result = vertex_main_inner();
+  tint_symbol wrapper_result = {};
+  wrapper_result.value = inner_result;
+  return wrapper_result;
+}
+
+fragment void fragment_main() {
+  length_c2c544();
+  return;
+}
+
+kernel void compute_main() {
+  length_c2c544();
+  return;
+}
+
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.spvasm b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.spvasm
new file mode 100644
index 0000000..c3a38b8
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.spvasm
@@ -0,0 +1,63 @@
+; SPIR-V
+; Version: 1.3
+; Generator: Google Tint Compiler; 0
+; Bound: 29
+; Schema: 0
+               OpCapability Shader
+               OpMemoryModel Logical GLSL450
+               OpEntryPoint Vertex %vertex_main "vertex_main" %value %vertex_point_size
+               OpEntryPoint Fragment %fragment_main "fragment_main"
+               OpEntryPoint GLCompute %compute_main "compute_main"
+               OpExecutionMode %fragment_main OriginUpperLeft
+               OpExecutionMode %compute_main LocalSize 1 1 1
+               OpName %value "value"
+               OpName %vertex_point_size "vertex_point_size"
+               OpName %length_c2c544 "length_c2c544"
+               OpName %res "res"
+               OpName %vertex_main_inner "vertex_main_inner"
+               OpName %vertex_main "vertex_main"
+               OpName %fragment_main "fragment_main"
+               OpName %compute_main "compute_main"
+               OpDecorate %value BuiltIn Position
+               OpDecorate %vertex_point_size BuiltIn PointSize
+      %float = OpTypeFloat 32
+    %v4float = OpTypeVector %float 4
+%_ptr_Output_v4float = OpTypePointer Output %v4float
+          %5 = OpConstantNull %v4float
+      %value = OpVariable %_ptr_Output_v4float Output %5
+%_ptr_Output_float = OpTypePointer Output %float
+          %8 = OpConstantNull %float
+%vertex_point_size = OpVariable %_ptr_Output_float Output %8
+       %void = OpTypeVoid
+          %9 = OpTypeFunction %void
+%_ptr_Function_float = OpTypePointer Function %float
+         %15 = OpTypeFunction %v4float
+    %float_1 = OpConstant %float 1
+%length_c2c544 = OpFunction %void None %9
+         %12 = OpLabel
+        %res = OpVariable %_ptr_Function_float Function %8
+               OpStore %res %8
+               OpReturn
+               OpFunctionEnd
+%vertex_main_inner = OpFunction %v4float None %15
+         %17 = OpLabel
+         %18 = OpFunctionCall %void %length_c2c544
+               OpReturnValue %5
+               OpFunctionEnd
+%vertex_main = OpFunction %void None %9
+         %20 = OpLabel
+         %21 = OpFunctionCall %v4float %vertex_main_inner
+               OpStore %value %21
+               OpStore %vertex_point_size %float_1
+               OpReturn
+               OpFunctionEnd
+%fragment_main = OpFunction %void None %9
+         %24 = OpLabel
+         %25 = OpFunctionCall %void %length_c2c544
+               OpReturn
+               OpFunctionEnd
+%compute_main = OpFunction %void None %9
+         %27 = OpLabel
+         %28 = OpFunctionCall %void %length_c2c544
+               OpReturn
+               OpFunctionEnd
diff --git a/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.wgsl b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.wgsl
new file mode 100644
index 0000000..b7f0ae8
--- /dev/null
+++ b/test/tint/builtins/gen/var/length/c2c544.wgsl.expected.wgsl
@@ -0,0 +1,20 @@
+fn length_c2c544() {
+  const arg_0 = vec4(0.0);
+  var res = length(arg_0);
+}
+
+@vertex
+fn vertex_main() -> @builtin(position) vec4<f32> {
+  length_c2c544();
+  return vec4<f32>();
+}
+
+@fragment
+fn fragment_main() {
+  length_c2c544();
+}
+
+@compute @workgroup_size(1)
+fn compute_main() {
+  length_c2c544();
+}
