25 std::vector<const Analyzer::Constant*> constants(
34 return type_info.get_notnull() ? std::vector<llvm::Value*>{llvm::ConstantInt::get(
37 : std::vector<llvm::Value*>{llvm::ConstantInt::get(
66 llvm::Constant::getNullValue(
74 ->getStringDictionaryProxy(
75 dict_id,
executor()->getRowSetMemoryOwner(),
true)
76 ->getIdOfString(str_const))};
119 const int16_t lit_off) {
143 lit_buff_query_func_lv, off_lv);
144 auto var_length = len_lv;
146 var_start->setName(literal_name +
"_start");
147 var_start_address->setName(literal_name +
"_start_address");
148 var_length->setName(literal_name +
"_length");
150 return {var_start, var_start_address, var_length};
174 lit_buff_query_func_lv, off_lv);
175 auto var_length = len_lv;
177 var_start_address->setName(literal_name +
"_start_address");
178 var_length->setName(literal_name +
"_length");
180 return {var_start_address, var_length};
188 val_ptr_type = llvm::PointerType::get(
200 llvm::Value* to_return_lv = lit_lv;
203 if (static_cast<llvm::IntegerType*>(lit_lv->getType())->getBitWidth() > 1) {
205 llvm::ICmpInst::ICMP_SGT, lit_lv, llvm::ConstantInt::get(lit_lv->getType(), 0));
209 to_return_lv->setName(literal_name);
210 return {to_return_lv};
216 const int16_t lit_off,
217 const std::vector<llvm::Value*>& literal_loads) {
223 llvm::Value* var_start = literal_loads[0];
224 llvm::Value* var_start_address = literal_loads[1];
225 llvm::Value* var_length = literal_loads[2];
227 llvm::PointerType* placeholder0_type =
228 llvm::PointerType::get(var_start->getType(), 0);
231 "__placeholder__" + literal_name +
"_start");
232 llvm::PointerType* placeholder1_type =
233 llvm::PointerType::get(var_start_address->getType(), 0);
236 "__placeholder__" + literal_name +
"_start_address");
237 llvm::PointerType* placeholder2_type =
238 llvm::PointerType::get(var_length->getType(), 0);
241 "__placeholder__" + literal_name +
"_length");
247 return {placeholder0, placeholder1, placeholder2};
254 llvm::Value* var_start_address = literal_loads[0];
255 llvm::Value* var_length = literal_loads[1];
257 llvm::PointerType* placeholder0_type =
258 llvm::PointerType::get(var_start_address->getType(), 0);
261 "__placeholder__" + literal_name +
"_start_address");
262 llvm::PointerType* placeholder1_type =
263 llvm::PointerType::get(var_length->getType(), 0);
266 "__placeholder__" + literal_name +
"_length");
271 return {placeholder0, placeholder1};
275 llvm::Value* to_return_lv = literal_loads[0];
280 "__placeholder__" + literal_name);
284 return {placeholder0};
288 const std::vector<const Analyzer::Constant*>& constants,
291 CHECK(!constants.empty());
293 const auto& type_info = constants.front()->get_type_info();
295 for (
size_t device_id = 0; device_id < constants.size(); ++device_id) {
296 const auto constant = constants[device_id];
298 CHECK(type_info == crt_type_info);
299 const int16_t dev_lit_off =
304 lit_off = dev_lit_off;
309 std::vector<llvm::Value*> hoisted_literal_loads;
313 hoisted_literal_loads =
317 hoisted_literal_loads = entry->second;
321 type_info, enc_type, lit_off, hoisted_literal_loads);
322 return literal_placeholders;
HOST DEVICE EncodingType get_compression() const
llvm::Value * addStringConstant(const std::string &str)
llvm::Function * query_func_
const bool hoist_literals_
std::unordered_map< llvm::Value *, HoistedLiteralLoadLocator > row_func_hoisted_literals_
llvm::IRBuilder ir_builder_
std::unordered_map< int, std::vector< llvm::Value * > > query_func_literal_loads_
llvm::Type * get_int_type(const int width, llvm::LLVMContext &context)
static size_t literalBytes(const CgenState::LiteralValue &lit)
boost::variant< int8_t, int16_t, int32_t, int64_t, float, double, std::pair< std::string, int >, std::string, std::vector< double >, std::vector< int32_t >, std::vector< int8_t >, std::pair< std::vector< int8_t >, int >> LiteralValue
size_t get_bit_width(const SQLTypeInfo &ti)
llvm::LLVMContext & context_
size_t getOrAddLiteral(const Analyzer::Constant *constant, const EncodingType enc_type, const int dict_id, const int device_id)
llvm::Value * get_arg_by_name(llvm::Function *func, const std::string &name)
std::vector< llvm::Value * > codegenHoistedConstants(const std::vector< const Analyzer::Constant * > &constants, const EncodingType enc_type, const int dict_id)
std::vector< llvm::Value * > codegenHoistedConstantsLoads(const SQLTypeInfo &type_info, const EncodingType enc_type, const int dict_id, const int16_t lit_off)
HOST DEVICE SQLTypes get_type() const
llvm::ConstantInt * inlineIntNull(const SQLTypeInfo &)
std::vector< llvm::Value * > codegenHoistedConstantsPlaceholders(const SQLTypeInfo &type_info, const EncodingType enc_type, const int16_t lit_off, const std::vector< llvm::Value * > &literal_loads)
HOST DEVICE bool get_notnull() const
llvm::IRBuilder query_func_entry_ir_builder_
const SQLTypeInfo & get_type_info() const
ExecutorDeviceType device_type_
SQLTypes decimal_to_int_type(const SQLTypeInfo &ti)
std::vector< llvm::Value * > codegen(const Analyzer::Expr *, const bool fetch_columns, const CompilationOptions &)
Datum get_constval() const
bool is_timeinterval() const
llvm::ConstantInt * codegenIntConst(const Analyzer::Constant *constant)
llvm::ConstantInt * llInt(const T v) const
HOST DEVICE SQLTypes get_subtype() const
int64_t inline_int_null_val(const SQL_TYPE_INFO &ti)
Executor * executor() const