diff --git a/loopy/codegen/instruction.py b/loopy/codegen/instruction.py index c490abb6ed1635c135fc77468f27cd833b1d57b2..6224d9709f5f796f84c3fd177125e0703d92d173 100644 --- a/loopy/codegen/instruction.py +++ b/loopy/codegen/instruction.py @@ -221,7 +221,7 @@ def generate_call_code(codegen_state, insn): if codegen_state.vectorization_info: if insn.atomicity: - raise Unvectorizable("function call") + raise Unvectorizable("atomic operation") # }}} diff --git a/loopy/kernel/instruction.py b/loopy/kernel/instruction.py index 90be2f409fa9fb1e363df8f56d62d7d9e8e4e54f..4477f5bafc7dab867af63d5152f9cbdec12a0dda 100644 --- a/loopy/kernel/instruction.py +++ b/loopy/kernel/instruction.py @@ -994,6 +994,13 @@ class CallInstruction(MultiAssignmentBase): else: key_builder.rec(key_hash, getattr(self, field_name)) + @property + def atomicity(self): + # Function calls can impossibly be atomic, and even the result assignment + # is troublesome, especially in the case of multiple results. Avoid the + # issue altogether by disallowing atomicity. + return () + # }}}