diff --git a/src/Pipeline/ComputeProgram.cpp b/src/Pipeline/ComputeProgram.cpp
index 293655a..fbaa2ac 100644
--- a/src/Pipeline/ComputeProgram.cpp
+++ b/src/Pipeline/ComputeProgram.cpp
@@ -167,8 +167,7 @@
 		if (it != shader->inputBuiltins.end())
 		{
 			const auto& builtin = it->second;
-			auto &value = routine.getValue(builtin.Id);
-			cb(builtin, value);
+			cb(builtin, routine.getVariable(builtin.Id));
 		}
 	}
 
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 9a91e16..7a06ec2 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -444,7 +444,7 @@
 				Object::ID resultId = insn.word(2);
 				auto &object = defs[resultId];
 				object.type = typeId;
-				object.kind = Object::Kind::Value;
+				object.kind = Object::Kind::Intermediate;
 				object.definition = insn;
 
 				if (insn.opcode() == spv::OpAccessChain || insn.opcode() == spv::OpInBoundsAccessChain)
@@ -829,7 +829,7 @@
 
 		// The <base> operand is an intermediate value itself, ie produced by a previous OpAccessChain.
 		// Start with its offset and build from there.
-		if (baseObject.kind == Object::Kind::Value)
+		if (baseObject.kind == Object::Kind::Intermediate)
 		{
 			dynamicOffset += routine->getIntermediate(id).Int(0);
 		}
@@ -905,7 +905,7 @@
 
 		// The <base> operand is an intermediate value itself, ie produced by a previous OpAccessChain.
 		// Start with its offset and build from there.
-		if (baseObject.kind == Object::Kind::Value)
+		if (baseObject.kind == Object::Kind::Intermediate)
 		{
 			dynamicOffset += routine->getIntermediate(id).Int(0);
 		}
@@ -1155,7 +1155,7 @@
 				if(pointeeType.sizeInComponents > 0)  // TODO: what to do about zero-slot objects?
 				{
 					Object::ID resultId = insn.word(2);
-					routine->createLvalue(resultId, pointeeType.sizeInComponents);
+					routine->createVariable(resultId, pointeeType.sizeInComponents);
 				}
 				break;
 			}
