Skip to content
This repository was archived by the owner on Mar 25, 2025. It is now read-only.

Commit 8bd85f7

Browse files
committed
split condition.
1 parent 25da002 commit 8bd85f7

2 files changed

Lines changed: 15 additions & 6 deletions

File tree

src/codegen/codegen_cpp_visitor.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -391,8 +391,15 @@ std::string CodegenCppVisitor::breakpoint_current(std::string current) const {
391391
* for(int id = 0; id < nodecount; id++) {
392392
* \endcode
393393
*/
394-
void CodegenCppVisitor::print_parallel_iteration_hint(BlockType /* type */,
395-
const ast::Block* block) {
394+
void CodegenCppVisitor::print_parallel_iteration_hint(BlockType type, const ast::Block* block) {
395+
if (parallel_iteration_condition(type, block)) {
396+
printer->add_line("#pragma omp simd");
397+
printer->add_line("#pragma ivdep");
398+
}
399+
}
400+
401+
bool CodegenCppVisitor::parallel_iteration_condition(BlockType /* type */,
402+
const ast::Block* block) {
396403
// ivdep allows SIMD parallelisation of a block/loop but doesn't provide
397404
// a standard mechanism for atomics. Also, even with openmp 5.0, openmp
398405
// atomics do not enable vectorisation under "omp simd" (gives compiler
@@ -406,10 +413,8 @@ void CodegenCppVisitor::print_parallel_iteration_hint(BlockType /* type */,
406413
ast::AstNodeType::MUTEX_LOCK,
407414
ast::AstNodeType::MUTEX_UNLOCK});
408415
}
409-
if (nodes.empty()) {
410-
printer->add_line("#pragma omp simd");
411-
printer->add_line("#pragma ivdep");
412-
}
416+
417+
return nodes.empty();
413418
}
414419

415420

src/codegen/codegen_cpp_visitor.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -797,6 +797,10 @@ class CodegenCppVisitor: public visitor::ConstAstVisitor {
797797
virtual void print_parallel_iteration_hint(BlockType type, const ast::Block* block);
798798

799799

800+
/** Condition for parallel iteration. */
801+
virtual bool parallel_iteration_condition(BlockType type, const ast::Block* block);
802+
803+
800804
/****************************************************************************************/
801805
/* Backend specific routines */
802806
/****************************************************************************************/

0 commit comments

Comments
 (0)