From a9606c7f99c6aeb1d234a42f315f930fe4565d3d Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Mon, 2 Apr 2012 01:22:45 -0400 Subject: [PATCH] Generate correct code for widening to complex on assignment. --- loopy/codegen/instruction.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/loopy/codegen/instruction.py b/loopy/codegen/instruction.py index 0970fa5c4..ecb500d90 100644 --- a/loopy/codegen/instruction.py +++ b/loopy/codegen/instruction.py @@ -9,8 +9,19 @@ def generate_instruction_code(kernel, insn, codegen_state): ccm = codegen_state.c_code_mapper + expr = insn.expression + + if ccm.allow_complex: + # detect widen-to-complex in assignment, account for it. + expr_dtype = ccm.infer_type(expr) + var_dtype = kernel.get_var_descriptor(insn.get_assignee_var_name()).dtype + + if var_dtype.kind == "c" and expr_dtype.kind != "c": + from pymbolic import var + expr = var("%s_fromreal" % ccm.complex_type_name(var_dtype))(expr) + from cgen import Assign - insn_code = Assign(ccm(insn.assignee), ccm(insn.expression)) + insn_code = Assign(ccm(insn.assignee), ccm(expr)) from loopy.codegen.bounds import wrap_in_bounds_checks insn_code, impl_domain = wrap_in_bounds_checks( ccm, kernel.domain, kernel.insn_inames(insn), -- GitLab