@@ -1705,7 +1705,7 @@
 		{
 			if (object.kind == Object::Kind::InterfaceVariable)
 			{
-				auto &dst = routine->getValue(resultId);
+				auto &dst = routine->getVariable(resultId);
 				int offset = 0;
 				VisitInterface(resultId,
 								[&](Decorations const &d, AttribType type) {
@@ -1792,7 +1792,7 @@
 		}
 		else
 		{
-			ptrBase = &routine->getValue(pointer.pointerBase)[0];
+			ptrBase = &routine->getVariable(pointer.pointerBase)[0];
 		}
 
 		bool interleavedByLane = IsStorageInterleavedByLane(pointerBaseTy.storageClass);
@@ -1800,10 +1800,10 @@
 
 		auto load = std::unique_ptr<SIMD::Float[]>(new SIMD::Float[resultTy.sizeInComponents]);
 
-		If(pointer.kind == Object::Kind::Value || anyInactiveLanes)
+		If(pointer.kind == Object::Kind::Intermediate || anyInactiveLanes)
 		{
 			// Divergent offsets or masked lanes.
-			auto offsets = pointer.kind == Object::Kind::Value ?
+			auto offsets = pointer.kind == Object::Kind::Intermediate ?
 					As<SIMD::Int>(routine->getIntermediate(pointerId).Int(0)) :
 					RValue<SIMD::Int>(SIMD::Int(0));
 			for (auto i = 0u; i < resultTy.sizeInComponents; i++)
@@ -1886,7 +1886,7 @@
 		}
 		else
 		{
-			ptrBase = &routine->getValue(pointer.pointerBase)[0];
+			ptrBase = &routine->getVariable(pointer.pointerBase)[0];
 		}
 
 		bool interleavedByLane = IsStorageInterleavedByLane(pointerBaseTy.storageClass);
@@ -1896,10 +1896,10 @@
 		{
 			// Constant source data.
 			auto src = reinterpret_cast<float *>(object.constantValue.get());
-			If(pointer.kind == Object::Kind::Value || anyInactiveLanes)
+			If(pointer.kind == Object::Kind::Intermediate || anyInactiveLanes)
 			{
 				// Divergent offsets or masked lanes.
-				auto offsets = pointer.kind == Object::Kind::Value ?
+				auto offsets = pointer.kind == Object::Kind::Intermediate ?
 						As<SIMD::Int>(routine->getIntermediate(pointerId).Int(0)) :
 						RValue<SIMD::Int>(SIMD::Int(0));
 				for (auto i = 0u; i < elementTy.sizeInComponents; i++)
@@ -1930,10 +1930,10 @@
 		{
 			// Intermediate source data.
 			auto &src = routine->getIntermediate(objectId);
-			If(pointer.kind == Object::Kind::Value || anyInactiveLanes)
+			If(pointer.kind == Object::Kind::Intermediate || anyInactiveLanes)
 			{
 				// Divergent offsets or masked lanes.
-				auto offsets = pointer.kind == Object::Kind::Value ?
+				auto offsets = pointer.kind == Object::Kind::Intermediate ?
 						As<SIMD::Int>(routine->getIntermediate(pointerId).Int(0)) :
 						RValue<SIMD::Int>(SIMD::Int(0));
 				for (auto i = 0u; i < elementTy.sizeInComponents; i++)
@@ -3103,7 +3103,7 @@
 				auto &objectTy = getType(object.type);
 				if (object.kind == Object::Kind::InterfaceVariable && objectTy.storageClass == spv::StorageClassOutput)
 				{
-					auto &dst = routine->getValue(resultId);
+					auto &dst = routine->getVariable(resultId);
 					int offset = 0;
 					VisitInterface(resultId,
 								   [&](Decorations const &d, AttribType type) {
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index f3602cd..0dda3d9 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -242,7 +242,7 @@
 				Variable,          // TODO: Document
 				InterfaceVariable, // TODO: Document
 				Constant,          // Values held by Object::constantValue
-				Value,             // Values held by SpirvRoutine::intermediates
+				Intermediate,      // Values held by SpirvRoutine::intermediates
 				PhysicalPointer,   // Pointer held by SpirvRoutine::physicalPointers
 			} kind = Kind::Unknown;
 		};
@@ -647,28 +647,28 @@
 	public:
 		SpirvRoutine(vk::PipelineLayout const *pipelineLayout);
 
-		using Value = Array<SIMD::Float>;
+		using Variable = Array<SIMD::Float>;
 
 		vk::PipelineLayout const * const pipelineLayout;
 
-		std::unordered_map<SpirvShader::Object::ID, Value> lvalues;
+		std::unordered_map<SpirvShader::Object::ID, Variable> variables;
 
 		std::unordered_map<SpirvShader::Object::ID, Intermediate> intermediates;
 
 		std::unordered_map<SpirvShader::Object::ID, Pointer<Byte> > physicalPointers;
 
-		Value inputs = Value{MAX_INTERFACE_COMPONENTS};
-		Value outputs = Value{MAX_INTERFACE_COMPONENTS};
+		Variable inputs = Variable{MAX_INTERFACE_COMPONENTS};
+		Variable outputs = Variable{MAX_INTERFACE_COMPONENTS};
 
 		Pointer<Pointer<Byte>> descriptorSets;
 		Pointer<Int> descriptorDynamicOffsets;
 		Pointer<Byte> pushConstants;
 		Int killMask = Int{0};
 
-		void createLvalue(SpirvShader::Object::ID id, uint32_t size)
+		void createVariable(SpirvShader::Object::ID id, uint32_t size)
 		{
-			bool added = lvalues.emplace(id, Value(size)).second;
-			ASSERT_MSG(added, "Value %d created twice", id.value());
+			bool added = variables.emplace(id, Variable(size)).second;
+			ASSERT_MSG(added, "Variable %d created twice", id.value());
 		}
 
 		Intermediate& createIntermediate(SpirvShader::Object::ID id, uint32_t size)
@@ -680,10 +680,10 @@
 			return it.first->second;
 		}
 
-		Value& getValue(SpirvShader::Object::ID id)
+		Variable& getVariable(SpirvShader::Object::ID id)
 		{
-			auto it = lvalues.find(id);
-			ASSERT_MSG(it != lvalues.end(), "Unknown value %d", id.value());
+			auto it = variables.find(id);
+			ASSERT_MSG(it != variables.end(), "Unknown variables %d", id.value());
 			return it->second;
 		}
 
@@ -715,7 +715,7 @@
 	public:
 		GenericValue(SpirvShader const *shader, SpirvRoutine const *routine, SpirvShader::Object::ID objId) :
 				obj(shader->getObject(objId)),
-				intermediate(obj.kind == SpirvShader::Object::Kind::Value ? &routine->getIntermediate(objId) : nullptr) {}
+				intermediate(obj.kind == SpirvShader::Object::Kind::Intermediate ? &routine->getIntermediate(objId) : nullptr) {}
 
 		RValue<SIMD::Float> Float(uint32_t i) const
 		{
diff --git a/src/Pipeline/VertexProgram.cpp b/src/Pipeline/VertexProgram.cpp
index a11c80b..f5ea229 100644
--- a/src/Pipeline/VertexProgram.cpp
+++ b/src/Pipeline/VertexProgram.cpp
@@ -42,7 +42,7 @@
 		{
 			// TODO: we could do better here; we know InstanceIndex is uniform across all lanes
 			assert(it->second.SizeInComponents == 1);
-			routine.getValue(it->second.Id)[it->second.FirstComponent] =
+			routine.getVariable(it->second.Id)[it->second.FirstComponent] =
 					As<Float4>(Int4((*Pointer<Int>(data + OFFSET(DrawData, instanceID)))));
 		}
 
@@ -65,7 +65,7 @@
 		if (it != spirvShader->inputBuiltins.end())
 		{
 			assert(it->second.SizeInComponents == 1);
-			routine.getValue(it->second.Id)[it->second.FirstComponent] =
+			routine.getVariable(it->second.Id)[it->second.FirstComponent] =
 					As<Float4>(Int4(index) + Int4(0, 1, 2, 3));
 		}
 
diff --git a/src/Pipeline/VertexRoutine.cpp b/src/Pipeline/VertexRoutine.cpp
index df2c813..396b319 100644
--- a/src/Pipeline/VertexRoutine.cpp
+++ b/src/Pipeline/VertexRoutine.cpp
@@ -109,7 +109,7 @@
 		auto it = spirvShader->outputBuiltins.find(spv::BuiltInPosition);
 		assert(it != spirvShader->outputBuiltins.end());
 		assert(it->second.SizeInComponents == 4);
-		auto &pos = routine.getValue(it->second.Id);
+		auto &pos = routine.getVariable(it->second.Id);
 		auto posX = pos[it->second.FirstComponent];
 		auto posY = pos[it->second.FirstComponent + 1];
 		auto posZ = pos[it->second.FirstComponent + 2];
@@ -525,7 +525,7 @@
 		auto it = spirvShader->outputBuiltins.find(spv::BuiltInPosition);
 		assert(it != spirvShader->outputBuiltins.end());
 		assert(it->second.SizeInComponents == 4);
-		auto &pos = routine.getValue(it->second.Id);
+		auto &pos = routine.getVariable(it->second.Id);
 		auto posX = pos[it->second.FirstComponent];
 		auto posY = pos[it->second.FirstComponent + 1];
 		auto posZ = pos[it->second.FirstComponent + 2];
@@ -564,7 +564,7 @@
 		if (it != spirvShader->outputBuiltins.end())
 		{
 			assert(it->second.SizeInComponents == 1);
-			auto psize = routine.getValue(it->second.Id)[it->second.FirstComponent];
+			auto psize = routine.getVariable(it->second.Id)[it->second.FirstComponent];
 			*Pointer<Float>(cacheLine + OFFSET(Vertex,builtins.pointSize) + sizeof(Vertex) * 0) = Extract(psize, 0);
 			*Pointer<Float>(cacheLine + OFFSET(Vertex,builtins.pointSize) + sizeof(Vertex) * 1) = Extract(psize, 1);
 			*Pointer<Float>(cacheLine + OFFSET(Vertex,builtins.pointSize) + sizeof(Vertex) * 2) = Extract(psize, 2);
