Rename Constant::As to Constant::ValueAs.

This CL updates Constant::As to be Constant::ValueAs. Now that Constant
inherits from CastableBase, there is already an As method on
CastableBase. This makes the override inside Constant confusing and
potentially incorrect.

Bug: tint:1718
Change-Id: I4f73971801e95225a99a5a993124c04194d0d7d6
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/114360
Reviewed-by: Ben Clayton <bclayton@google.com>
Commit-Queue: Dan Sinclair <dsinclair@chromium.org>
Kokoro: Dan Sinclair <dsinclair@chromium.org>
diff --git a/src/tint/constant/constant.h b/src/tint/constant/constant.h
index bd60f49..f9124ef 100644
--- a/src/tint/constant/constant.h
+++ b/src/tint/constant/constant.h
@@ -62,7 +62,7 @@
 
     /// @returns the value of the constant as the given scalar or abstract value.
     template <typename T>
-    T As() const {
+    T ValueAs() const {
         return std::visit(
             [](auto v) {
                 if constexpr (std::is_same_v<decltype(v), std::monostate>) {
diff --git a/src/tint/inspector/inspector.cc b/src/tint/inspector/inspector.cc
index 647d14e..75c4863 100644
--- a/src/tint/inspector/inspector.cc
+++ b/src/tint/inspector/inspector.cc
@@ -314,10 +314,10 @@
             if (auto* value = global->Initializer()->ConstantValue()) {
                 result[override_id] = Switch(
                     value->Type(),  //
-                    [&](const type::I32*) { return Scalar(value->As<i32>()); },
-                    [&](const type::U32*) { return Scalar(value->As<u32>()); },
-                    [&](const type::F32*) { return Scalar(value->As<f32>()); },
-                    [&](const type::Bool*) { return Scalar(value->As<bool>()); });
+                    [&](const type::I32*) { return Scalar(value->ValueAs<i32>()); },
+                    [&](const type::U32*) { return Scalar(value->ValueAs<u32>()); },
+                    [&](const type::F32*) { return Scalar(value->ValueAs<f32>()); },
+                    [&](const type::Bool*) { return Scalar(value->ValueAs<bool>()); });
                 continue;
             }
         }
diff --git a/src/tint/resolver/const_eval.cc b/src/tint/resolver/const_eval.cc
index 0481b4a..434a765 100644
--- a/src/tint/resolver/const_eval.cc
+++ b/src/tint/resolver/const_eval.cc
@@ -64,8 +64,8 @@
 auto Dispatch_iu32(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::I32*) { return f(cs->template As<i32>()...); },
-        [&](const type::U32*) { return f(cs->template As<u32>()...); });
+        [&](const type::I32*) { return f(cs->template ValueAs<i32>()...); },
+        [&](const type::U32*) { return f(cs->template ValueAs<u32>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
@@ -74,9 +74,9 @@
 auto Dispatch_ia_iu32(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::AbstractInt*) { return f(cs->template As<AInt>()...); },
-        [&](const type::I32*) { return f(cs->template As<i32>()...); },
-        [&](const type::U32*) { return f(cs->template As<u32>()...); });
+        [&](const type::AbstractInt*) { return f(cs->template ValueAs<AInt>()...); },
+        [&](const type::I32*) { return f(cs->template ValueAs<i32>()...); },
+        [&](const type::U32*) { return f(cs->template ValueAs<u32>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
@@ -85,10 +85,10 @@
 auto Dispatch_ia_iu32_bool(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::AbstractInt*) { return f(cs->template As<AInt>()...); },
-        [&](const type::I32*) { return f(cs->template As<i32>()...); },
-        [&](const type::U32*) { return f(cs->template As<u32>()...); },
-        [&](const type::Bool*) { return f(cs->template As<bool>()...); });
+        [&](const type::AbstractInt*) { return f(cs->template ValueAs<AInt>()...); },
+        [&](const type::I32*) { return f(cs->template ValueAs<i32>()...); },
+        [&](const type::U32*) { return f(cs->template ValueAs<u32>()...); },
+        [&](const type::Bool*) { return f(cs->template ValueAs<bool>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
@@ -97,11 +97,11 @@
 auto Dispatch_fia_fi32_f16(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::AbstractInt*) { return f(cs->template As<AInt>()...); },
-        [&](const type::AbstractFloat*) { return f(cs->template As<AFloat>()...); },
-        [&](const type::F32*) { return f(cs->template As<f32>()...); },
-        [&](const type::I32*) { return f(cs->template As<i32>()...); },
-        [&](const type::F16*) { return f(cs->template As<f16>()...); });
+        [&](const type::AbstractInt*) { return f(cs->template ValueAs<AInt>()...); },
+        [&](const type::AbstractFloat*) { return f(cs->template ValueAs<AFloat>()...); },
+        [&](const type::F32*) { return f(cs->template ValueAs<f32>()...); },
+        [&](const type::I32*) { return f(cs->template ValueAs<i32>()...); },
+        [&](const type::F16*) { return f(cs->template ValueAs<f16>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
@@ -110,12 +110,12 @@
 auto Dispatch_fia_fiu32_f16(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::AbstractInt*) { return f(cs->template As<AInt>()...); },
-        [&](const type::AbstractFloat*) { return f(cs->template As<AFloat>()...); },
-        [&](const type::F32*) { return f(cs->template As<f32>()...); },
-        [&](const type::I32*) { return f(cs->template As<i32>()...); },
-        [&](const type::U32*) { return f(cs->template As<u32>()...); },
-        [&](const type::F16*) { return f(cs->template As<f16>()...); });
+        [&](const type::AbstractInt*) { return f(cs->template ValueAs<AInt>()...); },
+        [&](const type::AbstractFloat*) { return f(cs->template ValueAs<AFloat>()...); },
+        [&](const type::F32*) { return f(cs->template ValueAs<f32>()...); },
+        [&](const type::I32*) { return f(cs->template ValueAs<i32>()...); },
+        [&](const type::U32*) { return f(cs->template ValueAs<u32>()...); },
+        [&](const type::F16*) { return f(cs->template ValueAs<f16>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
@@ -124,13 +124,13 @@
 auto Dispatch_fia_fiu32_f16_bool(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::AbstractInt*) { return f(cs->template As<AInt>()...); },
-        [&](const type::AbstractFloat*) { return f(cs->template As<AFloat>()...); },
-        [&](const type::F32*) { return f(cs->template As<f32>()...); },
-        [&](const type::I32*) { return f(cs->template As<i32>()...); },
-        [&](const type::U32*) { return f(cs->template As<u32>()...); },
-        [&](const type::F16*) { return f(cs->template As<f16>()...); },
-        [&](const type::Bool*) { return f(cs->template As<bool>()...); });
+        [&](const type::AbstractInt*) { return f(cs->template ValueAs<AInt>()...); },
+        [&](const type::AbstractFloat*) { return f(cs->template ValueAs<AFloat>()...); },
+        [&](const type::F32*) { return f(cs->template ValueAs<f32>()...); },
+        [&](const type::I32*) { return f(cs->template ValueAs<i32>()...); },
+        [&](const type::U32*) { return f(cs->template ValueAs<u32>()...); },
+        [&](const type::F16*) { return f(cs->template ValueAs<f16>()...); },
+        [&](const type::Bool*) { return f(cs->template ValueAs<bool>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
@@ -139,16 +139,16 @@
 auto Dispatch_fa_f32_f16(F&& f, CONSTANTS&&... cs) {
     return Switch(
         First(cs...)->Type(),  //
-        [&](const type::AbstractFloat*) { return f(cs->template As<AFloat>()...); },
-        [&](const type::F32*) { return f(cs->template As<f32>()...); },
-        [&](const type::F16*) { return f(cs->template As<f16>()...); });
+        [&](const type::AbstractFloat*) { return f(cs->template ValueAs<AFloat>()...); },
+        [&](const type::F32*) { return f(cs->template ValueAs<f32>()...); },
+        [&](const type::F16*) { return f(cs->template ValueAs<f16>()...); });
 }
 
 /// Helper that calls `f` passing in the value of all `cs`.
 /// Calls `f` with all constants cast to the type of the first `cs` argument.
 template <typename F, typename... CONSTANTS>
 auto Dispatch_bool(F&& f, CONSTANTS&&... cs) {
-    return f(cs->template As<bool>()...);
+    return f(cs->template ValueAs<bool>()...);
 }
 
 /// ZeroTypeDispatch is a helper for calling the function `f`, passing a single zero-value argument
@@ -1373,7 +1373,7 @@
     uint32_t el_count = 0;
     type::Type::ElementOf(obj_expr->Type()->UnwrapRef(), &el_count);
 
-    AInt idx = idx_val->As<AInt>();
+    AInt idx = idx_val->ValueAs<AInt>();
     if (idx < 0 || (el_count > 0 && idx >= el_count)) {
         std::string range;
         if (el_count > 0) {
@@ -1761,7 +1761,7 @@
                                           const Source& source) {
     // Note: Due to short-circuiting, this function is only called if lhs is true, so we could
     // technically only return the value of the rhs.
-    return CreateScalar(builder, source, ty, args[0]->As<bool>() && args[1]->As<bool>());
+    return CreateScalar(builder, source, ty, args[0]->ValueAs<bool>() && args[1]->ValueAs<bool>());
 }
 
 ConstEval::Result ConstEval::OpLogicalOr(const type::Type* ty,
@@ -1769,7 +1769,7 @@
                                          const Source& source) {
     // Note: Due to short-circuiting, this function is only called if lhs is false, so we could
     // technically only return the value of the rhs.
-    return CreateScalar(builder, source, ty, args[1]->As<bool>());
+    return CreateScalar(builder, source, ty, args[1]->ValueAs<bool>());
 }
 
 ConstEval::Result ConstEval::OpAnd(const type::Type* ty,
@@ -2408,8 +2408,8 @@
             using NumberUT = Number<UT>;
 
             // Read args that are always scalar
-            NumberUT in_offset = args[1]->As<NumberUT>();
-            NumberUT in_count = args[2]->As<NumberUT>();
+            NumberUT in_offset = args[1]->ValueAs<NumberUT>();
+            NumberUT in_count = args[2]->ValueAs<NumberUT>();
 
             // Cast all to unsigned
             UT e = static_cast<UT>(in_e);
@@ -2606,7 +2606,7 @@
 
     auto scalar = [&](const constant::Constant* s) {
         int exp = 0;
-        double fract = std::frexp(s->As<AFloat>(), &exp);
+        double fract = std::frexp(s->ValueAs<AFloat>(), &exp);
         return Switch(
             s->Type(),
             [&](const type::F32*) {
@@ -2678,8 +2678,8 @@
             using NumberUT = Number<UT>;
 
             // Read args that are always scalar
-            NumberUT in_offset = args[2]->As<NumberUT>();
-            NumberUT in_count = args[3]->As<NumberUT>();
+            NumberUT in_offset = args[2]->ValueAs<NumberUT>();
+            NumberUT in_count = args[3]->ValueAs<NumberUT>();
 
             // Cast all to unsigned
             UT e = static_cast<UT>(in_e);
@@ -2831,9 +2831,9 @@
             NumberT e3;
             auto* c2 = args[2];
             if (c2->Type()->Is<type::Vector>()) {
-                e3 = c2->Index(index)->As<NumberT>();
+                e3 = c2->Index(index)->ValueAs<NumberT>();
             } else {
-                e3 = c2->As<NumberT>();
+                e3 = c2->ValueAs<NumberT>();
             }
             // Implement as `e1 * (1 - e3) + e2 * e3)` instead of as `e1 + e3 * (e2 - e1)` to avoid
             // float precision loss when e1 and e2 significantly differ in magnitude.
@@ -2929,12 +2929,12 @@
     };
 
     auto* e = args[0];
-    auto e0 = convert(e->Index(0)->As<f32>());
+    auto e0 = convert(e->Index(0)->ValueAs<f32>());
     if (!e0) {
         return utils::Failure;
     }
 
-    auto e1 = convert(e->Index(1)->As<f32>());
+    auto e1 = convert(e->Index(1)->ValueAs<f32>());
     if (!e1) {
         return utils::Failure;
     }
@@ -2953,8 +2953,8 @@
     };
 
     auto* e = args[0];
-    auto e0 = calc(e->Index(0)->As<f32>());
-    auto e1 = calc(e->Index(1)->As<f32>());
+    auto e0 = calc(e->Index(0)->ValueAs<f32>());
+    auto e1 = calc(e->Index(1)->ValueAs<f32>());
 
     u32 ret = u32((e0 & 0x0000'ffff) | (e1 << 16));
     return CreateScalar(builder, source, ty, ret);
@@ -2969,8 +2969,8 @@
     };
 
     auto* e = args[0];
-    auto e0 = calc(e->Index(0)->As<f32>());
-    auto e1 = calc(e->Index(1)->As<f32>());
+    auto e0 = calc(e->Index(0)->ValueAs<f32>());
+    auto e1 = calc(e->Index(1)->ValueAs<f32>());
 
     u32 ret = u32((e0 & 0x0000'ffff) | (e1 << 16));
     return CreateScalar(builder, source, ty, ret);
@@ -2986,10 +2986,10 @@
     };
 
     auto* e = args[0];
-    auto e0 = calc(e->Index(0)->As<f32>());
-    auto e1 = calc(e->Index(1)->As<f32>());
-    auto e2 = calc(e->Index(2)->As<f32>());
-    auto e3 = calc(e->Index(3)->As<f32>());
+    auto e0 = calc(e->Index(0)->ValueAs<f32>());
+    auto e1 = calc(e->Index(1)->ValueAs<f32>());
+    auto e2 = calc(e->Index(2)->ValueAs<f32>());
+    auto e3 = calc(e->Index(3)->ValueAs<f32>());
 
     uint32_t mask = 0x0000'00ff;
     u32 ret = u32((e0 & mask) | ((e1 & mask) << 8) | ((e2 & mask) << 16) | ((e3 & mask) << 24));
@@ -3005,10 +3005,10 @@
     };
 
     auto* e = args[0];
-    auto e0 = calc(e->Index(0)->As<f32>());
-    auto e1 = calc(e->Index(1)->As<f32>());
-    auto e2 = calc(e->Index(2)->As<f32>());
-    auto e3 = calc(e->Index(3)->As<f32>());
+    auto e0 = calc(e->Index(0)->ValueAs<f32>());
+    auto e1 = calc(e->Index(1)->ValueAs<f32>());
+    auto e2 = calc(e->Index(2)->ValueAs<f32>());
+    auto e3 = calc(e->Index(3)->ValueAs<f32>());
 
     uint32_t mask = 0x0000'00ff;
     u32 ret = u32((e0 & mask) | ((e1 & mask) << 8) | ((e2 & mask) << 16) | ((e3 & mask) << 24));
@@ -3173,7 +3173,7 @@
         }
 
         // If k < 0.0, returns the refraction vector 0.0
-        if (k.Get()->As<AFloat>() < 0) {
+        if (k.Get()->ValueAs<AFloat>() < 0) {
             return ZeroValue(builder, ty);
         }
 
@@ -3279,7 +3279,7 @@
 ConstEval::Result ConstEval::select_bool(const type::Type* ty,
                                          utils::VectorRef<const constant::Constant*> args,
                                          const Source& source) {
-    auto cond = args[2]->As<bool>();
+    auto cond = args[2]->ValueAs<bool>();
     auto transform = [&](const constant::Constant* c0, const constant::Constant* c1) {
         auto create = [&](auto f, auto t) -> ConstEval::Result {
             return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), cond ? t : f);
@@ -3296,7 +3296,7 @@
     auto transform = [&](const constant::Constant* c0, const constant::Constant* c1, size_t index) {
         auto create = [&](auto f, auto t) -> ConstEval::Result {
             // Get corresponding bool value at the current vector value index
-            auto cond = args[2]->Index(index)->As<bool>();
+            auto cond = args[2]->Index(index)->ValueAs<bool>();
             return CreateScalar(builder, source, type::Type::DeepestElementOf(ty), cond ? t : f);
         };
         return Dispatch_fia_fiu32_f16_bool(create, c0, c1);
@@ -3490,7 +3490,7 @@
                                              utils::VectorRef<const constant::Constant*> args,
                                              const Source& source) {
     auto* inner_ty = type::Type::DeepestElementOf(ty);
-    auto e = args[0]->As<u32>().value;
+    auto e = args[0]->ValueAs<u32>().value;
 
     utils::Vector<const constant::Constant*, 2> els;
     els.Reserve(2);
@@ -3514,7 +3514,7 @@
                                              utils::VectorRef<const constant::Constant*> args,
                                              const Source& source) {
     auto* inner_ty = type::Type::DeepestElementOf(ty);
-    auto e = args[0]->As<u32>().value;
+    auto e = args[0]->ValueAs<u32>().value;
 
     utils::Vector<const constant::Constant*, 2> els;
     els.Reserve(2);
@@ -3534,7 +3534,7 @@
                                              utils::VectorRef<const constant::Constant*> args,
                                              const Source& source) {
     auto* inner_ty = type::Type::DeepestElementOf(ty);
-    auto e = args[0]->As<u32>().value;
+    auto e = args[0]->ValueAs<u32>().value;
 
     utils::Vector<const constant::Constant*, 2> els;
     els.Reserve(2);
@@ -3553,7 +3553,7 @@
                                             utils::VectorRef<const constant::Constant*> args,
                                             const Source& source) {
     auto* inner_ty = type::Type::DeepestElementOf(ty);
-    auto e = args[0]->As<u32>().value;
+    auto e = args[0]->ValueAs<u32>().value;
 
     utils::Vector<const constant::Constant*, 4> els;
     els.Reserve(4);
@@ -3573,7 +3573,7 @@
                                             utils::VectorRef<const constant::Constant*> args,
                                             const Source& source) {
     auto* inner_ty = type::Type::DeepestElementOf(ty);
-    auto e = args[0]->As<u32>().value;
+    auto e = args[0]->ValueAs<u32>().value;
 
     utils::Vector<const constant::Constant*, 4> els;
     els.Reserve(4);
@@ -3592,7 +3592,7 @@
                                            utils::VectorRef<const constant::Constant*> args,
                                            const Source& source) {
     auto transform = [&](const constant::Constant* c) -> ConstEval::Result {
-        auto value = c->As<f32>();
+        auto value = c->ValueAs<f32>();
         auto conv = CheckedConvert<f32>(f16(value));
         if (!conv) {
             AddError(OverflowErrorMessage(value, "f16"), source);
diff --git a/src/tint/resolver/const_eval_binary_op_test.cc b/src/tint/resolver/const_eval_binary_op_test.cc
index d626afc..0f9e8ef 100644
--- a/src/tint/resolver/const_eval_binary_op_test.cc
+++ b/src/tint/resolver/const_eval_binary_op_test.cc
@@ -903,7 +903,7 @@
 
     ForEachElemPair(value, expected_value,
                     [&](const constant::Constant* a, const constant::Constant* b) {
-                        EXPECT_EQ(a->As<bool>(), b->As<bool>());
+                        EXPECT_EQ(a->ValueAs<bool>(), b->ValueAs<bool>());
                         return HasFailure() ? Action::kStop : Action::kContinue;
                     });
 }
@@ -1377,7 +1377,7 @@
 
     auto* lhs_sem = sem.Get(lhs);
     ASSERT_TRUE(lhs_sem->ConstantValue());
-    EXPECT_EQ(lhs_sem->ConstantValue()->As<bool>(), false);
+    EXPECT_EQ(lhs_sem->ConstantValue()->ValueAs<bool>(), false);
     EXPECT_EQ(lhs_sem->Stage(), sem::EvaluationStage::kConstant);
 
     auto* rhs_sem = sem.Get(rhs);
@@ -1386,7 +1386,7 @@
 
     auto* binary_sem = sem.Get(binary);
     ASSERT_TRUE(binary_sem->ConstantValue());
-    EXPECT_EQ(binary_sem->ConstantValue()->As<bool>(), false);
+    EXPECT_EQ(binary_sem->ConstantValue()->ValueAs<bool>(), false);
     EXPECT_EQ(binary_sem->Stage(), sem::EvaluationStage::kConstant);
 }
 
@@ -1397,7 +1397,7 @@
 
     auto* lhs_sem = sem.Get(lhs);
     ASSERT_TRUE(lhs_sem->ConstantValue());
-    EXPECT_EQ(lhs_sem->ConstantValue()->As<bool>(), true);
+    EXPECT_EQ(lhs_sem->ConstantValue()->ValueAs<bool>(), true);
     EXPECT_EQ(lhs_sem->Stage(), sem::EvaluationStage::kConstant);
 
     auto* rhs_sem = sem.Get(rhs);
@@ -1406,7 +1406,7 @@
 
     auto* binary_sem = sem.Get(binary);
     ASSERT_TRUE(binary_sem->ConstantValue());
-    EXPECT_EQ(binary_sem->ConstantValue()->As<bool>(), true);
+    EXPECT_EQ(binary_sem->ConstantValue()->ValueAs<bool>(), true);
     EXPECT_EQ(binary_sem->Stage(), sem::EvaluationStage::kConstant);
 }
 
diff --git a/src/tint/resolver/const_eval_construction_test.cc b/src/tint/resolver/const_eval_construction_test.cc
index 2c3bd9b..93871b4 100644
--- a/src/tint/resolver/const_eval_construction_test.cc
+++ b/src/tint/resolver/const_eval_construction_test.cc
@@ -32,7 +32,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<AInt>(), 99);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<AInt>(), 99);
 }
 
 TEST_F(ResolverConstEvalTest, Scalar_u32) {
@@ -48,7 +48,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<AInt>(), 99u);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<AInt>(), 99u);
 }
 
 TEST_F(ResolverConstEvalTest, Scalar_f32) {
@@ -64,7 +64,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<AFloat>().value, 9.9f);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<AFloat>().value, 9.9f);
 }
 
 TEST_F(ResolverConstEvalTest, Scalar_f16) {
@@ -83,7 +83,7 @@
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
     // 9.9 is not exactly representable by f16, and should be quantized to 9.8984375
-    EXPECT_EQ(sem->ConstantValue()->As<AFloat>(), 9.8984375f);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<AFloat>(), 9.8984375f);
 }
 
 TEST_F(ResolverConstEvalTest, Scalar_bool) {
@@ -99,7 +99,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<bool>(), true);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_i32) {
@@ -122,17 +122,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 0);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 0);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 0);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 0);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 0);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 0);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_u32) {
@@ -155,17 +155,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 0u);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 0u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 0u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 0u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 0u);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 0u);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_f32) {
@@ -188,17 +188,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 0._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 0._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 0._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 0._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 0._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 0._a);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_f16) {
@@ -223,17 +223,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 0._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 0._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 0._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 0._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 0._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 0._a);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_ZeroInit_bool) {
@@ -256,17 +256,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<bool>(), false);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<bool>(), false);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<bool>(), false);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Splat_i32) {
@@ -289,17 +289,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 99);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 99);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 99);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 99);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 99);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 99);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Splat_u32) {
@@ -322,17 +322,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 99u);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 99u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 99u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 99u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 99u);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 99u);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Splat_f32) {
@@ -355,17 +355,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 9.9f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 9.9f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 9.9f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 9.9f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 9.9f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 9.9f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Splat_f16) {
@@ -391,17 +391,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 9.8984375f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 9.8984375f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 9.8984375f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 9.8984375f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 9.8984375f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 9.8984375f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Splat_bool) {
@@ -424,17 +424,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<bool>(), true);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<bool>(), true);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<bool>(), true);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_i32) {
@@ -457,17 +457,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 1);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 1);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 2);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 2);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 3);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_u32) {
@@ -490,17 +490,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 1);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 1);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 2);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 2);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 3);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_f32) {
@@ -523,17 +523,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 1.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 1.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 2.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 2.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 3.f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_f16) {
@@ -558,17 +558,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 1.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 1.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 2.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 2.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 3.f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_FullConstruct_bool) {
@@ -591,17 +591,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<bool>(), true);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<bool>(), false);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<bool>(), true);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_i32) {
@@ -624,17 +624,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 1);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 1);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 2);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 2);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 3);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_u32) {
@@ -657,17 +657,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 1);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 1);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 2);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 2);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 3);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32) {
@@ -690,17 +690,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 1.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 1.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 2.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 2.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 3.f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_all_10) {
@@ -723,17 +723,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 10_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 10_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 10_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 10_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 10_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 10_f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_all_positive_0) {
@@ -756,17 +756,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_all_negative_0) {
@@ -789,17 +789,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), -0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), -0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), -0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), -0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), -0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), -0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f32_mixed_sign_0) {
@@ -822,17 +822,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), -0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), -0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16) {
@@ -857,17 +857,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 1.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 1.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 2.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 2.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 3.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 3.f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_all_10) {
@@ -892,17 +892,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f16>(), 10_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f16>(), 10_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f16>(), 10_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f16>(), 10_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), 10_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f16>(), 10_h);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_all_positive_0) {
@@ -927,17 +927,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f16>(), 0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f16>(), 0_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f16>(), 0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f16>(), 0_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), 0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f16>(), 0_h);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_all_negative_0) {
@@ -962,17 +962,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f16>(), -0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f16>(), -0_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f16>(), -0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f16>(), -0_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), -0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f16>(), -0_h);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_f16_mixed_sign_0) {
@@ -997,17 +997,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f16>(), 0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f16>(), 0_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f16>(), -0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f16>(), -0_h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f16>(), 0_h);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f16>(), 0_h);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_bool) {
@@ -1030,17 +1030,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<bool>(), true);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<bool>(), false);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<bool>(), true);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_all_true) {
@@ -1063,17 +1063,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<bool>(), true);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<bool>(), true);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), true);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<bool>(), true);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_MixConstruct_all_false) {
@@ -1096,17 +1096,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<bool>(), false);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<bool>(), false);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<bool>(), false);
 }
 
 TEST_F(ResolverConstEvalTest, Mat2x3_ZeroInit_f32) {
@@ -1130,32 +1130,32 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 0._f);
 }
 
 TEST_F(ResolverConstEvalTest, Mat2x3_ZeroInit_f16) {
@@ -1181,32 +1181,32 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f16>(), 0._h);
 }
 
 TEST_F(ResolverConstEvalTest, Mat3x2_Construct_Scalars_af) {
@@ -1230,32 +1230,32 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<AFloat>(), 1._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<AFloat>(), 1._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<AFloat>(), 2._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<AFloat>(), 2._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<AFloat>(), 3._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<AFloat>(), 3._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<AFloat>(), 4._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<AFloat>(), 4._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->As<AFloat>(), 5._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->ValueAs<AFloat>(), 5._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<AFloat>(), 6._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->ValueAs<AFloat>(), 6._a);
 }
 
 TEST_F(ResolverConstEvalTest, Mat3x2_Construct_Columns_af) {
@@ -1282,32 +1282,32 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<AFloat>(), 1._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<AFloat>(), 1._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<AFloat>(), 2._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<AFloat>(), 2._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<AFloat>(), 3._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<AFloat>(), 3._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<AFloat>(), 4._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<AFloat>(), 4._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->As<AFloat>(), 5._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->ValueAs<AFloat>(), 5._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<AFloat>(), 6._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->ValueAs<AFloat>(), 6._a);
 }
 
 TEST_F(ResolverConstEvalTest, Array_i32_Zero) {
@@ -1329,22 +1329,22 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->ValueAs<i32>(), 0_i);
 }
 
 TEST_F(ResolverConstEvalTest, Array_f32_Zero) {
@@ -1366,22 +1366,22 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->ValueAs<f32>(), 0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Array_vec3_f32_Zero) {
@@ -1403,32 +1403,32 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Array_Struct_f32_Zero) {
@@ -1454,22 +1454,22 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 0_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Array_i32_Elements) {
@@ -1491,22 +1491,22 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<i32>(), 10_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<i32>(), 10_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<i32>(), 20_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<i32>(), 20_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<i32>(), 30_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<i32>(), 30_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->As<i32>(), 40_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->ValueAs<i32>(), 40_i);
 }
 
 TEST_F(ResolverConstEvalTest, Array_f32_Elements) {
@@ -1528,22 +1528,22 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 10_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 10_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 20_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 20_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 30_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 30_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->As<f32>(), 40_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->ValueAs<f32>(), 40_f);
 }
 
 TEST_F(ResolverConstEvalTest, Array_vec3_f32_Elements) {
@@ -1562,12 +1562,12 @@
     EXPECT_FALSE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f32>(), 1_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f32>(), 2_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f32>(), 3_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f32>(), 4_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 5_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 6_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 1_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 2_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 3_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 4_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 5_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 6_f);
 }
 
 TEST_F(ResolverConstEvalTest, Array_Struct_f32_Elements) {
@@ -1595,22 +1595,22 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f32>(), 1_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 1_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f32>(), 2_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 2_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f32>(), 3_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 3_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 4_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 4_f);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_I32s_ZeroInit) {
@@ -1636,19 +1636,19 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<i32>(), 0_i);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_MixedScalars_ZeroInit) {
@@ -1681,31 +1681,31 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::U32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<u32>(), 0_u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->Type()->Is<type::F16>());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->Type()->Is<type::Bool>());
-    EXPECT_EQ(sem->ConstantValue()->Index(4)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(4)->ValueAs<bool>(), false);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_VectorF32s_ZeroInit) {
@@ -1736,9 +1736,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(0)->Type()->As<type::Vector>()->type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
@@ -1746,9 +1746,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(1)->Type()->As<type::Vector>()->type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
@@ -1756,9 +1756,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(2)->Type()->As<type::Vector>()->type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->ValueAs<f32>(), 0._f);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_MixedVectors_ZeroInit) {
@@ -1793,8 +1793,8 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(0)->Type()->As<type::Vector>()->type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<i32>(), 0_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<i32>(), 0_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
@@ -1802,9 +1802,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(1)->Type()->As<type::Vector>()->type()->Is<type::U32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<u32>(), 0_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<u32>(), 0_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<u32>(), 0_u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
@@ -1812,10 +1812,10 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(2)->Type()->As<type::Vector>()->type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->As<f32>(), 0._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(3)->As<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->ValueAs<f32>(), 0._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(3)->ValueAs<f32>(), 0._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AnyZero());
@@ -1823,9 +1823,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(3)->Type()->As<type::Vector>()->type()->Is<type::F16>());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(0)->As<f16>(), 0._h);
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(1)->As<f16>(), 0._h);
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(2)->As<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(0)->ValueAs<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(1)->ValueAs<f16>(), 0._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(2)->ValueAs<f16>(), 0._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AnyZero());
@@ -1833,8 +1833,8 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(4)->Type()->As<type::Vector>()->type()->Is<type::Bool>());
-    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(0)->As<bool>(), false);
-    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(1)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(0)->ValueAs<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(1)->ValueAs<bool>(), false);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_Struct_ZeroInit) {
@@ -1868,17 +1868,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<sem::Struct>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<i32>(), 0_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<u32>(), 0_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 0_f);
 
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<sem::Struct>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<i32>(), 0_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<u32>(), 0_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 0_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<i32>(), 0_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 0_f);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_MixedScalars_Construct) {
@@ -1911,31 +1911,31 @@
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<i32>(), 1_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<i32>(), 1_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::U32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<u32>(), 2_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<u32>(), 2_u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 3._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 3._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->Type()->Is<type::F16>());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->As<f16>(), 4._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->ValueAs<f16>(), 4._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->Type()->Is<type::Bool>());
-    EXPECT_EQ(sem->ConstantValue()->Index(4)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(4)->ValueAs<bool>(), false);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_MixedVectors_Construct) {
@@ -1971,8 +1971,8 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(0)->Type()->As<type::Vector>()->type()->Is<type::I32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<i32>(), 1_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<i32>(), 1_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<i32>(), 1_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<i32>(), 1_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
@@ -1980,9 +1980,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(1)->Type()->As<type::Vector>()->type()->Is<type::U32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<u32>(), 2_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<u32>(), 2_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<u32>(), 2_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<u32>(), 2_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<u32>(), 2_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<u32>(), 2_u);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
@@ -1990,10 +1990,10 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(2)->Type()->As<type::Vector>()->type()->Is<type::F32>());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->As<f32>(), 3._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->As<f32>(), 3._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->As<f32>(), 3._f);
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(3)->As<f32>(), 3._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(0)->ValueAs<f32>(), 3._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(1)->ValueAs<f32>(), 3._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(2)->ValueAs<f32>(), 3._f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->Index(3)->ValueAs<f32>(), 3._f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(3)->AnyZero());
@@ -2001,9 +2001,9 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(3)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(3)->Type()->As<type::Vector>()->type()->Is<type::F16>());
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(0)->As<f16>(), 4._h);
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(1)->As<f16>(), 4._h);
-    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(2)->As<f16>(), 4._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(0)->ValueAs<f16>(), 4._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(1)->ValueAs<f16>(), 4._h);
+    EXPECT_EQ(sem->ConstantValue()->Index(3)->Index(2)->ValueAs<f16>(), 4._h);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->AnyZero());
@@ -2011,8 +2011,8 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(4)->Type()->Is<type::Vector>());
     EXPECT_TRUE(
         sem->ConstantValue()->Index(4)->Type()->As<type::Vector>()->type()->Is<type::Bool>());
