diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index c11fe37bb4b90d0d2aabe9834de8dc63d84690dc..e06c298987650d507d6c8f8aa21ffc09001efda3 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -661,16 +661,6 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): # if k in code: # return code.replace(k, f'{k}f') # raise ValueError(f"{code} doesn't give {known=} function back.") - # elif isinstance(arg, sp.UnevaluatedExpr): - # unevaluated_expression = arg.args[0] - # test = self._print_Mul(unevaluated_expression, inside_add=True) - # # printed_args = [self._typed_vectorized_symbol(a, data_type) for a in arg.args] - # printed_args = [self._print(a) for a in unevaluated_expression.args] - # return test[1] - # - # # return self.instruction_set[instruction].format(*printed_args, **self._kwargs) - # - # return printed_args else: raise NotImplementedError('Vectorizer cannot cast between different datatypes') # to_type = self.instruction_set['suffix'][data_type.base_type.c_name] diff --git a/pystencils/cpu/vectorization.py b/pystencils/cpu/vectorization.py index 3adcbc31b0840ac5e4973c3c06cce850217e5890..c1362d3453b8213caa7c43aa202f3d20592ea391 100644 --- a/pystencils/cpu/vectorization.py +++ b/pystencils/cpu/vectorization.py @@ -320,7 +320,9 @@ def insert_vector_casts(ast_node, instruction_set, default_float_type='double'): for a, t in zip(new_conditions, types_of_conditions)] return sp.Piecewise(*[(r, c) for r, c in zip(casted_results, casted_conditions)]) - elif isinstance(expr, (sp.Number, TypedSymbol, BooleanAtom)): + elif isinstance(expr, TypedSymbol): + return CastFunc(expr, VectorType(expr.dtype, instruction_set['width'])) + elif isinstance(expr, (sp.Number, BooleanAtom)): return expr else: raise NotImplementedError(f'Due to defensive programming we handle only specific expressions.\n' diff --git a/pystencils_tests/test_vectorization.py b/pystencils_tests/test_vectorization.py index 10898bbf71b8b2dabc2fbca78f74fb209c710f21..6ea6b70bdc18abd5d994bc4eecdf99679e89d80e 100644 --- a/pystencils_tests/test_vectorization.py +++ b/pystencils_tests/test_vectorization.py @@ -40,26 +40,6 @@ def test_vector_type_propagation(instruction_set=instruction_set): np.testing.assert_equal(dst[1:-1, 1:-1], 2 * 10.0 + 3) -def test_vectorised_multiplication(instruction_set=instruction_set): - instructions = get_vector_instruction_set(instruction_set=instruction_set) - a, b = sp.symbols("a b") - f = ps.fields("f:[2D]") - - update_rule = ps.Assignment(f[0, 0], a * b) - - ast = ps.create_kernel(update_rule) - print(instruction_set) - vectorize(ast, instruction_set=instruction_set) - - # ps.show_code(ast) - - func = ast.compile() - code = ps.get_code_str(ast) - - mul_instruction = instructions["*"][:instructions["*"].find("(")] - assert mul_instruction in code - - @pytest.mark.parametrize('openmp', [True, False]) def test_aligned_and_nt_stores(openmp, instruction_set=instruction_set): domain_size = (24, 24)