19 #include <llvm/IR/BasicBlock.h>
20 #include <llvm/IR/IRBuilder.h>
21 #include <llvm/IR/Value.h>
24 #include "../../Shared/sqldefs.h"
25 #include "../CgenState.h"
26 #include "../IRCodegenUtils.h"
58 const std::function<
JoinLoopDomain(
const std::vector<llvm::Value*>&)>&,
59 const std::function<llvm::Value*(
const std::vector<llvm::Value*>&)>&,
60 const std::function<
void(llvm::Value*)>&,
61 const std::function<llvm::Value*(
const std::vector<llvm::Value*>& prev_iters,
63 const std::string&
name =
"");
65 static llvm::BasicBlock*
codegen(
66 const std::vector<JoinLoop>& join_loops,
67 const std::function<llvm::BasicBlock*(
const std::vector<llvm::Value*>&)>&
69 llvm::Value* outer_iter,
70 llvm::BasicBlock* exit_bb,
77 const std::vector<llvm::Value*>& iterators,
78 llvm::Value* iteration_counter,
79 llvm::Value* have_more_inner_rows,
80 llvm::Value* found_an_outer_match_ptr,
81 llvm::Value* current_condition_match_ptr,
89 const std::function<JoinLoopDomain(const std::vector<llvm::Value*>&)>
93 const std::function<llvm::Value*(const std::vector<llvm::Value*>&)>
102 const std::function<llvm::Value*(const std::vector<llvm::Value*>& prev_iters,
llvm::Value * element_count
llvm::Value * values_buffer
const std::function< llvm::Value *(const std::vector< llvm::Value * > &)> outer_condition_match_
const std::function< JoinLoopDomain(const std::vector< llvm::Value * > &)> iteration_domain_codegen_
const std::function< void(llvm::Value *)> found_outer_matches_
static 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)
llvm::Value * slot_lookup_result
llvm::Value * upper_bound
const std::function< llvm::Value *(const std::vector< llvm::Value * > &prev_iters, llvm::Value *)> is_deleted_
JoinLoop(const JoinLoopKind, const JoinType, const std::function< JoinLoopDomain(const std::vector< llvm::Value * > &)> &, const std::function< llvm::Value *(const std::vector< llvm::Value * > &)> &, const std::function< void(llvm::Value *)> &, const std::function< llvm::Value *(const std::vector< llvm::Value * > &prev_iters, llvm::Value *)> &, const std::string &name="")
static 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)