first stuff of randomif
This commit is contained in:
@@ -176,6 +176,29 @@ void CodeGenVisitor::visit(RandomForStatement* e) {
|
||||
}
|
||||
|
||||
void CodeGenVisitor::visit(RandomIfStatement* e) {
|
||||
value_ = 0;
|
||||
e->getProb()->accept(this);
|
||||
|
||||
llvm::Function* f = builder_->GetInsertBlock()->getParent();
|
||||
llvm::BasicBlock* thenBB = llvm::BasicBlock::Create(llvm::getGlobalContext(), "then", f);
|
||||
llvm::BasicBlock* elseBB = llvm::BasicBlock::Create(llvm::getGlobalContext(), "else");
|
||||
llvm::BasicBlock* mergeBB = llvm::BasicBlock::Create(llvm::getGlobalContext(), "merge");
|
||||
|
||||
builder_->CreateCondBr(value_, thenBB, elseBB);
|
||||
|
||||
// then
|
||||
builder_->SetInsertPoint(thenBB);#
|
||||
e->getStmt()->accept(this);
|
||||
|
||||
builder_->CreateBr(mergeBB);
|
||||
|
||||
f->getBasicBlockList().push_back(elseBB);
|
||||
builder_->SetInsertPoint(elseBB);
|
||||
|
||||
builder_->CreateBr(mergeBB);
|
||||
|
||||
f->getBasicBlockList().push_back(mergeBB);
|
||||
builder_->SetInsertPoint(mergeBB);
|
||||
}
|
||||
|
||||
void CodeGenVisitor::visit(ReturnStatement* e) {
|
||||
|
||||
Reference in New Issue
Block a user