erichkeane wrote:
> I am afraid this will break all existing CUDA/HIP programs since they expect
> to be able to parse the builtins for both host and device targets.
>
> In the spirit of single source, the compiler sees the entire code for all
> targets, including host target and all device targets. It is supposed to have
> AST for all host and device targets. Ideally, it should generate a
> heterogeneous IR that is for all host and device targets, and eventually
> generate a heterogeneous executable that includes everything. That would make
> some optimizations across host and device IR possible. It is just due to
> current limitation of LLVM/Clang, we generate and process IR separately for
> each host and device target.
>
> I think at least during parsing/sema/AST clang could and should see code and
> AST for both host and device, since that helps avoid inconsistency between
> host and device. Therefore it is necessary to see builtins for both host and
> device. Clang only needs to make sure they are only emitted for the supported
> target.
This is/was my concern. However, upon thinking further, as long as we
RECOGNIZE/Parse/etc the builtins, it is OK I think if we report
"!__has_builtin".
That is:
```
void foo() {
#if __has_builtin(__builtin_x86_thing)
__builtin_x86_thing();
#else
__builtin_x86_thing(); // woops, not has_builtin!
#endif
}
```
NEEDS to still work, even if the `__has_builtin` answer is 'no'.
https://github.com/llvm/llvm-project/pull/121839
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits