yxsamliu 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'.
If declarations are still there. Only making changes to `__has_builtin`, the risk of breaking existing code is low. https://github.com/llvm/llvm-project/pull/121839 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits