Reactor: Do not start the unreachable block with Unreachable
The LLVM Unreachable instruction is a terminator instruction.
It is illegal to place any instructions after this in the same block.
Bug: b/131914569
Change-Id: I6dd4ca4f8ca911dc94ba5674db598078060ef795
Reviewed-on: https://swiftshader-review.googlesource.com/c/SwiftShader/+/30453
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
Kokoro-Presubmit: kokoro <noreply+kokoro@google.com>
Tested-by: Ben Clayton <bclayton@google.com>
diff --git a/src/Reactor/Reactor.cpp b/src/Reactor/Reactor.cpp
index faaf679..f079f32 100644
--- a/src/Reactor/Reactor.cpp
+++ b/src/Reactor/Reactor.cpp
@@ -4196,15 +4196,15 @@
void Return()
{
Nucleus::createRetVoid();
+ // Place any unreachable instructions in an unreferenced block.
Nucleus::setInsertBlock(Nucleus::createBasicBlock());
- Nucleus::createUnreachable();
}
void Return(RValue<Int> ret)
{
Nucleus::createRet(ret.value);
+ // Place any unreachable instructions in an unreferenced block.
Nucleus::setInsertBlock(Nucleus::createBasicBlock());
- Nucleus::createUnreachable();
}
void branch(RValue<Bool> cmp, BasicBlock *bodyBB, BasicBlock *endBB)
diff --git a/src/Reactor/Reactor.hpp b/src/Reactor/Reactor.hpp
index 7f458d4..82fa23a 100644
--- a/src/Reactor/Reactor.hpp
+++ b/src/Reactor/Reactor.hpp
@@ -2973,8 +2973,8 @@
{
RR_DEBUG_INFO_UPDATE_LOC();
Nucleus::createRet(Nucleus::createLoad(ret.address, Pointer<T>::getType()));
+ // Place any unreachable instructions in an unreferenced block.
Nucleus::setInsertBlock(Nucleus::createBasicBlock());
- Nucleus::createUnreachable();
}
template<class T>
@@ -2982,8 +2982,8 @@
{
RR_DEBUG_INFO_UPDATE_LOC();
Nucleus::createRet(ret.value);
+ // Place any unreachable instructions in an unreferenced block.
Nucleus::setInsertBlock(Nucleus::createBasicBlock());
- Nucleus::createUnreachable();
}
template<typename Return, typename... Arguments>