Hi, On Thu, May 28 2026, Sebastian Galindo via Gcc wrote: > Hi, > > I'm implementing some OpenACC directives but since I'm a new contributor > with a very simple but conceptual question that I prefer asking in the > mailing list rather than believing some unclear explanation from AI. > > I know that some directives (Talking about OpenMP / OpenACC) > imply futher optimizations or variables treatment and that case > is defined as a tree node (TREEDEF). In the other side, built-in > is required when it's a runtime call that can be resolved in the > front-end (?).
Did you mean to write "that CANNOT be resolved by a front-end?" (Or any stage of compilation, for that matter?). The thing is, especially in the OpenMP/OpenACC context, the same stuff can be represented by both. For example there is an OMP_PARALLEL tree code that is generated by the front-ends to represent OpenMP parallel construct which then however gets lowered/expanded to a call to builtin_GOMP_parallel which stays until the end of the compilation and the call is emitted to the assembly (and is implemented in the run-time library libgomp). So, if you eventually need a call to libgomp, you will need to use a (call to) a builtin function. However, how you convey other information from the front-ends to lowering/expansion and beyond is upon you, I guess. > I'm not sure about that and I would appreciate some examples. Not > necessarily in the case of OpenACC / OpenMP, but some useful examples to > judge if some statement requires built-in or define a tree node for that > (if requires special treatment). See above. Compile a simple OpenMP/OpenACC example with -fdump-tree-all and see how things change throughout the GCC pass pipeline. Hope this helps, Martin