-    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(0)->As<bool>(), false);
-    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(1)->As<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(0)->ValueAs<bool>(), false);
+    EXPECT_EQ(sem->ConstantValue()->Index(4)->Index(1)->ValueAs<bool>(), false);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_Struct_Construct) {
@@ -2048,17 +2048,17 @@
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<sem::Struct>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<i32>(), 1_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<u32>(), 2_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->As<f32>(), 3_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<i32>(), 1_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<u32>(), 2_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 3_f);
 
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<sem::Struct>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<i32>(), 4_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<u32>(), 0_u);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 6_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<i32>(), 4_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<u32>(), 0_u);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 6_f);
 }
 
 TEST_F(ResolverConstEvalTest, Struct_Array_Construct) {
@@ -2088,16 +2088,16 @@
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->Type()->Is<type::Array>());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->As<i32>(), 1_i);
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->As<u32>(), 2_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(0)->ValueAs<i32>(), 1_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->Index(1)->ValueAs<u32>(), 2_i);
 
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->Type()->Is<type::Array>());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->As<i32>(), 1_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->As<u32>(), 2_f);
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->As<f32>(), 3_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(0)->ValueAs<i32>(), 1_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(1)->ValueAs<u32>(), 2_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 3_f);
 }
 
 }  // namespace
