diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 7204c37..7bd236f 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -28,12 +28,13 @@
 }
 
 TEST_F(BindingDecorationTest, Is) {
-  BindingDecoration d{2, Source{}};
-  EXPECT_TRUE(d.Is<BindingDecoration>());
-  EXPECT_FALSE(d.IsBuiltin());
-  EXPECT_FALSE(d.IsConstantId());
-  EXPECT_FALSE(d.IsLocation());
-  EXPECT_FALSE(d.IsSet());
+  BindingDecoration bd{2, Source{}};
+  Decoration* d = &bd;
+  EXPECT_TRUE(d->Is<BindingDecoration>());
+  EXPECT_FALSE(d->Is<BuiltinDecoration>());
+  EXPECT_FALSE(bd.IsConstantId());
+  EXPECT_FALSE(bd.IsLocation());
+  EXPECT_FALSE(bd.IsSet());
 }
 
 TEST_F(BindingDecorationTest, ToStr) {
diff --git a/src/ast/builtin_decoration.cc b/src/ast/builtin_decoration.cc
index 34d48f5..856fc9a 100644
--- a/src/ast/builtin_decoration.cc
+++ b/src/ast/builtin_decoration.cc
@@ -22,10 +22,6 @@
 
 BuiltinDecoration::~BuiltinDecoration() = default;
 
-bool BuiltinDecoration::IsBuiltin() const {
-  return true;
-}
-
 void BuiltinDecoration::to_str(std::ostream& out, size_t indent) const {
   make_indent(out, indent);
   out << "BuiltinDecoration{" << builtin_ << "}" << std::endl;
diff --git a/src/ast/builtin_decoration.h b/src/ast/builtin_decoration.h
index 251a409..9f4636d 100644
--- a/src/ast/builtin_decoration.h
+++ b/src/ast/builtin_decoration.h
@@ -31,9 +31,6 @@
   BuiltinDecoration(Builtin builtin, const Source& source);
   ~BuiltinDecoration() override;
 
-  /// @returns true if this is a builtin decoration
-  bool IsBuiltin() const override;
-
   /// @returns the builtin value
   Builtin value() const { return builtin_; }
 
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc
index 438552b..d3e3702 100644
--- a/src/ast/builtin_decoration_test.cc
+++ b/src/ast/builtin_decoration_test.cc
@@ -31,7 +31,7 @@
   BuiltinDecoration bd{Builtin::kFragDepth, Source{}};
   Decoration* d = &bd;
   EXPECT_FALSE(d->Is<BindingDecoration>());
-  EXPECT_TRUE(bd.IsBuiltin());
+  EXPECT_TRUE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(bd.IsConstantId());
   EXPECT_FALSE(bd.IsLocation());
   EXPECT_FALSE(bd.IsSet());
diff --git a/src/ast/constant_id_decoration_test.cc b/src/ast/constant_id_decoration_test.cc
index f2b7c60..6df2495 100644
--- a/src/ast/constant_id_decoration_test.cc
+++ b/src/ast/constant_id_decoration_test.cc
@@ -31,7 +31,7 @@
   ConstantIdDecoration cd{27, Source{}};
   Decoration* d = &cd;
   EXPECT_FALSE(d->Is<BindingDecoration>());
-  EXPECT_FALSE(cd.IsBuiltin());
+  EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_TRUE(cd.IsConstantId());
   EXPECT_FALSE(cd.IsLocation());
   EXPECT_FALSE(cd.IsSet());
diff --git a/src/ast/decorated_variable.cc b/src/ast/decorated_variable.cc
index 9b30e57..dcf6da3 100644
--- a/src/ast/decorated_variable.cc
+++ b/src/ast/decorated_variable.cc
@@ -16,6 +16,7 @@
 
 #include <cassert>
 
+#include "src/ast/builtin_decoration.h"
 #include "src/ast/constant_id_decoration.h"
 
 namespace tint {
@@ -41,7 +42,7 @@
 
 bool DecoratedVariable::HasBuiltinDecoration() const {
   for (auto* deco : decorations_) {
-    if (deco->IsBuiltin()) {
+    if (deco->Is<BuiltinDecoration>()) {
       return true;
     }
   }
diff --git a/src/ast/function.cc b/src/ast/function.cc
index f13a898..555230b 100644
--- a/src/ast/function.cc
+++ b/src/ast/function.cc
@@ -163,8 +163,8 @@
       continue;
     }
     for (auto* deco : var->AsDecorated()->decorations()) {
-      if (deco->IsBuiltin()) {
-        ret.push_back({var, deco->AsBuiltin()});
+      if (auto* builtin = deco->As<BuiltinDecoration>()) {
+        ret.push_back({var, builtin});
         break;
       }
     }
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index d794925..e2c1b7c 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -33,7 +33,7 @@
   LocationDecoration ld{2, Source{}};
   Decoration* d = &ld;
   EXPECT_FALSE(d->Is<BindingDecoration>());
-  EXPECT_FALSE(ld.IsBuiltin());
+  EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(ld.IsConstantId());
   EXPECT_TRUE(ld.IsLocation());
   EXPECT_FALSE(ld.IsSet());
diff --git a/src/ast/set_decoration_test.cc b/src/ast/set_decoration_test.cc
index e457573..df5afa1 100644
--- a/src/ast/set_decoration_test.cc
+++ b/src/ast/set_decoration_test.cc
@@ -31,7 +31,7 @@
   SetDecoration sd{2, Source{}};
   Decoration* d = &sd;
   EXPECT_FALSE(d->Is<BindingDecoration>());
-  EXPECT_FALSE(sd.IsBuiltin());
+  EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(sd.IsConstantId());
   EXPECT_FALSE(sd.IsLocation());
   EXPECT_TRUE(sd.IsSet());
diff --git a/src/ast/variable_decoration.cc b/src/ast/variable_decoration.cc
index 5e902f1..3dfb875 100644
--- a/src/ast/variable_decoration.cc
+++ b/src/ast/variable_decoration.cc
@@ -35,10 +35,6 @@
   return Kind;
 }
 
-bool VariableDecoration::IsBuiltin() const {
-  return false;
-}
-
 bool VariableDecoration::IsLocation() const {
   return false;
 }
@@ -51,11 +47,6 @@
   return false;
 }
 
-BuiltinDecoration* VariableDecoration::AsBuiltin() {
-  assert(IsBuiltin());
-  return static_cast<BuiltinDecoration*>(this);
-}
-
 ConstantIdDecoration* VariableDecoration::AsConstantId() {
   assert(IsConstantId());
   return static_cast<ConstantIdDecoration*>(this);
diff --git a/src/ast/variable_decoration.h b/src/ast/variable_decoration.h
index a6b4f9b..c83d22b 100644
--- a/src/ast/variable_decoration.h
+++ b/src/ast/variable_decoration.h
@@ -25,7 +25,6 @@
 namespace tint {
 namespace ast {
 
-class BuiltinDecoration;
 class ConstantIdDecoration;
 class LocationDecoration;
 class SetDecoration;
@@ -41,8 +40,6 @@
   /// @return the decoration kind
   DecorationKind GetKind() const override;
 
-  /// @returns true if this is a builtin decoration
-  virtual bool IsBuiltin() const;
   /// @returns true if this is a constant id decoration
   virtual bool IsConstantId() const;
   /// @returns true if this is a location decoration
@@ -50,8 +47,6 @@
   /// @returns true if this is a set decoration
   virtual bool IsSet() const;
 
-  /// @returns the decoration as a builtin decoration
-  BuiltinDecoration* AsBuiltin();
   /// @returns the decoration as a constant id decoration
   ConstantIdDecoration* AsConstantId();
   /// @returns the decoration as a location decoration
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
index 81f5356..50b5e29 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_list_test.cc
@@ -38,8 +38,9 @@
 
   ASSERT_TRUE(deco_0->IsLocation());
   EXPECT_EQ(deco_0->AsLocation()->value(), 4u);
-  ASSERT_TRUE(deco_1->IsBuiltin());
-  EXPECT_EQ(deco_1->AsBuiltin()->value(), ast::Builtin::kPosition);
+  ASSERT_TRUE(deco_1->Is<ast::BuiltinDecoration>());
+  EXPECT_EQ(deco_1->As<ast::BuiltinDecoration>()->value(),
+            ast::Builtin::kPosition);
 }
 
 TEST_F(ParserImplTest, VariableDecorationList_Empty) {
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index 33ba645..3c9cdcb 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -104,9 +104,9 @@
   auto* var_deco = deco.value->As<ast::VariableDecoration>();
   ASSERT_FALSE(p->has_error()) << p->error();
   ASSERT_NE(var_deco, nullptr);
-  ASSERT_TRUE(var_deco->IsBuiltin());
+  ASSERT_TRUE(var_deco->Is<ast::BuiltinDecoration>());
 
-  auto* builtin = var_deco->AsBuiltin();
+  auto* builtin = var_deco->As<ast::BuiltinDecoration>();
   EXPECT_EQ(builtin->value(), params.result);
 }
 INSTANTIATE_TEST_SUITE_P(
diff --git a/src/transform/vertex_pulling_transform.cc b/src/transform/vertex_pulling_transform.cc
index 4d7a6e3..05a6ab0 100644
--- a/src/transform/vertex_pulling_transform.cc
+++ b/src/transform/vertex_pulling_transform.cc
@@ -127,8 +127,9 @@
     }
 
     for (auto* d : v->AsDecorated()->decorations()) {
-      if (d->IsBuiltin() &&
-          d->AsBuiltin()->value() == ast::Builtin::kVertexIdx) {
+      if (d->Is<ast::BuiltinDecoration>() &&
+          d->As<ast::BuiltinDecoration>()->value() ==
+              ast::Builtin::kVertexIdx) {
         vertex_index_name_ = v->name();
         return;
       }
@@ -169,8 +170,9 @@
     }
 
     for (auto* d : v->AsDecorated()->decorations()) {
-      if (d->IsBuiltin() &&
-          d->AsBuiltin()->value() == ast::Builtin::kInstanceIdx) {
+      if (d->Is<ast::BuiltinDecoration>() &&
+          d->As<ast::BuiltinDecoration>()->value() ==
+              ast::Builtin::kInstanceIdx) {
         instance_index_name_ = v->name();
         return;
       }
diff --git a/src/writer/hlsl/generator_impl.cc b/src/writer/hlsl/generator_impl.cc
index b9f16d7..a8d14d4 100644
--- a/src/writer/hlsl/generator_impl.cc
+++ b/src/writer/hlsl/generator_impl.cc
@@ -1383,8 +1383,9 @@
           return false;
         }
         out << "TEXCOORD" << deco->AsLocation()->value();
-      } else if (deco->IsBuiltin()) {
-        auto attr = builtin_to_attribute(deco->AsBuiltin()->value());
+      } else if (deco->Is<ast::BuiltinDecoration>()) {
+        auto attr =
+            builtin_to_attribute(deco->As<ast::BuiltinDecoration>()->value());
         if (attr.empty()) {
           error_ = "unsupported builtin";
           return false;
@@ -1433,8 +1434,9 @@
           error_ = "invalid location variable for pipeline stage";
           return false;
         }
-      } else if (deco->IsBuiltin()) {
-        auto attr = builtin_to_attribute(deco->AsBuiltin()->value());
+      } else if (deco->Is<ast::BuiltinDecoration>()) {
+        auto attr =
+            builtin_to_attribute(deco->As<ast::BuiltinDecoration>()->value());
         if (attr.empty()) {
           error_ = "unsupported builtin";
           return false;
diff --git a/src/writer/msl/generator_impl.cc b/src/writer/msl/generator_impl.cc
index 0bd9116..d38c9d9 100644
--- a/src/writer/msl/generator_impl.cc
+++ b/src/writer/msl/generator_impl.cc
@@ -1070,8 +1070,9 @@
           error_ = "invalid location variable for pipeline stage";
           return false;
         }
-      } else if (deco->IsBuiltin()) {
-        auto attr = builtin_to_attribute(deco->AsBuiltin()->value());
+      } else if (deco->Is<ast::BuiltinDecoration>()) {
+        auto attr =
+            builtin_to_attribute(deco->As<ast::BuiltinDecoration>()->value());
         if (attr.empty()) {
           error_ = "unsupported builtin";
           return false;
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index a4a4840..c712310 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -779,10 +779,10 @@
 
   if (var->IsDecorated()) {
     for (auto* deco : var->AsDecorated()->decorations()) {
-      if (deco->IsBuiltin()) {
+      if (auto* builtin = deco->As<ast::BuiltinDecoration>()) {
         push_annot(spv::Op::OpDecorate,
                    {Operand::Int(var_id), Operand::Int(SpvDecorationBuiltIn),
-                    Operand::Int(ConvertBuiltin(deco->AsBuiltin()->value()))});
+                    Operand::Int(ConvertBuiltin(builtin->value()))});
       } else if (deco->IsLocation()) {
         push_annot(spv::Op::OpDecorate,
                    {Operand::Int(var_id), Operand::Int(SpvDecorationLocation),
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index e2dda1c..b0d3fa5 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -647,8 +647,8 @@
       out_ << "set(" << deco->AsSet()->value() << ")";
     } else if (deco->IsLocation()) {
       out_ << "location(" << deco->AsLocation()->value() << ")";
-    } else if (deco->IsBuiltin()) {
-      out_ << "builtin(" << deco->AsBuiltin()->value() << ")";
+    } else if (auto* builtin = deco->As<ast::BuiltinDecoration>()) {
+      out_ << "builtin(" << builtin->value() << ")";
     } else if (deco->IsConstantId()) {
       out_ << "constant_id(" << deco->AsConstantId()->value() << ")";
     } else {
