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