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>
Reviewed-on: https://swiftshader-review.googlesource.com/8233
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 0a5aa66..95fe59c 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 812a748..f75fa8b 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();
}