diff --git a/src/tint/resolver/const_eval_conversion_test.cc b/src/tint/resolver/const_eval_conversion_test.cc
index 435c4e6..d4b562f 100644
--- a/src/tint/resolver/const_eval_conversion_test.cc
+++ b/src/tint/resolver/const_eval_conversion_test.cc
@@ -242,17 +242,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 1);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 1);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 2);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 2);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 3);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Convert_u32_to_f32) {
@@ -275,17 +275,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 10.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 10.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 20.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 20.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 30.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 30.f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Convert_f16_to_i32) {
@@ -310,17 +310,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), 1_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), 1_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), 2_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), 2_i);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), 3_i);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), 3_i);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Convert_u32_to_f16) {
@@ -345,17 +345,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 10.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 10.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), 20.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), 20.f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 30.f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 30.f);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Convert_Large_f32_to_i32) {
@@ -378,17 +378,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), i32::Highest());
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), i32::Highest());
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), i32::Lowest());
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), i32::Lowest());
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), i32::Highest());
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), i32::Highest());
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Convert_Large_f32_to_u32) {
@@ -411,17 +411,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AInt>(), u32::Highest());
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AInt>(), u32::Highest());
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AInt>(), u32::Lowest());
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AInt>(), u32::Lowest());
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AInt>(), u32::Highest());
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AInt>(), u32::Highest());
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Convert_Large_f32_to_f16) {
@@ -456,20 +456,20 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<AFloat>(), 0.0);
-    EXPECT_FALSE(std::signbit(sem->ConstantValue()->Index(0)->As<AFloat>().value));
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<AFloat>(), 0.0);
+    EXPECT_FALSE(std::signbit(sem->ConstantValue()->Index(0)->ValueAs<AFloat>().value));
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<AFloat>(), -0.0);
-    EXPECT_TRUE(std::signbit(sem->ConstantValue()->Index(1)->As<AFloat>().value));
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<AFloat>(), -0.0);
+    EXPECT_TRUE(std::signbit(sem->ConstantValue()->Index(1)->ValueAs<AFloat>().value));
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<AFloat>(), 0.0);
-    EXPECT_FALSE(std::signbit(sem->ConstantValue()->Index(2)->As<AFloat>().value));
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<AFloat>(), 0.0);
+    EXPECT_FALSE(std::signbit(sem->ConstantValue()->Index(2)->ValueAs<AFloat>().value));
 }
 
 }  // namespace
