From a821c46a1fbe5dde7eed328be134dd380ea57242 Mon Sep 17 00:00:00 2001 From: Martin Bauer <martin.bauer@fau.de> Date: Fri, 5 Apr 2019 17:51:33 +0200 Subject: [PATCH] Flag for kerncraft to produce no ternary operators in vectorized code - don't use for production runs! --- pystencils/backends/cbackend.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pystencils/backends/cbackend.py b/pystencils/backends/cbackend.py index 07f73f5..fd80187 100644 --- a/pystencils/backends/cbackend.py +++ b/pystencils/backends/cbackend.py @@ -21,6 +21,8 @@ from pystencils.data_types import create_type, PointerType, get_type_of_expressi __all__ = ['generate_c', 'CustomCodeNode', 'PrintNode', 'get_headers', 'CustomSympyPrinter'] +KERNCRAFT_NO_TERNARY_MODE = False + def generate_c(ast_node: Node, signature_only: bool = False, dialect='c') -> str: """Prints an abstract syntax tree node as C or CUDA code. @@ -518,7 +520,11 @@ class VectorizedCustomSympyPrinter(CustomSympyPrinter): result = self._print(expr.args[-1][0]) for true_expr, condition in reversed(expr.args[:-1]): if isinstance(condition, cast_func) and get_type_of_expression(condition.args[0]) == create_type("bool"): - result = "(({}) ? ({}) : ({}))".format(self._print(condition.args[0]), self._print(true_expr), result) + if not KERNCRAFT_NO_TERNARY_MODE: + result = "(({}) ? ({}) : ({}))".format(self._print(condition.args[0]), self._print(true_expr), + result) + else: + print("Warning - skipping ternary op") else: # noinspection SpellCheckingInspection result = self.instruction_set['blendv'].format(result, self._print(true_expr), self._print(condition)) -- GitLab