def init(self): self.tm = le.TargetMachine.new() # insert registered impls self.insert_func_defn(registry.functions) self.insert_attr_defn(registry.attributes) self.insert_func_defn(stringimpl.registry.functions) self.insert_attr_defn(stringimpl.registry.attributes) self.optimizer = self.build_pass_manager() # once per context self._fnctxtype = precompiled.get_type_named("class.impala_udf::FunctionContext")
def init(self): self.tm = le.TargetMachine.new() # insert registered impls self.insert_func_defn(registry.functions) self.insert_attr_defn(registry.attributes) self.insert_func_defn(stringimpl.registry.functions) self.insert_attr_defn(stringimpl.registry.attributes) self.optimizer = self.build_pass_manager() # once per context self._fnctxtype = precompiled.get_type_named( "class.impala_udf::FunctionContext")
def get_struct_type(self, struct): if hasattr(struct, '_name'): # our custom named structs return precompiled.get_type_named(struct._name) else: return super(ImpalaTargetContext, self).get_struct_type(struct)
@implement("+", StringVal, StringVal) def add_stringval(context, builder, sig, args): module = cgutils.get_module(builder) precomp_func = context._get_precompiled_function("AddStringValImpl") func = module.get_or_insert_function(precomp_func.type.pointee, precomp_func.name) fnctx_arg = context.get_arguments(cgutils.get_function(builder))[0] cfnctx_arg = builder.bitcast(fnctx_arg, func.args[0].type) [s1, s2] = args cs1 = _conv_numba_struct_to_clang(builder, s1, func.args[1].type) cs2 = _conv_numba_struct_to_clang(builder, s2, func.args[2].type) result = builder.call(func, [cfnctx_arg, cs1, cs2]) return raise_return_type(context, builder, StringVal, result) LLVM_TYPE = { AnyVal: precompiled.get_type_named("struct.impala_udf::AnyVal"), BooleanVal: precompiled.get_type_named("struct.impala_udf::BooleanVal"), TinyIntVal: precompiled.get_type_named("struct.impala_udf::TinyIntVal"), SmallIntVal: precompiled.get_type_named("struct.impala_udf::SmallIntVal"), IntVal: precompiled.get_type_named("struct.impala_udf::IntVal"), BigIntVal: precompiled.get_type_named("struct.impala_udf::BigIntVal"), FloatVal: precompiled.get_type_named("struct.impala_udf::FloatVal"), DoubleVal: precompiled.get_type_named("struct.impala_udf::DoubleVal"), StringVal: precompiled.get_type_named("struct.impala_udf::StringVal"), } TYPE_LAYOUT = { AnyVal: AnyValStruct, BooleanVal: BooleanValStruct, TinyIntVal: TinyIntValStruct, SmallIntVal: SmallIntValStruct,
def add_stringval(context, builder, sig, args): module = cgutils.get_module(builder) precomp_func = context._get_precompiled_function("AddStringValImpl") func = module.get_or_insert_function(precomp_func.type.pointee, precomp_func.name) fnctx_arg = context.get_arguments(cgutils.get_function(builder))[0] cfnctx_arg = builder.bitcast(fnctx_arg, func.args[0].type) [s1, s2] = args cs1 = _conv_numba_struct_to_clang(builder, s1, func.args[1].type) cs2 = _conv_numba_struct_to_clang(builder, s2, func.args[2].type) result = builder.call(func, [cfnctx_arg, cs1, cs2]) return raise_return_type(context, builder, StringVal, result) LLVM_TYPE = { AnyVal: precompiled.get_type_named("struct.impala_udf::AnyVal"), BooleanVal: precompiled.get_type_named("struct.impala_udf::BooleanVal"), TinyIntVal: precompiled.get_type_named("struct.impala_udf::TinyIntVal"), SmallIntVal: precompiled.get_type_named("struct.impala_udf::SmallIntVal"), IntVal: precompiled.get_type_named("struct.impala_udf::IntVal"), BigIntVal: precompiled.get_type_named("struct.impala_udf::BigIntVal"), FloatVal: precompiled.get_type_named("struct.impala_udf::FloatVal"), DoubleVal: precompiled.get_type_named("struct.impala_udf::DoubleVal"), StringVal: precompiled.get_type_named("struct.impala_udf::StringVal"), } TYPE_LAYOUT = { AnyVal: AnyValStruct, BooleanVal: BooleanValStruct, TinyIntVal: TinyIntValStruct, SmallIntVal: SmallIntValStruct,