Class JoinLoop

class JoinLoop

Public Types

using HoistedFiltersCallback = std::function<llvm::BasicBlock *(llvm::BasicBlock *, llvm::BasicBlock *, const std::string&, llvm::Function *, CgenState *)>

Public Functions

JoinLoop(const JoinLoopKind, const JoinType, const std::function<JoinLoopDomain(const std::vector<llvm::Value *>&)> &iteration_domain_codegen, const std::function<llvm::Value *(const std::vector<llvm::Value *>&)> &outer_condition_match, const std::function<void(llvm::Value *)> &found_outer_matches, const HoistedFiltersCallback &hoisted_filters, const std::function<llvm::Value *(const std::vector<llvm::Value *> &prev_iters, llvm::Value *)> &is_deleted, const std::string &name = "", )
JoinLoopKind kind() const

Public Static Functions

llvm::BasicBlock *codegen(const std::vector<JoinLoop> &join_loops, const std::function<llvm::BasicBlock *(const std::vector<llvm::Value *>&)> &body_codegen, llvm::Value *outer_iter, llvm::BasicBlock *exit_bb, CgenState *cgen_state, )

Private Members

const JoinLoopKind kind_
const JoinType type_
const std::function<JoinLoopDomain(const std::vector<llvm::Value *>&)> iteration_domain_codegen_
const std::function<llvm::Value *(const std::vector<llvm::Value *>&)> outer_condition_match_
const std::function<void(llvm::Value *)> found_outer_matches_
const HoistedFiltersCallback hoisted_filters_
const std::function<llvm::Value *(const std::vector<llvm::Value *> &prev_iters, llvm::Value *)> is_deleted_
const std::string name_

Private Static Functions

std::pair<llvm::BasicBlock *, llvm::Value *> evaluateOuterJoinCondition(const JoinLoop &join_loop, const JoinLoopDomain &iteration_domain, const std::vector<llvm::Value *> &iterators, llvm::Value *iteration_counter, llvm::Value *have_more_inner_rows, llvm::Value *found_an_outer_match_ptr, llvm::Value *current_condition_match_ptr, CgenState *cgen_state)