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