diff --git a/src/inspector/inspector.cc b/src/inspector/inspector.cc
index 0e64db7..dd2bdb2 100644
--- a/src/inspector/inspector.cc
+++ b/src/inspector/inspector.cc
@@ -66,33 +66,33 @@
     return {ComponentType::kFloat, CompositionType::kScalar};
   } else if (type->is_float_vector()) {
     auto* vec = type->As<sem::Vector>();
-    if (vec->size() == 2) {
+    if (vec->Width() == 2) {
       return {ComponentType::kFloat, CompositionType::kVec2};
-    } else if (vec->size() == 3) {
+    } else if (vec->Width() == 3) {
       return {ComponentType::kFloat, CompositionType::kVec3};
-    } else if (vec->size() == 4) {
+    } else if (vec->Width() == 4) {
       return {ComponentType::kFloat, CompositionType::kVec4};
     }
   } else if (type->is_unsigned_integer_scalar()) {
     return {ComponentType::kUInt, CompositionType::kScalar};
   } else if (type->is_unsigned_integer_vector()) {
     auto* vec = type->As<sem::Vector>();
-    if (vec->size() == 2) {
+    if (vec->Width() == 2) {
       return {ComponentType::kUInt, CompositionType::kVec2};
-    } else if (vec->size() == 3) {
+    } else if (vec->Width() == 3) {
       return {ComponentType::kUInt, CompositionType::kVec3};
-    } else if (vec->size() == 4) {
+    } else if (vec->Width() == 4) {
       return {ComponentType::kUInt, CompositionType::kVec4};
     }
   } else if (type->is_signed_integer_scalar()) {
     return {ComponentType::kSInt, CompositionType::kScalar};
   } else if (type->is_signed_integer_vector()) {
     auto* vec = type->As<sem::Vector>();
-    if (vec->size() == 2) {
+    if (vec->Width() == 2) {
       return {ComponentType::kSInt, CompositionType::kVec2};
-    } else if (vec->size() == 3) {
+    } else if (vec->Width() == 3) {
       return {ComponentType::kSInt, CompositionType::kVec3};
-    } else if (vec->size() == 4) {
+    } else if (vec->Width() == 4) {
       return {ComponentType::kSInt, CompositionType::kVec4};
     }
   }
diff --git a/src/intrinsic_table.cc b/src/intrinsic_table.cc
index c134f43..82c1deb 100644
--- a/src/intrinsic_table.cc
+++ b/src/intrinsic_table.cc
@@ -335,7 +335,7 @@
   }
 
   if (auto* v = ty->As<sem::Vector>()) {
-    N = v->size();
+    N = v->Width();
     T = v->type();
     return true;
   }
@@ -354,7 +354,7 @@
   }
 
   if (auto* v = ty->As<sem::Vector>()) {
-    if (v->size() == N) {
+    if (v->Width() == N) {
       T = v->type();
       return true;
     }
@@ -395,7 +395,7 @@
   }
   if (auto* m = ty->As<sem::Matrix>()) {
     M = m->columns();
-    N = m->ColumnType()->size();
+    N = m->ColumnType()->Width();
     T = m->type();
     return true;
   }
diff --git a/src/resolver/intrinsic_test.cc b/src/resolver/intrinsic_test.cc
index d94ed2d..95c0813 100644
--- a/src/resolver/intrinsic_test.cc
+++ b/src/resolver/intrinsic_test.cc
@@ -77,7 +77,7 @@
   ASSERT_NE(TypeOf(expr), nullptr);
   ASSERT_TRUE(TypeOf(expr)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(expr)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_P(ResolverIntrinsicDerivativeTest, MissingParam) {
@@ -139,7 +139,7 @@
   ASSERT_NE(TypeOf(expr), nullptr);
   ASSERT_TRUE(TypeOf(expr)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(expr)->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_FloatMethod, Scalar) {
@@ -301,7 +301,7 @@
   } else {
     EXPECT_TRUE(TypeOf(expr)->As<sem::Vector>()->type()->Is<sem::U32>());
   }
-  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->Width(), 4u);
 }
 
 INSTANTIATE_TEST_SUITE_P(
@@ -366,7 +366,7 @@
   } else {
     EXPECT_TRUE(TypeOf(expr)->As<sem::Vector>()->type()->Is<sem::U32>());
   }
-  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->Width(), 4u);
 }
 
 INSTANTIATE_TEST_SUITE_P(
@@ -455,7 +455,7 @@
 
   ASSERT_NE(TypeOf(expr), nullptr);
   EXPECT_TRUE(TypeOf(expr)->Is<sem::Vector>());
-  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(expr)->As<sem::Vector>()->Width(), 3u);
   EXPECT_TRUE(TypeOf(expr)->As<sem::Vector>()->type()->Is<sem::F32>());
 }
 
