Implement switch constructs.
Bug swiftshader:6
Change-Id: Ifd28cab11e814dd09515ad8721f8d3d86123f19c
Reviewed-on: https://swiftshader-review.googlesource.com/7970
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-on: https://swiftshader-review.googlesource.com/8165
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/Reactor/LLVMReactor.cpp b/src/Reactor/LLVMReactor.cpp
index 199a0f3..66e330d 100644
--- a/src/Reactor/LLVMReactor.cpp
+++ b/src/Reactor/LLVMReactor.cpp
@@ -81,6 +81,7 @@
class Type : public llvm::Type {};
class Value : public llvm::Value {};
+ class SwitchCases : public llvm::SwitchInst {};
class BasicBlock : public llvm::BasicBlock {};
inline Type *T(llvm::Type *t)
@@ -661,14 +662,14 @@
return V(::builder->CreateSelect(C, ifTrue, ifFalse));
}
- Value *Nucleus::createSwitch(Value *v, BasicBlock *Dest, unsigned NumCases)
+ SwitchCases *Nucleus::createSwitch(Value *control, BasicBlock *defaultBranch, unsigned numCases)
{
- return V(::builder->CreateSwitch(v, Dest, NumCases));
+ return reinterpret_cast<SwitchCases*>(::builder->CreateSwitch(control, defaultBranch, numCases));
}
- void Nucleus::addSwitchCase(Value *Switch, int Case, BasicBlock *Branch)
+ void Nucleus::addSwitchCase(SwitchCases *switchCases, int label, BasicBlock *branch)
{
- reinterpret_cast<SwitchInst*>(Switch)->addCase(llvm::ConstantInt::get(Type::getInt32Ty(*::context), Case, true), Branch);
+ switchCases->addCase(llvm::ConstantInt::get(Type::getInt32Ty(*::context), label, true), branch);
}
void Nucleus::createUnreachable()