ABataev added inline comments.
================ Comment at: clang/lib/CodeGen/CGOpenMPRuntime.cpp:2944-2947 + // This could happen if the device compilation is invoked standalone. + if (!hasTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum)) + initializeTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum, + OffloadingEntriesNum); ---------------- tianshilei1992 wrote: > ABataev wrote: > > jdoerfert wrote: > > > tianshilei1992 wrote: > > > > ABataev wrote: > > > > > jdoerfert wrote: > > > > > > ABataev wrote: > > > > > > > I would add a chack that to auxiliary device was specified. And > > > > > > > if it was specified, it means this is not device-only mode and > > > > > > > still need to emit an error. > > > > > > No it doesn't. There is nothing wrong with > > > > > > https://godbolt.org/z/T1h9b5, and as I said before, I can build the > > > > > > situation in various other ways as well, some of which will be > > > > > > outside of the users control. A global can exist in the host/device > > > > > > code only. > > > > > I'm not saying that this is wrong. This code was used to check that > > > > > the compiler works correctly and it just allows developer to > > > > > understand that there is a problem with the compiler if it misses > > > > > something and there is a difference between host and device codegens. > > > > > If we don't want to emit an error here, still would be good to have > > > > > something like an assert to be sure that the host/device codegens are > > > > > synced. > > > > That check still doesn't work for the test case provided by @jdoerfert > > > > because host IR doesn't contain that global in the offload info. > > > As @tianshilei1992 says, my test case does show how this can never be an > > > assertion/warning even for regular host+device compliation. There is no > > > guarantee a host version exists, or a device one does. We need to > > > gracefully allow either. > > So, this is caused by the `nohost` variant selector, right? In this case we > > don't emit it for the host and don't have corresponding entry in the > > metadata? > Correct. Ok, now I see. Is it possible to distinguish this corner case from the general one, where the variable is available for both, host and device, or it will require some extra work/design? If it is easy to differentiate these 2 cases, it would be good to keep something like an error message/assert for the general case and remove the restriction for this corner case. Otherwise, proceed with the current solution. ================ Comment at: clang/lib/CodeGen/CGOpenMPRuntime.cpp:2944-2947 + // This could happen if the device compilation is invoked standalone. + if (!hasTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum)) + initializeTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum, + OffloadingEntriesNum); ---------------- jdoerfert wrote: > ABataev wrote: > > tianshilei1992 wrote: > > > ABataev wrote: > > > > jdoerfert wrote: > > > > > tianshilei1992 wrote: > > > > > > ABataev wrote: > > > > > > > jdoerfert wrote: > > > > > > > > ABataev wrote: > > > > > > > > > I would add a chack that to auxiliary device was specified. > > > > > > > > > And if it was specified, it means this is not device-only > > > > > > > > > mode and still need to emit an error. > > > > > > > > No it doesn't. There is nothing wrong with > > > > > > > > https://godbolt.org/z/T1h9b5, and as I said before, I can build > > > > > > > > the situation in various other ways as well, some of which will > > > > > > > > be outside of the users control. A global can exist in the > > > > > > > > host/device code only. > > > > > > > I'm not saying that this is wrong. This code was used to check > > > > > > > that the compiler works correctly and it just allows developer to > > > > > > > understand that there is a problem with the compiler if it misses > > > > > > > something and there is a difference between host and device > > > > > > > codegens. If we don't want to emit an error here, still would be > > > > > > > good to have something like an assert to be sure that the > > > > > > > host/device codegens are synced. > > > > > > That check still doesn't work for the test case provided by > > > > > > @jdoerfert because host IR doesn't contain that global in the > > > > > > offload info. > > > > > As @tianshilei1992 says, my test case does show how this can never be > > > > > an assertion/warning even for regular host+device compliation. There > > > > > is no guarantee a host version exists, or a device one does. We need > > > > > to gracefully allow either. > > > > So, this is caused by the `nohost` variant selector, right? In this > > > > case we don't emit it for the host and don't have corresponding entry > > > > in the metadata? > > > Correct. > > Ok, now I see. Is it possible to distinguish this corner case from the > > general one, where the variable is available for both, host and device, or > > it will require some extra work/design? If it is easy to differentiate > > these 2 cases, it would be good to keep something like an error > > message/assert for the general case and remove the restriction for this > > corner case. Otherwise, proceed with the current solution. > FWIW, I can also use ifdef, or various other context selectors to achieve the > same effect. Ok, then go ahead with this solution. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D94871/new/ https://reviews.llvm.org/D94871 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits