Impala
Impalaistheopensource,nativeanalyticdatabaseforApacheHadoop.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
codegen-anyval.h
Go to the documentation of this file.
1 // Copyright 2012 Cloudera Inc.
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 // http://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 #ifndef IMPALA_CODEGEN_CODEGEN_ANYVAL_H
16 #define IMPALA_CODEGEN_CODEGEN_ANYVAL_H
17 
18 #include "codegen/llvm-codegen.h"
19 
20 namespace llvm {
21 class Type;
22 class Value;
23 }
24 
25 namespace impala {
26 
32 //
38 //
49 //
53  public:
54  static const char* LLVM_BOOLEANVAL_NAME;
55  static const char* LLVM_TINYINTVAL_NAME;
56  static const char* LLVM_SMALLINTVAL_NAME;
57  static const char* LLVM_INTVAL_NAME;
58  static const char* LLVM_BIGINTVAL_NAME;
59  static const char* LLVM_FLOATVAL_NAME;
60  static const char* LLVM_DOUBLEVAL_NAME;
61  static const char* LLVM_STRINGVAL_NAME;
62  static const char* LLVM_TIMESTAMPVAL_NAME;
63  static const char* LLVM_DECIMALVAL_NAME;
64 
68  //
74  //
76  static llvm::Value* CreateCall(LlvmCodeGen* cg, LlvmCodeGen::LlvmBuilder* builder,
77  llvm::Function* fn, llvm::ArrayRef<llvm::Value*> args, const char* name = "",
78  llvm::Value* result_ptr = NULL);
79 
82  LlvmCodeGen::LlvmBuilder* builder, const ColumnType& type, llvm::Function* fn,
83  llvm::ArrayRef<llvm::Value*> args, const char* name = "",
84  llvm::Value* result_ptr = NULL);
85 
88  static llvm::Type* GetLoweredType(LlvmCodeGen* cg, const ColumnType& type);
89 
92  static llvm::Type* GetLoweredPtrType(LlvmCodeGen* cg, const ColumnType& type);
93 
96  static llvm::Type* GetUnloweredType(LlvmCodeGen* cg, const ColumnType& type);
97 
100  static llvm::Type* GetUnloweredPtrType(LlvmCodeGen* cg, const ColumnType& type);
101 
105  static llvm::Value* GetNullVal(LlvmCodeGen* codegen, const ColumnType& type);
106 
109  static llvm::Value* GetNullVal(LlvmCodeGen* codegen, llvm::Type* val_type);
110 
115  static CodegenAnyVal GetNonNullVal(LlvmCodeGen* codegen,
116  LlvmCodeGen::LlvmBuilder* builder, const ColumnType& type, const char* name = "");
117 
119  //
123  //
126  //
129  //
132  const ColumnType& type, llvm::Value* value = NULL, const char* name = "");
133 
135  llvm::Value* value() { return value_; }
136 
138  llvm::Value* GetIsNull(const char* name = "is_null");
139 
144  llvm::Value* GetVal(const char* name = "val");
145 
147  void SetIsNull(llvm::Value* is_null);
148 
151  void SetVal(llvm::Value* val);
152 
154  void SetVal(bool val);
155  void SetVal(int8_t val);
156  void SetVal(int16_t val);
157  void SetVal(int32_t val);
158  void SetVal(int64_t val);
159  void SetVal(int128_t val);
160  void SetVal(float val);
161  void SetVal(double val);
162 
164  llvm::Value* GetPtr();
165  llvm::Value *GetLen();
166 
168  void SetPtr(llvm::Value* ptr);
169  void SetLen(llvm::Value* len);
170 
172  llvm::Value* GetDate();
173  llvm::Value* GetTimeOfDay();
174 
176  void SetDate(llvm::Value* date);
177  void SetTimeOfDay(llvm::Value* time_of_day);
178 
181  llvm::Value* GetUnloweredPtr();
182 
185  void SetFromRawValue(llvm::Value* raw_val);
186 
190  void SetFromRawPtr(llvm::Value* raw_ptr);
191 
194  llvm::Value* ToNativeValue();
195 
199  void ToNativePtr(llvm::Value* native_ptr);
200 
202  llvm::Value* Eq(CodegenAnyVal* other);
203 
208  llvm::Value* EqToNativePtr(llvm::Value* native_ptr);
209 
212  : type_(INVALID_TYPE), value_(NULL), name_(NULL), codegen_(NULL), builder_(NULL) { }
213 
214  private:
216  llvm::Value* value_;
217  const char* name_;
218 
221 
224  llvm::Value* GetHighBits(int num_bits, llvm::Value* v, const char* name = "");
225 
229  llvm::Value* SetHighBits(int num_bits, llvm::Value* src, llvm::Value* dst,
230  const char* name = "");
231 };
232 
233 }
234 
235 #endif
void SetFromRawValue(llvm::Value *raw_val)
static llvm::Type * GetLoweredPtrType(LlvmCodeGen *cg, const ColumnType &type)
static CodegenAnyVal CreateCallWrapped(LlvmCodeGen *cg, LlvmCodeGen::LlvmBuilder *builder, const ColumnType &type, llvm::Function *fn, llvm::ArrayRef< llvm::Value * > args, const char *name="", llvm::Value *result_ptr=NULL)
Same as above but wraps the result in a CodegenAnyVal.
llvm::Value * Eq(CodegenAnyVal *other)
Returns the i1 result of this == other. this and other must be non-null.
void SetLen(llvm::Value *len)
static const char * LLVM_TIMESTAMPVAL_NAME
void SetIsNull(llvm::Value *is_null)
Sets the 'is_null' field of the *Val.
static llvm::Type * GetUnloweredType(LlvmCodeGen *cg, const ColumnType &type)
CodegenAnyVal()
Ctor for created an uninitialized CodegenAnYVal that can be assigned to later.
static const char * LLVM_STRINGVAL_NAME
static llvm::Value * CreateCall(LlvmCodeGen *cg, LlvmCodeGen::LlvmBuilder *builder, llvm::Function *fn, llvm::ArrayRef< llvm::Value * > args, const char *name="", llvm::Value *result_ptr=NULL)
'name' optionally specifies the name of the returned value.
static const char * LLVM_FLOATVAL_NAME
llvm::Value * GetHighBits(int num_bits, llvm::Value *v, const char *name="")
void SetVal(llvm::Value *val)
llvm::Value * ToNativeValue()
static llvm::Type * GetUnloweredPtrType(LlvmCodeGen *cg, const ColumnType &type)
void SetDate(llvm::Value *date)
Setters for TimestampVals.
static const char * LLVM_BIGINTVAL_NAME
static CodegenAnyVal GetNonNullVal(LlvmCodeGen *codegen, LlvmCodeGen::LlvmBuilder *builder, const ColumnType &type, const char *name="")
static const char * LLVM_BOOLEANVAL_NAME
llvm::Value * GetPtr()
Getters for StringVals.
LLVM code generator. This is the top level object to generate jitted code.
Definition: llvm-codegen.h:107
llvm::Value * GetUnloweredPtr()
static const char * LLVM_DOUBLEVAL_NAME
llvm::Value * SetHighBits(int num_bits, llvm::Value *src, llvm::Value *dst, const char *name="")
void SetPtr(llvm::Value *ptr)
Setters for StringVals.
void SetTimeOfDay(llvm::Value *time_of_day)
static llvm::Type * GetLoweredType(LlvmCodeGen *cg, const ColumnType &type)
static const char * LLVM_TINYINTVAL_NAME
llvm::Value * EqToNativePtr(llvm::Value *native_ptr)
llvm::Value * value()
Returns the current type-lowered value.
LlvmCodeGen::LlvmBuilder * builder_
llvm::Value * GetDate()
Getters for TimestampVals.
llvm::Value * GetVal(const char *name="val")
llvm::Value * GetIsNull(const char *name="is_null")
Gets the 'is_null' field of the *Val.
llvm::Value * GetLen()
static const char * LLVM_DECIMALVAL_NAME
static const char * LLVM_INTVAL_NAME
static llvm::Value * GetNullVal(LlvmCodeGen *codegen, const ColumnType &type)
void SetFromRawPtr(llvm::Value *raw_ptr)
LlvmCodeGen * codegen_
string name
Definition: cpu-info.cc:50
llvm::Value * GetTimeOfDay()
void ToNativePtr(llvm::Value *native_ptr)
static const char * LLVM_SMALLINTVAL_NAME
__int128_t int128_t
We use the c++ int128_t type. This is stored using 16 bytes and very performant.