IR produced for bigint literal 10: define { i8, i64 } @Literal(i8* %context, %"class.impala::TupleRow"* %row) { entry: ret { i8, i64 } { i8 0, i64 10 } }
| 387 | // ret { i8, i64 } { i8 0, i64 10 } |
| 388 | // } |
| 389 | Status 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()))); |
nothing calls this directly
no test coverage detected