diff --git a/src/tint/resolver/const_eval_indexing_test.cc b/src/tint/resolver/const_eval_indexing_test.cc
index c894d8f..7f9ae6f 100644
--- a/src/tint/resolver/const_eval_indexing_test.cc
+++ b/src/tint/resolver/const_eval_indexing_test.cc
@@ -32,7 +32,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<i32>(), 3_i);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<i32>(), 3_i);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Index_OOB_High) {
@@ -64,7 +64,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<i32>(), 2_i);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<i32>(), 2_i);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Swizzle_Vector) {
@@ -83,12 +83,12 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 3._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 3._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 1._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 1._a);
 }
 
 TEST_F(ResolverConstEvalTest, Vec3_Swizzle_Chain) {
@@ -105,7 +105,7 @@
     EXPECT_TRUE(sem->ConstantValue()->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->As<i32>(), 2_i);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<i32>(), 2_i);
 }
 
 TEST_F(ResolverConstEvalTest, Mat3x2_Index) {
@@ -125,12 +125,12 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 5._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 5._a);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 6._a);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 6._a);
 }
 
 TEST_F(ResolverConstEvalTest, Mat3x2_Index_OOB_High) {
@@ -172,17 +172,17 @@
     EXPECT_TRUE(sem->ConstantValue()->Index(0)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(0)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(0)->As<f32>(), 4_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(0)->ValueAs<f32>(), 4_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(1)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(1)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(1)->As<f32>(), 5_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(1)->ValueAs<f32>(), 5_f);
 
     EXPECT_TRUE(sem->ConstantValue()->Index(2)->AllEqual());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AnyZero());
     EXPECT_FALSE(sem->ConstantValue()->Index(2)->AllZero());
