Return newly-created value from SpirvRoutine::createIntermediate

All the callers needed to fetch this immediately afterward; save some
effort.

Bug: b/126475489
Change-Id: I622d30aa955c27df8e12fdf87762c0db96133666
Reviewed-on: https://swiftshader-review.googlesource.com/c/25648
Tested-by: Chris Forbes <chrisforbes@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Reviewed-by: Ben Clayton <bclayton@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/Pipeline/SpirvShader.cpp b/src/Pipeline/SpirvShader.cpp
index 78b6657..18d71b6 100644
--- a/src/Pipeline/SpirvShader.cpp
+++ b/src/Pipeline/SpirvShader.cpp
@@ -790,7 +790,6 @@
 				auto &objectTy = getType(object.type);
 				auto &pointer = getObject(pointerId);
 				auto &pointerTy = getType(pointer.type);
-				routine->createIntermediate(objectId, objectTy.sizeInComponents);
 				auto &pointerBase = getObject(pointer.pointerBase);
 				auto &pointerBaseTy = getType(pointerBase.type);
 
@@ -805,7 +804,7 @@
 				}
 
 				auto &ptrBase = routine->getValue(pointer.pointerBase);
-				auto &dst = routine->getIntermediate(objectId);
+				auto &dst = routine->createIntermediate(objectId, objectTy.sizeInComponents);
 
 				if (pointer.kind == Object::Kind::Value)
 				{
@@ -840,7 +839,6 @@
 				auto &object = getObject(objectId);
 				auto &type = getType(typeId);
 				auto &base = getObject(baseId);
-				routine->createIntermediate(objectId, type.sizeInComponents);
 				auto &pointerBase = getObject(object.pointerBase);
 				auto &pointerBaseTy = getType(pointerBase.type);
 				assert(type.sizeInComponents == 1);
@@ -852,7 +850,7 @@
 				{
 					UNIMPLEMENTED("Descriptor-backed OpAccessChain not yet implemented");
 				}
-				auto &dst = routine->getIntermediate(objectId);
+				auto &dst = routine->createIntermediate(objectId, type.sizeInComponents);
 				dst.emplace(0, As<Float4>(WalkAccessChain(baseId, insn.wordCount() - 4, insn.wordPointer(4), routine)));
 				break;
 			}
diff --git a/src/Pipeline/SpirvShader.hpp b/src/Pipeline/SpirvShader.hpp
index 3037654..22d75da 100644
--- a/src/Pipeline/SpirvShader.hpp
+++ b/src/Pipeline/SpirvShader.hpp
@@ -367,11 +367,12 @@
 			lvalues.emplace(id, Value(size));
 		}
 
-		void createIntermediate(SpirvShader::ObjectID id, uint32_t size)
+		Intermediate& createIntermediate(SpirvShader::ObjectID id, uint32_t size)
 		{
-			intermediates.emplace(std::piecewise_construct,
+			auto it = intermediates.emplace(std::piecewise_construct,
 					std::forward_as_tuple(id),
 					std::forward_as_tuple(size));
+			return it.first->second;
 		}
 
 		Value& getValue(SpirvShader::ObjectID id)