Implement Return() variants.

Bug swiftshader:6

Change-Id: I4a52eda6583a8731fd8e7a8bc15e716a772b8842
Reviewed-on: https://swiftshader-review.googlesource.com/7756
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-on: https://swiftshader-review.googlesource.com/8137
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index 6b0f406..c2d3fd9 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -503,12 +503,14 @@
 
 	void Nucleus::createRetVoid()
 	{
-		assert(false && "UNIMPLEMENTED");
+		Ice::InstRet *ret = Ice::InstRet::create(::function);
+		::basicBlock->appendInst(ret);
 	}
 
 	void Nucleus::createRet(Value *v)
 	{
-		assert(false && "UNIMPLEMENTED");
+		Ice::InstRet *ret = Ice::InstRet::create(::function, v);
+		::basicBlock->appendInst(ret);
 	}
 
 	void Nucleus::createBr(BasicBlock *dest)
@@ -1023,7 +1025,8 @@
 
 	void Nucleus::createUnreachable()
 	{
-		assert(false && "UNIMPLEMENTED");
+		Ice::InstUnreachable *unreachable = Ice::InstUnreachable::create(::function);
+		::basicBlock->appendInst(unreachable);
 	}
 
 	static Value *createSwizzle4(Value *val, unsigned char select)
@@ -6092,15 +6095,16 @@
 
 	void Return(bool ret)
 	{
-		Ice::Operand *Ret = Ice::ConstantInteger32::create(::context, Ice::IceType_i32, ret ? 1 : 0);
-		Ice::InstRet *retu = Ice::InstRet::create(::function, Ret);
-		::basicBlock->appendInst(retu);
+		Nucleus::createRet(Nucleus::createConstantInt(ret));
+		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
+		Nucleus::createUnreachable();
 	}
 
 	void Return(const Int &ret)
 	{
-		Ice::InstRet *retu = Ice::InstRet::create(::function, ret.loadValue());
-		::basicBlock->appendInst(retu);
+		Nucleus::createRet(ret.loadValue());
+		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
+		Nucleus::createUnreachable();
 	}
 
 	BasicBlock *beginLoop()