-    EXPECT_EQ(sem->ConstantValue()->Index(2)->As<f32>(), 6_f);
+    EXPECT_EQ(sem->ConstantValue()->Index(2)->ValueAs<f32>(), 6_f);
 }
 
 TEST_F(ResolverConstEvalTest, Array_vec3_f32_Index_OOB_High) {
@@ -245,32 +245,32 @@
         EXPECT_TRUE(mat->ConstantValue()->Index(0)->Index(0)->AllEqual());
         EXPECT_FALSE(mat->ConstantValue()->Index(0)->Index(0)->AnyZero());
         EXPECT_FALSE(mat->ConstantValue()->Index(0)->Index(0)->AllZero());
-        EXPECT_EQ(mat->ConstantValue()->Index(0)->Index(0)->As<f32>(), 7_f);
+        EXPECT_EQ(mat->ConstantValue()->Index(0)->Index(0)->ValueAs<f32>(), 7_f);
 
         EXPECT_TRUE(mat->ConstantValue()->Index(0)->Index(1)->AllEqual());
         EXPECT_TRUE(mat->ConstantValue()->Index(0)->Index(1)->AnyZero());
         EXPECT_TRUE(mat->ConstantValue()->Index(0)->Index(1)->AllZero());
-        EXPECT_EQ(mat->ConstantValue()->Index(0)->Index(1)->As<f32>(), 0_f);
+        EXPECT_EQ(mat->ConstantValue()->Index(0)->Index(1)->ValueAs<f32>(), 0_f);
 
         EXPECT_TRUE(mat->ConstantValue()->Index(0)->Index(2)->AllEqual());
         EXPECT_FALSE(mat->ConstantValue()->Index(0)->Index(2)->AnyZero());
         EXPECT_FALSE(mat->ConstantValue()->Index(0)->Index(2)->AllZero());
-        EXPECT_EQ(mat->ConstantValue()->Index(0)->Index(2)->As<f32>(), 9_f);
+        EXPECT_EQ(mat->ConstantValue()->Index(0)->Index(2)->ValueAs<f32>(), 9_f);
 
         EXPECT_TRUE(mat->ConstantValue()->Index(1)->Index(0)->AllEqual());
         EXPECT_FALSE(mat->ConstantValue()->Index(1)->Index(0)->AnyZero());
         EXPECT_FALSE(mat->ConstantValue()->Index(1)->Index(0)->AllZero());
-        EXPECT_EQ(mat->ConstantValue()->Index(1)->Index(0)->As<f32>(), 10_f);
+        EXPECT_EQ(mat->ConstantValue()->Index(1)->Index(0)->ValueAs<f32>(), 10_f);
 
         EXPECT_TRUE(mat->ConstantValue()->Index(1)->Index(1)->AllEqual());
         EXPECT_FALSE(mat->ConstantValue()->Index(1)->Index(1)->AnyZero());
         EXPECT_FALSE(mat->ConstantValue()->Index(1)->Index(1)->AllZero());
-        EXPECT_EQ(mat->ConstantValue()->Index(1)->Index(1)->As<f32>(), 11_f);
+        EXPECT_EQ(mat->ConstantValue()->Index(1)->Index(1)->ValueAs<f32>(), 11_f);
 
         EXPECT_TRUE(mat->ConstantValue()->Index(1)->Index(2)->AllEqual());
         EXPECT_FALSE(mat->ConstantValue()->Index(1)->Index(2)->AnyZero());
         EXPECT_FALSE(mat->ConstantValue()->Index(1)->Index(2)->AllZero());
-        EXPECT_EQ(mat->ConstantValue()->Index(1)->Index(2)->As<f32>(), 12_f);
+        EXPECT_EQ(mat->ConstantValue()->Index(1)->Index(2)->ValueAs<f32>(), 12_f);
     }
     {
         auto* vec = Sem().Get(vec_expr);
@@ -287,17 +287,17 @@
         EXPECT_TRUE(vec->ConstantValue()->Index(0)->AllEqual());
         EXPECT_FALSE(vec->ConstantValue()->Index(0)->AnyZero());
         EXPECT_FALSE(vec->ConstantValue()->Index(0)->AllZero());
-        EXPECT_EQ(vec->ConstantValue()->Index(0)->As<f32>(), 7_f);
+        EXPECT_EQ(vec->ConstantValue()->Index(0)->ValueAs<f32>(), 7_f);
 
         EXPECT_TRUE(vec->ConstantValue()->Index(1)->AllEqual());
         EXPECT_TRUE(vec->ConstantValue()->Index(1)->AnyZero());
         EXPECT_TRUE(vec->ConstantValue()->Index(1)->AllZero());
-        EXPECT_EQ(vec->ConstantValue()->Index(1)->As<f32>(), 0_f);
+        EXPECT_EQ(vec->ConstantValue()->Index(1)->ValueAs<f32>(), 0_f);
 
         EXPECT_TRUE(vec->ConstantValue()->Index(2)->AllEqual());
         EXPECT_FALSE(vec->ConstantValue()->Index(2)->AnyZero());
         EXPECT_FALSE(vec->ConstantValue()->Index(2)->AllZero());
-        EXPECT_EQ(vec->ConstantValue()->Index(2)->As<f32>(), 9_f);
+        EXPECT_EQ(vec->ConstantValue()->Index(2)->ValueAs<f32>(), 9_f);
     }
     {
         auto* f = Sem().Get(f32_expr);
@@ -307,7 +307,7 @@
         EXPECT_TRUE(f->ConstantValue()->AllEqual());
         EXPECT_FALSE(f->ConstantValue()->AnyZero());
         EXPECT_FALSE(f->ConstantValue()->AllZero());
-        EXPECT_EQ(f->ConstantValue()->As<f32>(), 9_f);
+        EXPECT_EQ(f->ConstantValue()->ValueAs<f32>(), 9_f);
     }
 }
 }  // namespace
