def unpack_value(self, builder, ty, ptr): """Unpack data from array storage """ assert cgutils.is_pointer(ptr.type) value = builder.load(ptr) if ty == types.boolean: return builder.trunc(value, Type.int(1)) else: return value
def unpack_value(self, builder, ty, ptr): """Unpack data from array storage """ if isinstance(ty, types.Record): vt = self.get_value_type(ty) tmp = cgutils.alloca_once(builder, vt) dataptr = cgutils.inbound_gep(builder, ptr, 0, 0) builder.store(dataptr, cgutils.inbound_gep(builder, tmp, 0, 0)) return builder.load(tmp) assert cgutils.is_pointer(ptr.type) value = builder.load(ptr) if ty == types.boolean: return builder.trunc(value, Type.int(1)) else: return value
def gen_arg_addrspace_md(fn): """ Generate kernel_arg_addr_space metadata """ mod = fn.module fnty = fn.type.pointee codes = [] for a in fnty.args: if cgutils.is_pointer(a): codes.append(SPIR_GLOBAL_ADDRSPACE) else: codes.append(SPIR_PRIVATE_ADDRSPACE) consts = [lc.Constant.int(lc.Type.int(), x) for x in codes] name = lc.MetaDataString.get(mod, "kernel_arg_addr_space") return lc.MetaData.get(mod, [name] + consts)