HomePhabricator

[OPENMP50]Codegen for lastprivate conditional list items.

Authored by ABataev on Dec 27 2019, 6:44 AM.

Description

[OPENMP50]Codegen for lastprivate conditional list items.

Added codegen support for lastprivate conditional. According to the
standard, if when the conditional modifier appears on the clause, if an
assignment to a list item is encountered in the construct then the
original list item is assigned the value that is assigned to the new
list item in the sequentially last iteration or lexically last section
in which such an assignment is encountered.
We look for the assignment operations and check if the left side
references lastprivate conditional variable. Then the next code is
emitted:
if (last_iv_a <= iv) {

last_iv_a = iv;
last_a = lp_a;

}

At the end the implicit barrier is generated to wait for the end of all
threads and then in the check for the last iteration the private copy is
assigned the last value.

if (last_iter) {

lp_a = last_a; // <--- new code
a = lp_a;      // <--- store of private value to the original  variable.

}

Details

Committed
ABataevJan 2 2020, 1:43 PM
Parents
rGf83801fb2a40: [lldb/CMake] Print whether an optional dependency was enabled.
Branches
Unknown
Tags
Unknown