Support integer rvalues as return value.

Change-Id: I23e9b8de20dae93e7aa5ea7f5ff90abeba672b2b
Reviewed-on: https://swiftshader-review.googlesource.com/8091
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 6858cc2..62b97c5 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -6693,16 +6693,9 @@
 		Nucleus::createUnreachable();
 	}
 
-	void Return(bool ret)
+	void Return(RValue<Int> ret)
 	{
-		Nucleus::createRet(V(Nucleus::createConstantBool(ret)));
-		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
-		Nucleus::createUnreachable();
-	}
-
-	void Return(const Int &ret)
-	{
-		Nucleus::createRet(ret.loadValue());
+		Nucleus::createRet(ret.value);
 		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
 		Nucleus::createUnreachable();
 	}
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index 6303c03..04ca358 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -24,6 +24,7 @@
 
 namespace sw
 {
+	class Bool;
 	class Byte;
 	class SByte;
 	class Byte4;
@@ -119,20 +120,26 @@
 		struct type;
 	};
 
-	template<> struct
-	IntLiteral<Int>
+	template<>
+	struct IntLiteral<Bool>
+	{
+		typedef bool type;
+	};
+
+	template<>
+	struct IntLiteral<Int>
 	{
 		typedef int type;
 	};
 
-	template<> struct
-	IntLiteral<UInt>
+	template<>
+	struct IntLiteral<UInt>
 	{
 		typedef unsigned int type;
 	};
 
-	template<> struct
-	IntLiteral<Long>
+	template<>
+	struct IntLiteral<Long>
 	{
 		typedef int64_t type;
 	};
@@ -143,8 +150,8 @@
 		struct type;
 	};
 
-	template<> struct
-	FloatLiteral<Float>
+	template<>
+	struct FloatLiteral<Float>
 	{
 		typedef float type;
 	};
@@ -2224,8 +2231,7 @@
 	bool branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB);
 
 	void Return();
-	void Return(bool ret);
-	void Return(const Int &ret);
+	void Return(RValue<Int> ret);
 
 	template<class T>
 	void Return(const Pointer<T> &ret);
diff --git a/src/Reactor/SubzeroReactor.cpp b/src/Reactor/SubzeroReactor.cpp
index eab0bf7..154967b 100644
--- a/src/Reactor/SubzeroReactor.cpp
+++ b/src/Reactor/SubzeroReactor.cpp
@@ -6507,16 +6507,9 @@
 		Nucleus::createUnreachable();
 	}
 
-	void Return(bool ret)
+	void Return(RValue<Int> ret)
 	{
-		Nucleus::createRet(Nucleus::createConstantInt(ret));
-		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
-		Nucleus::createUnreachable();
-	}
-
-	void Return(const Int &ret)
-	{
-		Nucleus::createRet(ret.loadValue());
+		Nucleus::createRet(ret.value);
 		Nucleus::setInsertBlock(Nucleus::createBasicBlock());
 		Nucleus::createUnreachable();
 	}