diff --git a/src/Core/Settings.h b/src/Core/Settings.h index 2aed174c088..e9379186c0e 100644 --- a/src/Core/Settings.h +++ b/src/Core/Settings.h @@ -104,7 +104,7 @@ class IColumn; \ M(Bool, allow_suspicious_low_cardinality_types, false, "In CREATE TABLE statement allows specifying LowCardinality modifier for types of small fixed size (8 or less). Enabling this may increase merge times and memory consumption.", 0) \ M(Bool, compile_expressions, true, "Compile some scalar functions and operators to native code.", 0) \ - M(UInt64, min_count_to_compile_expression, 3, "The number of identical expressions before they are JIT-compiled", 0) \ + M(UInt64, min_count_to_compile_expression, 0, "The number of identical expressions before they are JIT-compiled", 0) \ M(UInt64, group_by_two_level_threshold, 100000, "From what number of keys, a two-level aggregation starts. 0 - the threshold is not set.", 0) \ M(UInt64, group_by_two_level_threshold_bytes, 50000000, "From what size of the aggregation state in bytes, a two-level aggregation begins to be used. 0 - the threshold is not set. Two-level aggregation is used when at least one of the thresholds is triggered.", 0) \ M(Bool, distributed_aggregation_memory_efficient, true, "Is the memory-saving mode of distributed aggregation enabled.", 0) \ diff --git a/src/Interpreters/JIT/compileFunction.cpp b/src/Interpreters/JIT/compileFunction.cpp index 43f914c715a..1500a4049ec 100644 --- a/src/Interpreters/JIT/compileFunction.cpp +++ b/src/Interpreters/JIT/compileFunction.cpp @@ -75,8 +75,8 @@ static void compileFunction(llvm::Module & module, const IFunctionBase & functio auto * func = llvm::Function::Create(func_type, llvm::Function::ExternalLinkage, function.getName(), module); auto * args = func->args().begin(); - llvm::Value * counter_arg = &*args++; - llvm::Value * columns_arg = &*args++; + llvm::Value * rows_count_arg = args++; + llvm::Value * columns_arg = args++; /// Initialize ColumnDataPlaceholder llvm representation of ColumnData @@ -94,12 +94,14 @@ static void compileFunction(llvm::Module & module, const IFunctionBase & functio /// Initialize loop + auto * end = llvm::BasicBlock::Create(b.getContext(), "end", func); auto * loop = llvm::BasicBlock::Create(b.getContext(), "loop", func); - b.CreateBr(loop); + b.CreateCondBr(b.CreateICmpEQ(rows_count_arg, llvm::ConstantInt::get(size_type, 0)), end, loop); + b.SetInsertPoint(loop); - auto * counter_phi = b.CreatePHI(counter_arg->getType(), 2); - counter_phi->addIncoming(counter_arg, entry); + auto * counter_phi = b.CreatePHI(rows_count_arg->getType(), 2); + counter_phi->addIncoming(llvm::ConstantInt::get(size_type, 0), entry); for (auto & col : columns) { @@ -158,10 +160,11 @@ static void compileFunction(llvm::Module & module, const IFunctionBase & functio col.null->addIncoming(b.CreateConstInBoundsGEP1_32(nullptr, col.null, 1), cur_block); } - counter_phi->addIncoming(b.CreateSub(counter_phi, llvm::ConstantInt::get(size_type, 1)), cur_block); + auto * value = b.CreateAdd(counter_phi, llvm::ConstantInt::get(size_type, 1)); + counter_phi->addIncoming(value, cur_block); + + b.CreateCondBr(b.CreateICmpEQ(value, rows_count_arg), end, loop); - auto * end = llvm::BasicBlock::Create(b.getContext(), "end", func); - b.CreateCondBr(b.CreateICmpNE(counter_phi, llvm::ConstantInt::get(size_type, 1)), loop, end); b.SetInsertPoint(end); b.CreateRetVoid(); }