================
Comment at: lib/CodeGen/CGOpenMPRuntime.h:51
@@ +50,3 @@
+ /// \brief Iterator range for codegen kinds for combined directives.
+ class CombinedCodeGenKind {
+ combined_iterator begin_iterator, end_iterator;
----------------
rjmccall wrote:
> This isn't really a Kind, and the name makes it really confusing. It's not a
> "range" either in the usual C++ sense of a pair of iterators. It's really a
> generator, although that name is also misleading in the broader context of
> IRGen.
>
> I think this is probably just not the right abstraction. Would it make more
> sense for the emission of the combining directives to take a lambda (probably
> as an llvm::FunctionRef) that fills in the outlined function body?
> "parallel" would just pass a lambda that just emits the captured statement,
> while "parallel for" would pass a lambda that builds a "for" around the
> captured statement. As it is, there is a lot of hard-to-follow recursion
> here.
John, this solution would work for 'simple' combined constructs, like 'parallel
for' or 'parallel sections'. But what with combined directives like 'target
teams distribute parallel for simd'? Here we have two outlined functions (one
for 'teams', one for 'parallel' regions) with several inlined regions ('target'
in the outer scope, 'distribute' in first outlined function and 'for simd' in
the second outlined region). It seems to me recursion is much better for such
complex cases.
http://reviews.llvm.org/D8631
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits