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(); }