diff --git a/src/tint/resolver/const_eval_member_access_test.cc b/src/tint/resolver/const_eval_member_access_test.cc
index 1dcd3a7..a1e7e59 100644
--- a/src/tint/resolver/const_eval_member_access_test.cc
+++ b/src/tint/resolver/const_eval_member_access_test.cc
@@ -56,9 +56,9 @@
     EXPECT_FALSE(o1->ConstantValue()->AnyZero());
     EXPECT_FALSE(o1->ConstantValue()->AllZero());
     EXPECT_TRUE(o1->ConstantValue()->Type()->Is<sem::Struct>());
-    EXPECT_EQ(o1->ConstantValue()->Index(0)->As<i32>(), 1_i);
-    EXPECT_EQ(o1->ConstantValue()->Index(1)->As<u32>(), 2_u);
-    EXPECT_EQ(o1->ConstantValue()->Index(2)->As<f32>(), 3_f);
+    EXPECT_EQ(o1->ConstantValue()->Index(0)->ValueAs<i32>(), 1_i);
+    EXPECT_EQ(o1->ConstantValue()->Index(1)->ValueAs<u32>(), 2_u);
+    EXPECT_EQ(o1->ConstantValue()->Index(2)->ValueAs<f32>(), 3_f);
 
     auto* i2 = Sem().Get(i2_expr);
     ASSERT_NE(i2->ConstantValue(), nullptr);
@@ -66,7 +66,7 @@
     EXPECT_FALSE(i2->ConstantValue()->AnyZero());
     EXPECT_FALSE(i2->ConstantValue()->AllZero());
     EXPECT_TRUE(i2->ConstantValue()->Type()->Is<type::U32>());
-    EXPECT_EQ(i2->ConstantValue()->As<u32>(), 2_u);
+    EXPECT_EQ(i2->ConstantValue()->ValueAs<u32>(), 2_u);
 }
 
 TEST_F(ResolverConstEvalTest, Matrix_AFloat_Construct_From_AInt_Vectors) {
diff --git a/src/tint/resolver/const_eval_test.h b/src/tint/resolver/const_eval_test.h
index 0429e8f..1420be8 100644
--- a/src/tint/resolver/const_eval_test.h
+++ b/src/tint/resolver/const_eval_test.h
@@ -42,13 +42,13 @@
                            utils::Vector<builder::Scalar, N>& scalars) {
     Switch(
         c->Type(),  //
-        [&](const type::AbstractInt*) { scalars.Push(c->As<AInt>()); },
-        [&](const type::AbstractFloat*) { scalars.Push(c->As<AFloat>()); },
-        [&](const type::Bool*) { scalars.Push(c->As<bool>()); },
-        [&](const type::I32*) { scalars.Push(c->As<i32>()); },
-        [&](const type::U32*) { scalars.Push(c->As<u32>()); },
-        [&](const type::F32*) { scalars.Push(c->As<f32>()); },
-        [&](const type::F16*) { scalars.Push(c->As<f16>()); },
+        [&](const type::AbstractInt*) { scalars.Push(c->ValueAs<AInt>()); },
+        [&](const type::AbstractFloat*) { scalars.Push(c->ValueAs<AFloat>()); },
+        [&](const type::Bool*) { scalars.Push(c->ValueAs<bool>()); },
+        [&](const type::I32*) { scalars.Push(c->ValueAs<i32>()); },
+        [&](const type::U32*) { scalars.Push(c->ValueAs<u32>()); },
+        [&](const type::F32*) { scalars.Push(c->ValueAs<f32>()); },
+        [&](const type::F16*) { scalars.Push(c->ValueAs<f16>()); },
         [&](Default) {
             size_t i = 0;
             while (auto* child = c->Index(i++)) {
diff --git a/src/tint/resolver/const_eval_unary_op_test.cc b/src/tint/resolver/const_eval_unary_op_test.cc
index cb342d1..df67e54 100644
--- a/src/tint/resolver/const_eval_unary_op_test.cc
+++ b/src/tint/resolver/const_eval_unary_op_test.cc
@@ -159,7 +159,7 @@
     (void)c;
     EXPECT_TRUE(r()->Resolve()) << r()->error();
     auto* sem = Sem().Get(c);
-    EXPECT_EQ(sem->ConstantValue()->As<AInt>(), 9223372036854775808_a);
+    EXPECT_EQ(sem->ConstantValue()->ValueAs<AInt>(), 9223372036854775808_a);
 }
 
 INSTANTIATE_TEST_SUITE_P(Not,
diff --git a/src/tint/resolver/resolver.cc b/src/tint/resolver/resolver.cc
index 7811e15..6bc8383 100644
--- a/src/tint/resolver/resolver.cc
+++ b/src/tint/resolver/resolver.cc
@@ -480,7 +480,7 @@
         }
 
         auto const_value = materialized->ConstantValue();
-        auto value = const_value->As<AInt>();
+        auto value = const_value->ValueAs<AInt>();
         if (value < 0) {
             AddError("@id value must be non-negative", id_attr->source);
             return nullptr;
@@ -660,7 +660,7 @@
                 }
 
                 auto const_value = materialized->ConstantValue();
-                auto value = const_value->As<AInt>();
+                auto value = const_value->ValueAs<AInt>();
                 if (value < 0) {
                     AddError("@binding value must be non-negative", attr->source);
                     return nullptr;
@@ -684,7 +684,7 @@
                 }
 
                 auto const_value = materialized->ConstantValue();
-                auto value = const_value->As<AInt>();
+                auto value = const_value->ValueAs<AInt>();
                 if (value < 0) {
                     AddError("@group value must be non-negative", attr->source);
                     return nullptr;
@@ -762,7 +762,7 @@
             if (!materialized) {
                 return nullptr;
             }
-            binding_point.binding = materialized->ConstantValue()->As<uint32_t>();
+            binding_point.binding = materialized->ConstantValue()->ValueAs<u32>();
         }
         {
             ExprEvalStageConstraint constraint{sem::EvaluationStage::kConstant, "@group value"};
@@ -773,7 +773,7 @@
             if (!materialized) {
                 return nullptr;
             }
-            binding_point.group = materialized->ConstantValue()->As<uint32_t>();
+            binding_point.group = materialized->ConstantValue()->ValueAs<u32>();
         }
     }
 
@@ -808,7 +808,7 @@
     }
 
     auto const_value = materialized->ConstantValue();
-    auto value = const_value->As<AInt>();
+    auto value = const_value->ValueAs<AInt>();
     if (value < 0) {
         AddError("@location value must be non-negative", attr->source);
         return utils::Failure;
@@ -946,7 +946,7 @@
             assertion->condition->source);
         return nullptr;
     }
