MCPcopy Create free account
hub / github.com/apache/impala / GetCodegendComputeFnImpl

Method GetCodegendComputeFnImpl

be/src/exprs/literal.cc:389–462  ·  view source on GitHub ↗

IR produced for bigint literal 10: define { i8, i64 } @Literal(i8* %context, %"class.impala::TupleRow"* %row) { entry: ret { i8, i64 } { i8 0, i64 10 } }

Source from the content-addressed store, hash-verified

387// ret { i8, i64 } { i8 0, i64 10 }
388// }
389Status Literal::GetCodegendComputeFnImpl(LlvmCodeGen* codegen, llvm::Function** fn) {
390 DCHECK_EQ(GetNumChildren(), 0);
391 llvm::Value* args[2];
392 *fn = CreateIrFunctionPrototype("Literal", codegen, &args);
393 llvm::BasicBlock* entry_block =
394 llvm::BasicBlock::Create(codegen->context(), "entry", *fn);
395 LlvmBuilder builder(entry_block);
396
397 CodegenAnyVal v = CodegenAnyVal::GetNonNullVal(codegen, &builder, type_);
398 switch (type_.type) {
399 case TYPE_BOOLEAN:
400 v.SetVal(value_.bool_val);
401 break;
402 case TYPE_TINYINT:
403 v.SetVal(value_.tinyint_val);
404 break;
405 case TYPE_SMALLINT:
406 v.SetVal(value_.smallint_val);
407 break;
408 case TYPE_INT:
409 v.SetVal(value_.int_val);
410 break;
411 case TYPE_BIGINT:
412 v.SetVal(value_.bigint_val);
413 break;
414 case TYPE_FLOAT:
415 v.SetVal(value_.float_val);
416 break;
417 case TYPE_DOUBLE:
418 v.SetVal(value_.double_val);
419 break;
420 case TYPE_STRING:
421 case TYPE_VARCHAR:
422 case TYPE_CHAR:
423 v.SetLen(builder.getInt32(value_.string_val.Len()));
424 v.SetPtr(codegen->GetStringConstant(
425 &builder, value_.string_val.Ptr(), value_.string_val.Len()));
426 break;
427 case TYPE_DECIMAL:
428 switch (type().GetByteSize()) {
429 case 4:
430 v.SetVal(value_.decimal4_val.value());
431 break;
432 case 8:
433 v.SetVal(value_.decimal8_val.value());
434 break;
435 case 16:
436 v.SetVal(value_.decimal16_val.value());
437 break;
438 default:
439 DCHECK(false) << type_.DebugString();
440 }
441 break;
442 case TYPE_TIMESTAMP:
443 v.SetTimeOfDay(builder.getInt64(
444 *reinterpret_cast<const int64_t*>(&value_.timestamp_val.time())));
445 v.SetDate(builder.getInt32(
446 *reinterpret_cast<const int32_t*>(&value_.timestamp_val.date())));

Callers

nothing calls this directly

Calls 15

CreateClass · 0.85
OKFunction · 0.85
contextMethod · 0.80
SetValMethod · 0.80
GetByteSizeMethod · 0.80
SetTimeOfDayMethod · 0.80
SetDateMethod · 0.80
GetLoweredValueMethod · 0.80
FinalizeFunctionMethod · 0.80
StatusClass · 0.70
typeEnum · 0.50
SetLenMethod · 0.45

Tested by

no test coverage detected