@@ -668,9 +668,9 @@
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
   if (pack4) {
-    EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 4u);
+    EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 4u);
   } else {
-    EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 2u);
+    EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 2u);
   }
 }
 
@@ -707,7 +707,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_SingleParam, Error_NoParams) {
@@ -812,7 +812,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverIntrinsicDataTest, Normalize_Error_NoParams) {
@@ -1028,7 +1028,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_SingleParam_FloatOrInt, Sint_Scalar) {
@@ -1053,7 +1053,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_signed_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_SingleParam_FloatOrInt, Uint_Scalar) {
@@ -1078,7 +1078,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_unsigned_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_SingleParam_FloatOrInt, Error_NoParams) {
@@ -1148,7 +1148,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_TwoParam, Error_NoTooManyParams) {
@@ -1222,7 +1222,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverIntrinsicTest, Cross_Error_NoArgs) {
@@ -1304,7 +1304,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverIntrinsicTest, Normalize_NoArgs) {
@@ -1344,7 +1344,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 TEST_P(ResolverIntrinsicTest_ThreeParam, Error_NoParams) {
   auto param = GetParam();
@@ -1395,7 +1395,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_ThreeParam_FloatOrInt, Sint_Scalar) {
@@ -1421,7 +1421,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_signed_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_ThreeParam_FloatOrInt, Uint_Scalar) {
@@ -1447,7 +1447,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_unsigned_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_ThreeParam_FloatOrInt, Error_NoParams) {
@@ -1498,7 +1498,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_signed_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_Int_SingleParam, Error_NoParams) {
@@ -1573,7 +1573,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_signed_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_FloatOrInt_TwoParam, Vector_Unsigned) {
@@ -1586,7 +1586,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_unsigned_integer_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_FloatOrInt_TwoParam, Vector_Float) {
@@ -1600,7 +1600,7 @@
 
   ASSERT_NE(TypeOf(call), nullptr);
   EXPECT_TRUE(TypeOf(call)->is_float_vector());
-  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(call)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_P(ResolverIntrinsicTest_FloatOrInt_TwoParam, Error_NoParams) {
@@ -1977,14 +1977,14 @@
       case ast::TextureDimension::kCubeArray: {
         auto* vec = As<sem::Vector>(TypeOf(call));
         ASSERT_NE(vec, nullptr);
-        EXPECT_EQ(vec->size(), 2u);
+        EXPECT_EQ(vec->Width(), 2u);
         EXPECT_TRUE(vec->type()->Is<sem::I32>());
         break;
       }
       case ast::TextureDimension::k3d: {
         auto* vec = As<sem::Vector>(TypeOf(call));
         ASSERT_NE(vec, nullptr);
-        EXPECT_EQ(vec->size(), 3u);
+        EXPECT_EQ(vec->Width(), 3u);
         EXPECT_TRUE(vec->type()->Is<sem::I32>());
         break;
       }
diff --git a/src/resolver/resolver.cc b/src/resolver/resolver.cc
index 2904df8..93012fd 100644
--- a/src/resolver/resolver.cc
+++ b/src/resolver/resolver.cc
@@ -1218,7 +1218,7 @@
                      stage_name.str() + " pipeline stage",
                  deco->source());
       }
-      if (!(type->is_float_vector() && type->As<sem::Vector>()->size() == 4)) {
+      if (!(type->is_float_vector() && type->As<sem::Vector>()->Width() == 4)) {
         AddError("store type of " + deco_to_str(deco) + " must be 'vec4<f32>'",
                  deco->source());
         return false;
@@ -1232,7 +1232,7 @@
         is_stage_mismatch = true;
       }
       if (!(type->is_unsigned_integer_vector() &&
-            type->As<sem::Vector>()->size() == 3)) {
+            type->As<sem::Vector>()->Width() == 3)) {
         AddError("store type of " + deco_to_str(deco) + " must be 'vec3<u32>'",
                  deco->source());
         return false;
@@ -2794,7 +2794,7 @@
         return false;
       }
 
-      value_cardinality_sum += value_vec->size();
+      value_cardinality_sum += value_vec->Width();
     } else {
       // A vector constructor can only accept vectors and scalars.
       AddError("expected vector or scalar type in vector constructor; found: " +
@@ -2807,7 +2807,7 @@
   // A correct vector constructor must either be a zero-value expression,
   // a single-value initializer (splat) expression, or the number of components
   // of all constructor arguments must add up to the vector cardinality.
-  if (value_cardinality_sum > 1 && value_cardinality_sum != vec_type->size()) {
+  if (value_cardinality_sum > 1 && value_cardinality_sum != vec_type->Width()) {
     if (values.empty()) {
       TINT_ICE(Resolver, diagnostics_)
           << "constructor arguments expected to be non-empty!";
@@ -2869,7 +2869,7 @@
     auto* value_type = TypeOf(value)->UnwrapRef();
     auto* value_vec = value_type->As<sem::Vector>();
 
-    if (!value_vec || value_vec->size() != matrix_type->rows() ||
+    if (!value_vec || value_vec->Width() != matrix_type->rows() ||
         elem_type != value_vec->type()) {
       AddError("expected argument type '" +
                    VectorPretty(matrix_type->rows(), elem_type) + "' in '" +
@@ -3050,7 +3050,7 @@
           return false;
       }
 
-      if (swizzle.back() >= vec->size()) {
+      if (swizzle.back() >= vec->Width()) {
         AddError("invalid vector swizzle member", expr->member()->source());
         return false;
       }
@@ -3130,7 +3130,7 @@
   const bool matching_vec_elem_types =
       lhs_vec_elem_type && rhs_vec_elem_type &&
       (lhs_vec_elem_type == rhs_vec_elem_type) &&
-      (lhs_vec->size() == rhs_vec->size());
+      (lhs_vec->Width() == rhs_vec->Width());
 
   const bool matching_types = matching_vec_elem_types || (lhs_type == rhs_type);
 
@@ -3222,7 +3222,7 @@
     // Vector times matrix
     if (lhs_vec_elem_type && lhs_vec_elem_type->Is<F32>() &&
         rhs_mat_elem_type && rhs_mat_elem_type->Is<F32>() &&
-        (lhs_vec->size() == rhs_mat->rows())) {
+        (lhs_vec->Width() == rhs_mat->rows())) {
       SetExprInfo(expr, builder_->create<sem::Vector>(lhs_vec->type(),
                                                       rhs_mat->columns()));
       return true;
@@ -3231,7 +3231,7 @@
     // Matrix times vector
     if (lhs_mat_elem_type && lhs_mat_elem_type->Is<F32>() &&
         rhs_vec_elem_type && rhs_vec_elem_type->Is<F32>() &&
-        (lhs_mat->columns() == rhs_vec->size())) {
+        (lhs_mat->columns() == rhs_vec->Width())) {
       SetExprInfo(expr, builder_->create<sem::Vector>(rhs_vec->type(),
                                                       lhs_mat->rows()));
       return true;
@@ -3270,13 +3270,13 @@
       if (lhs_vec_elem_type->Is<Bool>() &&
           (expr->IsEqual() || expr->IsNotEqual())) {
         SetExprInfo(expr, builder_->create<sem::Vector>(
-                              builder_->create<sem::Bool>(), lhs_vec->size()));
+                              builder_->create<sem::Bool>(), lhs_vec->Width()));
         return true;
       }
 
       if (lhs_vec_elem_type->is_numeric_scalar()) {
         SetExprInfo(expr, builder_->create<sem::Vector>(
-                              builder_->create<sem::Bool>(), lhs_vec->size()));
+                              builder_->create<sem::Bool>(), lhs_vec->Width()));
         return true;
       }
     }
diff --git a/src/resolver/resolver_constants.cc b/src/resolver/resolver_constants.cc
index 45de987..dc453cc 100644
--- a/src/resolver/resolver_constants.cc
+++ b/src/resolver/resolver_constants.cc
@@ -109,7 +109,7 @@
   }
 
   auto* elem_type = vec ? vec->type() : type;
-  int result_size = vec ? static_cast<int>(vec->size()) : 1;
+  int result_size = vec ? static_cast<int>(vec->Width()) : 1;
 
   // For zero value init, return 0s
   if (ctor_values.empty()) {
diff --git a/src/resolver/resolver_constants_test.cc b/src/resolver/resolver_constants_test.cc
index 198cd3b..512459d 100644
--- a/src/resolver/resolver_constants_test.cc
+++ b/src/resolver/resolver_constants_test.cc
@@ -96,7 +96,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::I32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -115,7 +115,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::U32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -134,7 +134,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::F32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -153,7 +153,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::Bool>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -172,7 +172,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::I32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -191,7 +191,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::U32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -210,7 +210,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::F32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -229,7 +229,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::Bool>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -248,7 +248,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::I32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -267,7 +267,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::U32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -286,7 +286,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::F32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -305,7 +305,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::Bool>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -324,7 +324,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::I32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -343,7 +343,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::U32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -362,7 +362,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::F32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -381,7 +381,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::Bool>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -400,7 +400,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::I32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
@@ -419,7 +419,7 @@
   EXPECT_NE(sem, nullptr);
   ASSERT_TRUE(sem->Type()->Is<sem::Vector>());
   EXPECT_TRUE(sem->Type()->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(sem->Type()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(sem->Type()->As<sem::Vector>()->Width(), 3u);
   EXPECT_EQ(sem->ConstantValue().Type(), sem->Type());
   EXPECT_TRUE(sem->ConstantValue().ElementType()->Is<sem::F32>());
   ASSERT_EQ(sem->ConstantValue().Elements().size(), 3u);
diff --git a/src/resolver/resolver_test.cc b/src/resolver/resolver_test.cc
index f176dc1..ad14dd3 100644
--- a/src/resolver/resolver_test.cc
+++ b/src/resolver/resolver_test.cc
@@ -552,7 +552,7 @@
 
   auto* ref = TypeOf(acc)->As<sem::Reference>();
   ASSERT_TRUE(ref->StoreType()->Is<sem::Vector>());
-  EXPECT_EQ(ref->StoreType()->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(ref->StoreType()->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTest, Expr_ArrayAccessor_Matrix_BothDimensions) {
@@ -709,7 +709,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTest, Expr_Constructor_Type_Vec3) {
@@ -721,7 +721,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTest, Expr_Constructor_Type_Vec4) {
@@ -733,7 +733,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTest, Expr_Identifier_GlobalVariable) {
@@ -1328,7 +1328,7 @@
   ASSERT_NE(TypeOf(mem), nullptr);
   ASSERT_TRUE(TypeOf(mem)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(mem)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(mem)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(mem)->As<sem::Vector>()->Width(), 4u);
   ASSERT_TRUE(Sem().Get(mem)->Is<sem::Swizzle>());
   EXPECT_THAT(Sem().Get(mem)->As<sem::Swizzle>()->Indices(),
               ElementsAre(0, 2, 1, 3));
@@ -1381,7 +1381,7 @@
   ASSERT_NE(TypeOf(mem), nullptr);
   ASSERT_TRUE(TypeOf(mem)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(mem)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(mem)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(mem)->As<sem::Vector>()->Width(), 2u);
   ASSERT_TRUE(Sem().Get(mem)->Is<sem::Swizzle>());
 }
 
@@ -1928,7 +1928,7 @@
   } else {
     EXPECT_TRUE(TypeOf(der)->As<sem::Vector>()->type()->Is<sem::F32>());
   }
-  EXPECT_EQ(TypeOf(der)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(der)->As<sem::Vector>()->Width(), 4u);
 }
 INSTANTIATE_TEST_SUITE_P(ResolverTest,
                          UnaryOpExpressionTest,
diff --git a/src/resolver/type_constructor_validation_test.cc b/src/resolver/type_constructor_validation_test.cc
index 0c275b8..a7556fb 100644
--- a/src/resolver/type_constructor_validation_test.cc
+++ b/src/resolver/type_constructor_validation_test.cc
@@ -746,7 +746,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -759,7 +759,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -772,7 +772,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -785,7 +785,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -798,7 +798,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -811,7 +811,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -824,7 +824,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 2u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 2u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1002,7 +1002,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1015,7 +1015,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1028,7 +1028,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1041,7 +1041,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1054,7 +1054,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1067,7 +1067,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1080,7 +1080,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1093,7 +1093,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1106,7 +1106,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 3u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 3u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1352,7 +1352,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1365,7 +1365,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1378,7 +1378,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::U32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1391,7 +1391,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::I32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1404,7 +1404,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::Bool>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1417,7 +1417,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1430,7 +1430,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1443,7 +1443,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1456,7 +1456,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1469,7 +1469,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1482,7 +1482,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1495,7 +1495,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1508,7 +1508,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
@@ -1535,7 +1535,7 @@
   ASSERT_NE(TypeOf(tc), nullptr);
   ASSERT_TRUE(TypeOf(tc)->Is<sem::Vector>());
   EXPECT_TRUE(TypeOf(tc)->As<sem::Vector>()->type()->Is<sem::F32>());
-  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->size(), 4u);
+  EXPECT_EQ(TypeOf(tc)->As<sem::Vector>()->Width(), 4u);
 }
 
 TEST_F(ResolverTypeConstructorValidationTest,
diff --git a/src/sem/constant.cc b/src/sem/constant.cc
index 8c5553b..3b9711b 100644
--- a/src/sem/constant.cc
+++ b/src/sem/constant.cc
@@ -36,7 +36,7 @@
     return ty;
   }
   if (auto* vec = ty->As<Vector>()) {
-    if (num_elements != vec->size()) {
+    if (num_elements != vec->Width()) {
       TINT_ICE(Semantic, diag)
           << "sem::Constant() type <-> num_element mismatch. type: '"
           << ty->type_name() << "' num_elements: " << num_elements;
diff --git a/src/sem/matrix_type.cc b/src/sem/matrix_type.cc
index c095f7c..f9fed56 100644
--- a/src/sem/matrix_type.cc
+++ b/src/sem/matrix_type.cc
@@ -25,7 +25,7 @@
 Matrix::Matrix(Vector* column_type, uint32_t columns)
     : subtype_(column_type->type()),
       column_type_(column_type),
-      rows_(column_type->size()),
+      rows_(column_type->Width()),
       columns_(columns) {
   TINT_ASSERT(AST, rows_ > 1);
   TINT_ASSERT(AST, rows_ < 5);
diff --git a/src/sem/type.cc b/src/sem/type.cc
index 338d8fd..16555f9 100644
--- a/src/sem/type.cc
+++ b/src/sem/type.cc
@@ -82,9 +82,9 @@
     return;
   }
   if (auto* vec = As<Vector>()) {
-    TINT_ASSERT(Semantic, vec->size() >= 2 && vec->size() <= 4);
-    align = vector_align[vec->size()];
-    size = vector_size[vec->size()];
+    TINT_ASSERT(Semantic, vec->Width() >= 2 && vec->Width() <= 4);
+    align = vector_align[vec->Width()];
+    size = vector_size[vec->Width()];
     return;
   }
   if (auto* mat = As<Matrix>()) {
diff --git a/src/sem/vector_type.cc b/src/sem/vector_type.cc
index 74cea14..1a44a52 100644
--- a/src/sem/vector_type.cc
+++ b/src/sem/vector_type.cc
@@ -21,10 +21,10 @@
 namespace tint {
 namespace sem {
 
-Vector::Vector(Type const* subtype, uint32_t size)
-    : subtype_(subtype), size_(size) {
-  TINT_ASSERT(Semantic, size_ > 1);
-  TINT_ASSERT(Semantic, size_ < 5);
+Vector::Vector(Type const* subtype, uint32_t width)
+    : subtype_(subtype), width_(width) {
+  TINT_ASSERT(Semantic, width_ > 1);
+  TINT_ASSERT(Semantic, width_ < 5);
 }
 
 Vector::Vector(Vector&&) = default;
@@ -32,12 +32,12 @@
 Vector::~Vector() = default;
 
 std::string Vector::type_name() const {
-  return "__vec_" + std::to_string(size_) + subtype_->type_name();
+  return "__vec_" + std::to_string(width_) + subtype_->type_name();
 }
 
 std::string Vector::FriendlyName(const SymbolTable& symbols) const {
   std::ostringstream out;
-  out << "vec" << size_ << "<" << subtype_->FriendlyName(symbols) << ">";
+  out << "vec" << width_ << "<" << subtype_->FriendlyName(symbols) << ">";
   return out.str();
 }
 
diff --git a/src/sem/vector_type.h b/src/sem/vector_type.h
index 79d8835..5697386 100644
--- a/src/sem/vector_type.h
+++ b/src/sem/vector_type.h
@@ -35,12 +35,13 @@
 
   /// @returns the type of the vector elements
   Type* type() const { return const_cast<Type*>(subtype_); }
-  /// @returns the size of the vector
-  uint32_t size() const { return size_; }
 
   /// @returns the name for th type
   std::string type_name() const override;
 
+  /// @returns the width of the vector
+  uint32_t Width() const { return width_; }
+
   /// @param symbols the program's symbol table
   /// @returns the name for this type that closely resembles how it would be
   /// declared in WGSL.
@@ -52,7 +53,7 @@
 
  private:
   Type const* const subtype_;
-  uint32_t const size_;
+  uint32_t const width_;
 };
 
 }  // namespace sem
diff --git a/src/sem/vector_type_test.cc b/src/sem/vector_type_test.cc
index 2b2c487..6059972 100644
--- a/src/sem/vector_type_test.cc
+++ b/src/sem/vector_type_test.cc
@@ -25,7 +25,7 @@
   I32 i32;
   Vector v{&i32, 2};
   EXPECT_EQ(v.type(), &i32);
-  EXPECT_EQ(v.size(), 2u);
+  EXPECT_EQ(v.Width(), 2u);
 }
 
 TEST_F(VectorTest, TypeName) {
diff --git a/src/transform/decompose_memory_access.cc b/src/transform/decompose_memory_access.cc
index 0e2b245..65bfec1 100644
--- a/src/transform/decompose_memory_access.cc
+++ b/src/transform/decompose_memory_access.cc
@@ -153,7 +153,7 @@
     return true;
   }
   if (auto* vec = ty->As<sem::Vector>()) {
-    switch (vec->size()) {
+    switch (vec->Width()) {
       case 2:
         if (vec->type()->Is<sem::I32>()) {
           out = DecomposeMemoryAccess::Intrinsic::DataType::kVec2I32;
diff --git a/src/transform/fold_constants.cc b/src/transform/fold_constants.cc
index 3c72d18..4868b3c 100644
--- a/src/transform/fold_constants.cc
+++ b/src/transform/fold_constants.cc
@@ -56,7 +56,7 @@
     }
 
     if (auto* vec = ty->As<sem::Vector>()) {
-      uint32_t vec_size = static_cast<uint32_t>(vec->size());
+      uint32_t vec_size = static_cast<uint32_t>(vec->Width());
 
       // We'd like to construct the new vector with the same number of
       // constructor args that the original node had, but after folding
diff --git a/src/transform/robustness.cc b/src/transform/robustness.cc
index 1e8b94e..185ff96 100644
--- a/src/transform/robustness.cc
+++ b/src/transform/robustness.cc
@@ -63,7 +63,7 @@
     Value size;              // size of the array, vector or matrix
     size.is_signed = false;  // size is always unsigned
     if (auto* vec = ret_type->As<sem::Vector>()) {
-      size.u32 = vec->size();
+      size.u32 = vec->Width();
 
     } else if (auto* arr = ret_type->As<sem::Array>()) {
       size.u32 = arr->Count();
diff --git a/src/transform/transform.cc b/src/transform/transform.cc
index f67c046..3b6f335 100644
--- a/src/transform/transform.cc
+++ b/src/transform/transform.cc
@@ -124,7 +124,7 @@
   }
   if (auto* v = ty->As<sem::Vector>()) {
     auto* el = CreateASTTypeFor(ctx, v->type());
-    return ctx.dst->create<ast::Vector>(el, v->size());
+    return ctx.dst->create<ast::Vector>(el, v->Width());
   }
   if (auto* a = ty->As<sem::Array>()) {
     auto* el = CreateASTTypeFor(ctx, a->ElemType());
diff --git a/src/transform/vertex_pulling.cc b/src/transform/vertex_pulling.cc
index 900b6a3..11e5fb8 100644
--- a/src/transform/vertex_pulling.cc
+++ b/src/transform/vertex_pulling.cc
@@ -148,7 +148,7 @@
     return {BaseType::kF32, 1};
   }
   if (auto* vec = ty->As<sem::Vector>()) {
-    return {DataTypeOf(vec->type()).base_type, vec->size()};
+    return {DataTypeOf(vec->type()).base_type, vec->Width()};
   }
   return {BaseType::kInvalid, 0};
 }
diff --git a/src/writer/append_vector.cc b/src/writer/append_vector.cc
index f8e1356..429d9b8 100644
--- a/src/writer/append_vector.cc
+++ b/src/writer/append_vector.cc
@@ -43,7 +43,7 @@
   auto* vector_sem = b->Sem().Get(vector);
   auto* vector_ty = vector_sem->Type()->UnwrapRef();
   if (auto* vec = vector_ty->As<sem::Vector>()) {
-    packed_size = vec->size() + 1;
+    packed_size = vec->Width() + 1;
     packed_el_sem_ty = vec->type();
   } else {
     packed_size = 2;
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index 1a0bc9a..e853aee 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -205,7 +205,7 @@
         {
           ScopedIndent si(&helpers_);
           auto out = line(&helpers_);
-          switch (vec->size()) {
+          switch (vec->Width()) {
             case 2:
               out << "vec = (idx.xx == int2(0, 1)) ? val.xx : vec;";
               break;
@@ -217,7 +217,7 @@
               break;
             default:
               TINT_UNREACHABLE(Writer, builder_.Diagnostics())
-                  << "invalid vector size " << vec->size();
+                  << "invalid vector size " << vec->Width();
               break;
           }
         }
@@ -1285,7 +1285,7 @@
 
         std::string width;
         if (auto* vec = significand_ty->As<sem::Vector>()) {
-          width = std::to_string(vec->size());
+          width = std::to_string(vec->Width());
         }
 
         // Exponent is an integer, which HLSL does not have an overload for.
@@ -1318,7 +1318,7 @@
 
         std::string width;
         if (auto* vec = input_ty->As<sem::Vector>()) {
-          width = std::to_string(vec->size());
+          width = std::to_string(vec->Width());
         }
 
         constexpr auto* kExponentMask = "0x7f80000";
@@ -1816,7 +1816,7 @@
     // number of components.
     uint32_t wgsl_ret_width = 1;
     if (auto* vec = intrinsic->ReturnType()->As<sem::Vector>()) {
-      wgsl_ret_width = vec->size();
+      wgsl_ret_width = vec->Width();
     }
     if (wgsl_ret_width < hlsl_ret_width) {
       out << ".";
@@ -2022,7 +2022,7 @@
   }
 
   if (is_single_value_vector_init) {
-    out << ")." << std::string(type->As<sem::Vector>()->size(), 'x');
+    out << ")." << std::string(type->As<sem::Vector>()->Width(), 'x');
   }
 
   out << (brackets ? "}" : ")");
@@ -2537,7 +2537,7 @@
       return false;
     }
     ScopedParen sp(out);
-    for (uint32_t i = 0; i < vec->size(); i++) {
+    for (uint32_t i = 0; i < vec->Width(); i++) {
       if (i != 0) {
         out << ", ";
       }
@@ -2970,7 +2970,7 @@
   } else if (type->Is<sem::U32>()) {
     out << "uint";
   } else if (auto* vec = type->As<sem::Vector>()) {
-    auto size = vec->size();
+    auto size = vec->Width();
     if (vec->type()->Is<sem::F32>() && size >= 1 && size <= 4) {
       out << "float" << size;
     } else if (vec->type()->Is<sem::I32>() && size >= 1 && size <= 4) {
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index c22b146..eee283b 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -2017,7 +2017,7 @@
     if (!EmitType(out, vec->type(), "")) {
       return false;
     }
-    out << vec->size();
+    out << vec->Width();
     return true;
   }
 
@@ -2062,7 +2062,7 @@
     if (!EmitType(out, vec->type(), "")) {
       return false;
     }
-    out << vec->size();
+    out << vec->Width();
     return true;
   }
 
@@ -2349,7 +2349,7 @@
   if (auto* vec = ty->As<sem::Vector>()) {
     // https://developer.apple.com/metal/Metal-Shading-Language-Specification.pdf
     // 2.2.3 Packed Vector Types
-    auto num_els = vec->size();
+    auto num_els = vec->Width();
     auto* el_ty = vec->type();
     if (el_ty->IsAnyOf<sem::U32, sem::I32, sem::F32>()) {
       return SizeAndAlign{num_els * 4, 4};
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index f8e8ead..d228564 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -1337,7 +1337,7 @@
       auto* value_type = TypeOf(values[0])->UnwrapRef();
       if (auto* val_vec = value_type->As<sem::Vector>()) {
         if (val_vec->type()->is_scalar()) {
-          can_cast_or_copy = res_vec->size() == val_vec->size();
+          can_cast_or_copy = res_vec->Width() == val_vec->Width();
         }
       }
     }
@@ -1413,7 +1413,7 @@
         return 0;
       }
 
-      for (uint32_t i = 0; i < vec->size(); ++i) {
+      for (uint32_t i = 0; i < vec->Width(); ++i) {
         auto extract = result_op();
         auto extract_id = extract.to_i();
 
@@ -1455,7 +1455,7 @@
   auto* const init_result_type = TypeOf(init)->UnwrapRef();
   if (values.size() == 1 && init_result_type->is_scalar_vector() &&
       TypeOf(values[0])->UnwrapRef()->is_scalar()) {
-    size_t vec_size = init_result_type->As<sem::Vector>()->size();
+    size_t vec_size = init_result_type->As<sem::Vector>()->Width();
     for (size_t i = 0; i < (vec_size - 1); ++i) {
       ops.push_back(ops[0]);
     }
@@ -1772,7 +1772,7 @@
     return 0;
   }
 
-  uint64_t key = (static_cast<uint64_t>(type->size()) << 32) + value_id;
+  uint64_t key = (static_cast<uint64_t>(type->Width()) << 32) + value_id;
   return utils::GetOrCreate(const_splat_to_id_, key, [&] {
     auto result = result_op();
     auto result_id = result.to_i();
@@ -1780,7 +1780,7 @@
     OperandList ops;
     ops.push_back(Operand::Int(type_id));
     ops.push_back(result);
-    for (uint32_t i = 0; i < type->size(); i++) {
+    for (uint32_t i = 0; i < type->Width(); i++) {
       ops.push_back(Operand::Int(value_id));
     }
     push_type(spv::Op::OpConstantComposite, ops);
@@ -1882,7 +1882,7 @@
   OperandList ops;
   ops.push_back(Operand::Int(GenerateTypeIfNeeded(vec_type)));
   ops.push_back(splat_result);
-  for (size_t i = 0; i < vec_type->As<sem::Vector>()->size(); ++i) {
+  for (size_t i = 0; i < vec_type->As<sem::Vector>()->Width(); ++i) {
     ops.push_back(Operand::Int(scalar_id));
   }
   if (!push_function_inst(spv::Op::OpCompositeConstruct, ops)) {
@@ -2467,12 +2467,12 @@
         // same size, and create vector constants by replicating the scalars.
         // I expect backend compilers to fold these into unique constants, so
         // there is no loss of efficiency.
-        sem::Vector uvec_ty(&u32, fvec_ty->size());
+        sem::Vector uvec_ty(&u32, fvec_ty->Width());
         unsigned_id = GenerateTypeIfNeeded(&uvec_ty);
         auto splat = [&](uint32_t scalar_id) -> uint32_t {
           auto splat_result = result_op();
           OperandList splat_params{Operand::Int(unsigned_id), splat_result};
-          for (size_t i = 0; i < fvec_ty->size(); i++) {
+          for (size_t i = 0; i < fvec_ty->Width(); i++) {
             splat_params.emplace_back(Operand::Int(scalar_id));
           }
           if (!push_function_inst(spv::Op::OpCompositeConstruct,
@@ -2531,7 +2531,7 @@
       if (result_vector_type &&
           intrinsic->Parameters()[2]->Type()->is_scalar()) {
         sem::Bool bool_type;
-        sem::Vector bool_vec_type(&bool_type, result_vector_type->size());
+        sem::Vector bool_vec_type(&bool_type, result_vector_type->Width());
         if (!GenerateTypeIfNeeded(&bool_vec_type)) {
           return 0;
         }
@@ -4015,7 +4015,7 @@
   }
 
   push_type(spv::Op::OpTypeVector,
-            {result, Operand::Int(type_id), Operand::Int(vec->size())});
+            {result, Operand::Int(type_id), Operand::Int(vec->Width())});
   return true;
 }
 
