diff --git a/src/ast/binding_decoration_test.cc b/src/ast/binding_decoration_test.cc
index 4111653..54e6f74 100644
--- a/src/ast/binding_decoration_test.cc
+++ b/src/ast/binding_decoration_test.cc
@@ -35,7 +35,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(bd.IsSet());
+  EXPECT_FALSE(d->Is<SetDecoration>());
 }
 
 TEST_F(BindingDecorationTest, ToStr) {
diff --git a/src/ast/builtin_decoration_test.cc b/src/ast/builtin_decoration_test.cc
index 11e1b2d..3122651 100644
--- a/src/ast/builtin_decoration_test.cc
+++ b/src/ast/builtin_decoration_test.cc
@@ -35,7 +35,7 @@
   EXPECT_TRUE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(bd.IsSet());
+  EXPECT_FALSE(d->Is<SetDecoration>());
 }
 
 TEST_F(BuiltinDecorationTest, ToStr) {
diff --git a/src/ast/constant_id_decoration_test.cc b/src/ast/constant_id_decoration_test.cc
index ece2385..28f77ee 100644
--- a/src/ast/constant_id_decoration_test.cc
+++ b/src/ast/constant_id_decoration_test.cc
@@ -34,7 +34,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_TRUE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(cd.IsSet());
+  EXPECT_FALSE(d->Is<SetDecoration>());
 }
 
 TEST_F(ConstantIdDecorationTest, ToStr) {
diff --git a/src/ast/location_decoration_test.cc b/src/ast/location_decoration_test.cc
index f8ffff8..f402abe 100644
--- a/src/ast/location_decoration_test.cc
+++ b/src/ast/location_decoration_test.cc
@@ -37,7 +37,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_TRUE(d->Is<LocationDecoration>());
-  EXPECT_FALSE(ld.IsSet());
+  EXPECT_FALSE(d->Is<SetDecoration>());
 }
 
 TEST_F(LocationDecorationTest, ToStr) {
diff --git a/src/ast/set_decoration.cc b/src/ast/set_decoration.cc
index 4178e4d..4d6a776 100644
--- a/src/ast/set_decoration.cc
+++ b/src/ast/set_decoration.cc
@@ -22,10 +22,6 @@
 
 SetDecoration::~SetDecoration() = default;
 
-bool SetDecoration::IsSet() const {
-  return true;
-}
-
 void SetDecoration::to_str(std::ostream& out, size_t indent) const {
   make_indent(out, indent);
   out << "SetDecoration{" << value_ << "}" << std::endl;
diff --git a/src/ast/set_decoration.h b/src/ast/set_decoration.h
index 73469c4..9706f86 100644
--- a/src/ast/set_decoration.h
+++ b/src/ast/set_decoration.h
@@ -31,9 +31,6 @@
   SetDecoration(uint32_t value, const Source& source);
   ~SetDecoration() override;
 
-  /// @returns true if this is a set decoration
-  bool IsSet() const override;
-
   /// @returns the set value
   uint32_t value() const { return value_; }
 
diff --git a/src/ast/set_decoration_test.cc b/src/ast/set_decoration_test.cc
index d9b9e79..088f3f0 100644
--- a/src/ast/set_decoration_test.cc
+++ b/src/ast/set_decoration_test.cc
@@ -35,7 +35,7 @@
   EXPECT_FALSE(d->Is<BuiltinDecoration>());
   EXPECT_FALSE(d->Is<ConstantIdDecoration>());
   EXPECT_FALSE(d->Is<LocationDecoration>());
-  EXPECT_TRUE(sd.IsSet());
+  EXPECT_TRUE(d->Is<SetDecoration>());
 }
 
 TEST_F(SetDecorationTest, ToStr) {
diff --git a/src/ast/variable_decoration.cc b/src/ast/variable_decoration.cc
index 287300c..ea8d268 100644
--- a/src/ast/variable_decoration.cc
+++ b/src/ast/variable_decoration.cc
@@ -16,8 +16,6 @@
 
 #include <assert.h>
 
-#include "src/ast/set_decoration.h"
-
 namespace tint {
 namespace ast {
 
@@ -31,14 +29,5 @@
   return Kind;
 }
 
-bool VariableDecoration::IsSet() const {
-  return false;
-}
-
-SetDecoration* VariableDecoration::AsSet() {
-  assert(IsSet());
-  return static_cast<SetDecoration*>(this);
-}
-
 }  // namespace ast
 }  // namespace tint
diff --git a/src/ast/variable_decoration.h b/src/ast/variable_decoration.h
index 39206fb..72e18ad 100644
--- a/src/ast/variable_decoration.h
+++ b/src/ast/variable_decoration.h
@@ -25,8 +25,6 @@
 namespace tint {
 namespace ast {
 
-class SetDecoration;
-
 /// A decoration attached to a variable
 class VariableDecoration : public Castable<VariableDecoration, Decoration> {
  public:
@@ -38,12 +36,6 @@
   /// @return the decoration kind
   DecorationKind GetKind() const override;
 
-  /// @returns true if this is a set decoration
-  virtual bool IsSet() const;
-
-  /// @returns the decoration as a set decoration
-  SetDecoration* AsSet();
-
  protected:
   /// Constructor
   /// @param source the source of this decoration
diff --git a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
index 8e8ddc3..80a5d30 100644
--- a/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
+++ b/src/reader/wgsl/parser_impl_global_variable_decl_test.cc
@@ -105,7 +105,7 @@
   auto& decorations = v->decorations();
   ASSERT_EQ(decorations.size(), 2u);
   ASSERT_TRUE(decorations[0]->Is<ast::BindingDecoration>());
-  ASSERT_TRUE(decorations[1]->IsSet());
+  ASSERT_TRUE(decorations[1]->Is<ast::SetDecoration>());
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_WithDecoration_MulitpleGroups) {
@@ -139,7 +139,7 @@
   auto& decorations = v->decorations();
   ASSERT_EQ(decorations.size(), 2u);
   ASSERT_TRUE(decorations[0]->Is<ast::BindingDecoration>());
-  ASSERT_TRUE(decorations[1]->IsSet());
+  ASSERT_TRUE(decorations[1]->Is<ast::SetDecoration>());
 }
 
 TEST_F(ParserImplTest, GlobalVariableDecl_InvalidDecoration) {
diff --git a/src/reader/wgsl/parser_impl_variable_decoration_test.cc b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
index 60f1977..d6b9ac5 100644
--- a/src/reader/wgsl/parser_impl_variable_decoration_test.cc
+++ b/src/reader/wgsl/parser_impl_variable_decoration_test.cc
@@ -240,9 +240,9 @@
   auto* var_deco = deco.value->As<ast::VariableDecoration>();
   ASSERT_FALSE(p->has_error());
   ASSERT_NE(var_deco, nullptr);
-  ASSERT_TRUE(var_deco->IsSet());
+  ASSERT_TRUE(var_deco->Is<ast::SetDecoration>());
 
-  auto* set = var_deco->AsSet();
+  auto* set = var_deco->As<ast::SetDecoration>();
   EXPECT_EQ(set->value(), 4u);
 }
 
diff --git a/src/writer/spirv/builder.cc b/src/writer/spirv/builder.cc
index 5b800a4..0c1c1d5 100644
--- a/src/writer/spirv/builder.cc
+++ b/src/writer/spirv/builder.cc
@@ -792,11 +792,11 @@
         push_annot(spv::Op::OpDecorate,
                    {Operand::Int(var_id), Operand::Int(SpvDecorationBinding),
                     Operand::Int(binding->value())});
-      } else if (deco->IsSet()) {
+      } else if (auto* set = deco->As<ast::SetDecoration>()) {
         push_annot(
             spv::Op::OpDecorate,
             {Operand::Int(var_id), Operand::Int(SpvDecorationDescriptorSet),
-             Operand::Int(deco->AsSet()->value())});
+             Operand::Int(set->value())});
       } else if (deco->Is<ast::ConstantIdDecoration>()) {
         // Spec constants are handled elsewhere
       } else {
diff --git a/src/writer/wgsl/generator_impl.cc b/src/writer/wgsl/generator_impl.cc
index 95a227f..e713aa6 100644
--- a/src/writer/wgsl/generator_impl.cc
+++ b/src/writer/wgsl/generator_impl.cc
@@ -643,8 +643,8 @@
 
     if (auto* binding = deco->As<ast::BindingDecoration>()) {
       out_ << "binding(" << binding->value() << ")";
-    } else if (deco->IsSet()) {
-      out_ << "set(" << deco->AsSet()->value() << ")";
+    } else if (auto* set = deco->As<ast::SetDecoration>()) {
+      out_ << "set(" << set->value() << ")";
     } else if (auto* location = deco->As<ast::LocationDecoration>()) {
       out_ << "location(" << location->value() << ")";
     } else if (auto* builtin = deco->As<ast::BuiltinDecoration>()) {
