diff options
| author | Alexey Bataev <a.bataev@hotmail.com> | 2020-06-11 10:16:16 -0400 |
|---|---|---|
| committer | Alexey Bataev <a.bataev@hotmail.com> | 2020-06-16 16:13:27 -0400 |
| commit | 6e78a3086a7f563cc55d2ba83a8697b3320857fb (patch) | |
| tree | 323af5c1cdd648efdf24e98cb8607707c08f3f04 /llvm/lib/CodeGen/MachineDominators.cpp | |
| parent | 8d4a806ef0b988200111b7d99f792361bcd3f7d1 (diff) | |
| download | llvm-6e78a3086a7f563cc55d2ba83a8697b3320857fb.zip llvm-6e78a3086a7f563cc55d2ba83a8697b3320857fb.tar.gz llvm-6e78a3086a7f563cc55d2ba83a8697b3320857fb.tar.bz2 | |
[OPENMP50]Codegen for scan directive in for simd regions.
Summary:
Added codegen for scan directives in parallel for regions.
Emits the code for the directive with inscan reductions.
Original code:
```
#pragma omp for simd reduction(inscan, op : ...)
for(...) {
<input phase>;
#pragma omp scan (in)exclusive(...)
<scan phase>
}
```
is transformed to something:
```
size num_iters = <num_iters>;
<type> buffer[num_iters];
#pragma omp for simd
for (i: 0..<num_iters>) {
<input phase>;
buffer[i] = red;
}
#pragma omp barrier
for (int k = 0; k != ceil(log2(num_iters)); ++k)
for (size cnt = last_iter; cnt >= pow(2, k); --k)
buffer[i] op= buffer[i-pow(2,k)];
#pragma omp for simd
for (0..<num_iters>) {
red = InclusiveScan ? buffer[i] : buffer[i-1];
<scan phase>;
}
```
Reviewers: jdoerfert
Subscribers: yaxunl, guansong, sstefan1, cfe-commits, caomhin
Tags: #clang
Differential Revision: https://reviews.llvm.org/D81658
Diffstat (limited to 'llvm/lib/CodeGen/MachineDominators.cpp')
0 files changed, 0 insertions, 0 deletions
