diff --git a/src/tint/ir/value.cc b/src/tint/ir/value.cc
index bd45a98..e7a69e3 100644
--- a/src/tint/ir/value.cc
+++ b/src/tint/ir/value.cc
@@ -30,8 +30,6 @@
 
 Value::Value(bool b) : kind_(Kind::kBool), data_(b) {}
 
-Value::Value(Symbol s, Id id) : kind_(Kind::kVar), data_(VarData{s, id}) {}
-
 Value::~Value() = default;
 
 Value::Value(const Value& o) = default;
@@ -59,10 +57,6 @@
         case Value::Kind::kU32:
             out << std::to_string(r.AsU32().value);
             break;
-            // TODO(dsinclair): Emit the symbol instead of v
-        case Value::Kind::kVar:
-            out << "%v" << std::to_string(r.AsVarData().id);
-            break;
         case Value::Kind::kBool:
             out << (r.AsBool() ? "true" : "false");
             break;
diff --git a/src/tint/ir/value.h b/src/tint/ir/value.h
index 7c9f8b5..2a28ca6 100644
--- a/src/tint/ir/value.h
+++ b/src/tint/ir/value.h
@@ -19,7 +19,6 @@
 #include <variant>
 
 #include "src/tint/number.h"
-#include "src/tint/symbol.h"
 
 namespace tint::ir {
 
@@ -45,24 +44,10 @@
         kI32,
         /// A u32 value
         kU32,
-        /// A variable value
-        kVar,
         /// A boolean value
         kBool,
     };
 
-    /// Stores data for a given variable. There will be multiple `VarData` entries for a given `id`.
-    /// The `id` acts like a generation number (although they aren't sequential, they are
-    /// increasing). As the variable is stored too a new value will be created and the the `id`
-    /// will be incremented.
-    struct VarData {
-        /// The symbol for the variable
-        Symbol sym;
-        /// The id for the variable.
-        Id id;
-        // TODO(dsinclair): Should var type data be stored here along side the variable info?
-    };
-
     /// Constructor
     /// Creates a uninitialized value
     Value();
@@ -72,11 +57,6 @@
     explicit Value(Id id);
 
     /// Constructor
-    /// @param s the symbol for the value
-    /// @param id the id for the value
-    Value(Symbol s, Id id);
-
-    /// Constructor
     /// @param b the `bool` value to store in the value
     explicit Value(bool b);
 
@@ -125,8 +105,6 @@
     bool IsI32() const { return kind_ == Kind::kI32; }
     /// @returns true if this is a u32 value
     bool IsU32() const { return kind_ == Kind::kU32; }
-    /// @returns true if this is a var value
-    bool IsVar() const { return kind_ == Kind::kVar; }
     /// @returns true if this is a bool value
     bool IsBool() const { return kind_ == Kind::kBool; }
 
@@ -148,9 +126,6 @@
     /// @returns the value data as an `Id`.
     /// @note, must only be called if `IsTemp()` is true
     Id AsId() const { return std::get<Id>(data_); }
-    /// @returns the value data as a `VarData` structure.
-    /// @note, must only be called if `IsVar()` is true
-    VarData AsVarData() const { return std::get<VarData>(data_); }
     /// @returns the value data as a `bool`.
     /// @note, must only be called if `IsBool()` is true
     bool AsBool() const { return std::get<bool>(data_); }
@@ -159,7 +134,7 @@
     /// The type of data stored in this value
     Kind kind_;
     /// The data stored in the value
-    std::variant<Id, f32, f16, u32, i32, VarData, bool> data_;
+    std::variant<Id, f32, f16, u32, i32, bool> data_;
 };
 
 std::ostream& operator<<(std::ostream& out, const Value& r);
diff --git a/src/tint/ir/value_test.cc b/src/tint/ir/value_test.cc
index 77ee3e4..8954560 100644
--- a/src/tint/ir/value_test.cc
+++ b/src/tint/ir/value_test.cc
@@ -38,7 +38,6 @@
     EXPECT_FALSE(val.IsI32());
     EXPECT_FALSE(val.IsU32());
     EXPECT_FALSE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_FALSE(val.IsBool());
 }
 
@@ -56,7 +55,6 @@
     EXPECT_FALSE(val.IsI32());
     EXPECT_FALSE(val.IsU32());
     EXPECT_FALSE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_FALSE(val.IsBool());
 }
 
@@ -74,7 +72,6 @@
     EXPECT_TRUE(val.IsI32());
     EXPECT_FALSE(val.IsU32());
     EXPECT_FALSE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_FALSE(val.IsBool());
 }
 
@@ -92,7 +89,6 @@
     EXPECT_FALSE(val.IsI32());
     EXPECT_TRUE(val.IsU32());
     EXPECT_FALSE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_FALSE(val.IsBool());
 }
 
@@ -110,7 +106,6 @@
     EXPECT_FALSE(val.IsI32());
     EXPECT_FALSE(val.IsU32());
     EXPECT_TRUE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_FALSE(val.IsBool());
 }
 
@@ -135,38 +130,9 @@
     EXPECT_FALSE(val.IsI32());
     EXPECT_FALSE(val.IsU32());
     EXPECT_FALSE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_TRUE(val.IsBool());
 }
 
-TEST_F(IR_ValueTest, var) {
-    std::stringstream str;
-
-    Symbol s;
-    Value val(s, 2);
-    EXPECT_EQ(2u, val.AsVarData().id);
-    EXPECT_EQ(s, val.AsVarData().sym);
-
-    str << val;
-    EXPECT_EQ("%v2", str.str());
-    str.str("");
-
-    val = Value(s, 4);
-    EXPECT_EQ(4u, val.AsVarData().id);
-    EXPECT_EQ(s, val.AsVarData().sym);
-
-    str << val;
-    EXPECT_EQ("%v4", str.str());
-
-    EXPECT_FALSE(val.IsF32());
-    EXPECT_FALSE(val.IsF16());
-    EXPECT_FALSE(val.IsI32());
-    EXPECT_FALSE(val.IsU32());
-    EXPECT_FALSE(val.IsTemp());
-    EXPECT_TRUE(val.IsVar());
-    EXPECT_FALSE(val.IsBool());
-}
-
 TEST_F(IR_ValueTest, uninitialized) {
     Value val;
 
@@ -175,7 +141,6 @@
     EXPECT_FALSE(val.IsI32());
     EXPECT_FALSE(val.IsU32());
     EXPECT_FALSE(val.IsTemp());
-    EXPECT_FALSE(val.IsVar());
     EXPECT_FALSE(val.IsBool());
 }
 