-    if (!cond->As<bool>()) {
+    if (!cond->ValueAs<bool>()) {
         AddError("static assertion failed", assertion->source);
         return nullptr;
     }
@@ -1181,11 +1181,11 @@
             return false;
         }
         if (auto* value = materialized->ConstantValue()) {
-            if (value->As<AInt>() < 1) {
+            if (value->ValueAs<AInt>() < 1) {
                 AddError("workgroup_size argument must be at least 1", values[i]->source);
                 return false;
             }
-            ws[i] = value->As<uint32_t>();
+            ws[i] = value->ValueAs<u32>();
         } else {
             ws[i] = std::nullopt;
         }
@@ -1571,7 +1571,7 @@
         // short-circuiting.
         if (sem_expr->ConstantValue()) {
             if (auto binary = logical_binary_lhs_to_parent_.Find(expr)) {
-                const bool lhs_is_true = sem_expr->ConstantValue()->As<bool>();
+                const bool lhs_is_true = sem_expr->ConstantValue()->ValueAs<bool>();
                 if (((*binary)->IsLogicalAnd() && !lhs_is_true) ||
                     ((*binary)->IsLogicalOr() && lhs_is_true)) {
                     // Mark entire expression tree to not const-evaluate
@@ -3110,7 +3110,7 @@
         return nullptr;
     }
 
-    int64_t count = count_val->As<AInt>();
+    int64_t count = count_val->ValueAs<AInt>();
     if (count < 1) {
         AddError("array count (" + std::to_string(count) + ") must be greater than 0",
                  count_expr->source);
@@ -3270,7 +3270,7 @@
                         AddError("@offset must be constant expression", o->expr->source);
                         return false;
                     }
-                    offset = const_value->As<uint64_t>();
+                    offset = const_value->ValueAs<uint64_t>();
 
                     if (offset < struct_size) {
                         AddError("offsets must be in ascending order", o->source);
@@ -3297,7 +3297,7 @@
                         AddError("@align must be constant expression", a->source);
                         return false;
                     }
-                    auto value = const_value->As<AInt>();
+                    auto value = const_value->ValueAs<AInt>();
 
                     if (value <= 0 || !utils::IsPowerOfTwo(value)) {
                         AddError("@align value must be a positive, power-of-two integer",
@@ -3327,13 +3327,13 @@
                         return false;
                     }
                     {
-                        auto value = const_value->As<AInt>();
+                        auto value = const_value->ValueAs<AInt>();
                         if (value <= 0) {
                             AddError("@size must be a positive integer", s->source);
                             return false;
                         }
                     }
-                    auto value = const_value->As<uint64_t>();
+                    auto value = const_value->ValueAs<uint64_t>();
                     if (value < size) {
                         AddError("@size must be at least as big as the type's size (" +
                                      std::to_string(size) + ")",
diff --git a/src/tint/resolver/validator.cc b/src/tint/resolver/validator.cc
index 24b2e7b..479cb9c 100644
--- a/src/tint/resolver/validator.cc
+++ b/src/tint/resolver/validator.cc
@@ -1573,7 +1573,7 @@
         if (auto values = arg->ConstantValue()) {
             if (auto* vector = values->Type()->As<type::Vector>()) {
                 for (size_t i = 0; i < vector->Width(); i++) {
-                    auto value = values->Index(i)->As<AInt>();
+                    auto value = values->Index(i)->ValueAs<AInt>();
                     if (value < min || value > max) {
                         AddError("each component of the " + name + " argument must be at least " +
                                      std::to_string(min) + " and at most " + std::to_string(max) +
@@ -1584,7 +1584,7 @@
                     }
                 }
             } else {
-                auto value = values->As<AInt>();
+                auto value = values->ValueAs<AInt>();
                 if (value < min || value > max) {
                     AddError("the " + name + " argument must be at least " + std::to_string(min) +
                                  " and at most " + std::to_string(max) + ". " + name + " is " +
@@ -2239,7 +2239,7 @@
                 return false;
             }
 
-            auto value = selector->Value()->As<uint32_t>();
+            auto value = selector->Value()->ValueAs<u32>();
             if (auto added = selectors.Add(value, selector->Declaration()->source); !added) {
                 AddError("duplicate switch case '" +
                              (decl_ty->IsAnyOf<type::I32, type::AbstractNumeric>()
diff --git a/src/tint/resolver/variable_test.cc b/src/tint/resolver/variable_test.cc
index ad3420e..1961516 100644
--- a/src/tint/resolver/variable_test.cc
+++ b/src/tint/resolver/variable_test.cc
@@ -1011,7 +1011,7 @@
 
     ASSERT_TRUE(TypeOf(c)->Is<type::I32>());
 
-    EXPECT_EQ(Sem().Get(c)->ConstantValue()->As<i32>(), 42_i);
+    EXPECT_EQ(Sem().Get(c)->ConstantValue()->ValueAs<i32>(), 42_i);
 }
 
 TEST_F(ResolverVariableTest, LocalConst_ConstEval) {
@@ -1023,7 +1023,7 @@
 
     ASSERT_TRUE(TypeOf(c)->Is<type::I32>());
 
-    EXPECT_EQ(Sem().Get(c)->ConstantValue()->As<i32>(), 3_i);
+    EXPECT_EQ(Sem().Get(c)->ConstantValue()->ValueAs<i32>(), 3_i);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1178,7 +1178,7 @@
 
     ASSERT_TRUE(TypeOf(c)->Is<type::I32>());
 
-    EXPECT_EQ(Sem().Get(c)->ConstantValue()->As<i32>(), 42_i);
+    EXPECT_EQ(Sem().Get(c)->ConstantValue()->ValueAs<i32>(), 42_i);
 }
 
 TEST_F(ResolverVariableTest, GlobalConst_ConstEval) {
@@ -1188,7 +1188,7 @@
 
     ASSERT_TRUE(TypeOf(c)->Is<type::I32>());
 
-    EXPECT_EQ(Sem().Get(c)->ConstantValue()->As<i32>(), 3_i);
+    EXPECT_EQ(Sem().Get(c)->ConstantValue()->ValueAs<i32>(), 3_i);
 }
 
 ////////////////////////////////////////////////////////////////////////////////////////////////////
diff --git a/src/tint/transform/direct_variable_access.cc b/src/tint/transform/direct_variable_access.cc
index 5f1ffc1..1dbb51e 100644
--- a/src/tint/transform/direct_variable_access.cc
+++ b/src/tint/transform/direct_variable_access.cc
@@ -559,7 +559,7 @@
     const ast::Expression* BuildDynamicIndex(const sem::Expression* idx, bool cast_to_u32) {
         if (auto* val = idx->ConstantValue()) {
             // Expression evaluated to a constant value. Just emit that constant.
-            return b.Expr(val->As<AInt>());
+            return b.Expr(val->ValueAs<AInt>());
         }
 
         // Expression is not a constant, clone the expression.
diff --git a/src/tint/transform/std140.cc b/src/tint/transform/std140.cc
index d0bc205..3f94018 100644
--- a/src/tint/transform/std140.cc
+++ b/src/tint/transform/std140.cc
@@ -545,7 +545,7 @@
                 [&](const sem::IndexAccessorExpression* a) {
                     // Array, matrix or vector index.
                     if (auto* val = a->Index()->ConstantValue()) {
-                        access.indices.Push(val->As<u32>());
+                        access.indices.Push(val->ValueAs<u32>());
                     } else {
                         access.indices.Push(DynamicIndex{access.dynamic_indices.Length()});
                         access.dynamic_indices.Push(a->Index());
diff --git a/src/tint/transform/zero_init_workgroup_memory.cc b/src/tint/transform/zero_init_workgroup_memory.cc
index a6fe234..c33834a 100644
--- a/src/tint/transform/zero_init_workgroup_memory.cc
+++ b/src/tint/transform/zero_init_workgroup_memory.cc
@@ -405,7 +405,7 @@
             }
             auto* sem = ctx.src->Sem().Get(expr);
             if (auto* c = sem->ConstantValue()) {
-                workgroup_size_const *= c->As<AInt>();
+                workgroup_size_const *= c->ValueAs<AInt>();
                 continue;
             }
             // Constant value could not be found. Build expression instead.
diff --git a/src/tint/writer/glsl/generator_impl.cc b/src/tint/writer/glsl/generator_impl.cc
index 6f97cc6..221d9bc 100644
--- a/src/tint/writer/glsl/generator_impl.cc
+++ b/src/tint/writer/glsl/generator_impl.cc
@@ -2298,23 +2298,23 @@
     return Switch(
         constant->Type(),  //
         [&](const type::Bool*) {
-            out << (constant->As<AInt>() ? "true" : "false");
+            out << (constant->ValueAs<AInt>() ? "true" : "false");
             return true;
         },
         [&](const type::F32*) {
-            PrintF32(out, constant->As<float>());
+            PrintF32(out, constant->ValueAs<f32>());
             return true;
         },
         [&](const type::F16*) {
-            PrintF16(out, constant->As<float>());
+            PrintF16(out, constant->ValueAs<f16>());
             return true;
         },
         [&](const type::I32*) {
-            out << constant->As<AInt>();
+            out << constant->ValueAs<AInt>();
             return true;
         },
         [&](const type::U32*) {
-            out << constant->As<AInt>() << "u";
+            out << constant->ValueAs<AInt>() << "u";
             return true;
         },
         [&](const type::Vector* v) {
diff --git a/src/tint/writer/hlsl/generator_impl.cc b/src/tint/writer/hlsl/generator_impl.cc
index d62c668..d21865b 100644
--- a/src/tint/writer/hlsl/generator_impl.cc
+++ b/src/tint/writer/hlsl/generator_impl.cc
@@ -2495,7 +2495,7 @@
         case sem::BuiltinType::kTextureGather:
             out << ".Gather";
             if (builtin->Parameters()[0]->Usage() == sem::ParameterUsage::kComponent) {
-                switch (call->Arguments()[0]->ConstantValue()->As<AInt>()) {
+                switch (call->Arguments()[0]->ConstantValue()->ValueAs<AInt>()) {
                     case 0:
                         out << "Red";
                         break;
@@ -3268,26 +3268,26 @@
     return Switch(
         constant->Type(),  //
         [&](const type::Bool*) {
-            out << (constant->As<AInt>() ? "true" : "false");
+            out << (constant->ValueAs<AInt>() ? "true" : "false");
             return true;
         },
         [&](const type::F32*) {
-            PrintF32(out, constant->As<float>());
+            PrintF32(out, constant->ValueAs<f32>());
             return true;
         },
         [&](const type::F16*) {
             // emit a f16 scalar with explicit float16_t type declaration.
             out << "float16_t(";
-            PrintF16(out, constant->As<float>());
+            PrintF16(out, constant->ValueAs<f16>());
             out << ")";
             return true;
         },
         [&](const type::I32*) {
-            out << constant->As<AInt>();
+            out << constant->ValueAs<AInt>();
             return true;
         },
         [&](const type::U32*) {
-            out << constant->As<AInt>() << "u";
+            out << constant->ValueAs<AInt>() << "u";
             return true;
         },
         [&](const type::Vector* v) {
diff --git a/src/tint/writer/msl/generator_impl.cc b/src/tint/writer/msl/generator_impl.cc
index 6b47d8c..15e190b 100644
--- a/src/tint/writer/msl/generator_impl.cc
+++ b/src/tint/writer/msl/generator_impl.cc
@@ -1264,7 +1264,7 @@
                     break;  // Other texture dimensions don't have an offset
             }
         }
-        auto c = component->ConstantValue()->As<AInt>();
+        auto c = component->ConstantValue()->ValueAs<AInt>();
         switch (c.value) {
             case 0:
                 out << "component::x";
@@ -1662,23 +1662,23 @@
     return Switch(
         constant->Type(),  //
         [&](const type::Bool*) {
-            out << (constant->As<AInt>() ? "true" : "false");
+            out << (constant->ValueAs<AInt>() ? "true" : "false");
             return true;
         },
         [&](const type::F32*) {
-            PrintF32(out, constant->As<float>());
+            PrintF32(out, constant->ValueAs<f32>());
             return true;
         },
         [&](const type::F16*) {
-            PrintF16(out, constant->As<float>());
+            PrintF16(out, constant->ValueAs<f16>());
             return true;
         },
         [&](const type::I32*) {
-            PrintI32(out, constant->As<int32_t>());
+            PrintI32(out, constant->ValueAs<i32>());
             return true;
         },
         [&](const type::U32*) {
-            out << constant->As<AInt>() << "u";
+            out << constant->ValueAs<AInt>() << "u";
             return true;
         },
         [&](const type::Vector* v) {
diff --git a/src/tint/writer/spirv/builder.cc b/src/tint/writer/spirv/builder.cc
index cc04df1..79b0c92 100644
--- a/src/tint/writer/spirv/builder.cc
+++ b/src/tint/writer/spirv/builder.cc
@@ -905,7 +905,7 @@
                                     Operand(result_type_id),
                                     extract,
                                     Operand(info->source_id),
-                                    Operand(idx_constval->As<uint32_t>()),
+                                    Operand(idx_constval->ValueAs<u32>()),
                                 })) {
             return false;
         }
@@ -1681,23 +1681,23 @@
     return Switch(
         ty,  //
         [&](const type::Bool*) {
-            bool val = constant->As<bool>();
+            bool val = constant->ValueAs<bool>();
             return GenerateConstantIfNeeded(ScalarConstant::Bool(val));
         },
         [&](const type::F32*) {
-            auto val = constant->As<f32>();
+            auto val = constant->ValueAs<f32>();
             return GenerateConstantIfNeeded(ScalarConstant::F32(val.value));
         },
         [&](const type::F16*) {
-            auto val = constant->As<f16>();
+            auto val = constant->ValueAs<f16>();
             return GenerateConstantIfNeeded(ScalarConstant::F16(val.value));
         },
         [&](const type::I32*) {
-            auto val = constant->As<i32>();
+            auto val = constant->ValueAs<i32>();
             return GenerateConstantIfNeeded(ScalarConstant::I32(val.value));
         },
         [&](const type::U32*) {
-            auto val = constant->As<u32>();
+            auto val = constant->ValueAs<u32>();
             return GenerateConstantIfNeeded(ScalarConstant::U32(val.value));
         },
         [&](const type::Vector* v) { return composite(v->Width()); },
@@ -3451,7 +3451,7 @@
                 continue;
             }
 
-            params.push_back(Operand(selector->Value()->As<uint32_t>()));
+            params.push_back(Operand(selector->Value()->ValueAs<u32>()));
             params.push_back(Operand(block_id));
         }
     }