Hi Eric, Sure, will update it soon.
Regards, Shilei > On Jan 20, 2021, at 12:10 AM, Eric Christopher <echri...@gmail.com> wrote: > > +Tres Popp <mailto:tp...@google.com> (FYI) > > Hi Shilei, > > The other openmp targets tests are all _cc1 tests. I don't think there's a > reason for these to not also be cc1, would you mind updating this? > > Thanks! > > -eric > > On Tue, Jan 19, 2021 at 2:22 PM Shilei Tian via llvm-branch-commits > <llvm-branch-commits@lists.llvm.org > <mailto:llvm-branch-commits@lists.llvm.org>> wrote: > > Author: Shilei Tian > Date: 2021-01-19T14:18:42-05:00 > New Revision: 82e537a9d28a2c18bd1637e2eac0e0af658ed829 > > URL: > https://github.com/llvm/llvm-project/commit/82e537a9d28a2c18bd1637e2eac0e0af658ed829 > > <https://github.com/llvm/llvm-project/commit/82e537a9d28a2c18bd1637e2eac0e0af658ed829> > DIFF: > https://github.com/llvm/llvm-project/commit/82e537a9d28a2c18bd1637e2eac0e0af658ed829.diff > > <https://github.com/llvm/llvm-project/commit/82e537a9d28a2c18bd1637e2eac0e0af658ed829.diff> > > LOG: [Clang][OpenMP] Fixed an issue that clang crashed when compiling OpenMP > program in device only mode without host IR > > D94745 rewrites the `deviceRTLs` using OpenMP and compiles it by directly > calling the device compilation. `clang` crashes because entry in > `OffloadEntriesDeviceGlobalVar` is unintialized. Current design supposes the > device compilation can only be invoked after host compilation with the host IR > such that `clang` can initialize `OffloadEntriesDeviceGlobalVar` from host IR. > This avoids us using device compilation directly, especially when we only have > code wrapped into `declare target` which are all device code. The same issue > also exists for `OffloadEntriesInfoManager`. > > In this patch, we simply initialized an entry if it is not in the maps. Not > sure > we need an option to tell the device compiler that it is invoked standalone. > > Reviewed By: jdoerfert > > Differential Revision: https://reviews.llvm.org/D94871 > <https://reviews.llvm.org/D94871> > > Added: > clang/test/OpenMP/declare_target_device_only_compilation.cpp > > Modified: > clang/lib/CodeGen/CGOpenMPRuntime.cpp > > Removed: > > > > ################################################################################ > diff --git a/clang/lib/CodeGen/CGOpenMPRuntime.cpp > b/clang/lib/CodeGen/CGOpenMPRuntime.cpp > index a3b24039365b..17fa56fb06c8 100644 > --- a/clang/lib/CodeGen/CGOpenMPRuntime.cpp > +++ b/clang/lib/CodeGen/CGOpenMPRuntime.cpp > @@ -2941,16 +2941,12 @@ void CGOpenMPRuntime::OffloadEntriesInfoManagerTy:: > // If we are emitting code for a target, the entry is already initialized, > // only has to be registered. > if (CGM.getLangOpts().OpenMPIsDevice) { > - if (!hasTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum)) { > - unsigned DiagID = CGM.getDiags().getCustomDiagID( > - DiagnosticsEngine::Error, > - "Unable to find target region on line '%0' in the device code."); > - CGM.getDiags().Report(DiagID) << LineNum; > - return; > - } > + // This could happen if the device compilation is invoked standalone. > + if (!hasTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum)) > + initializeTargetRegionEntryInfo(DeviceID, FileID, ParentName, LineNum, > + OffloadingEntriesNum); > auto &Entry = > OffloadEntriesTargetRegion[DeviceID][FileID][ParentName][LineNum]; > - assert(Entry.isValid() && "Entry not initialized!"); > Entry.setAddress(Addr); > Entry.setID(ID); > Entry.setFlags(Flags); > @@ -3017,9 +3013,10 @@ void CGOpenMPRuntime::OffloadEntriesInfoManagerTy:: > OMPTargetGlobalVarEntryKind Flags, > llvm::GlobalValue::LinkageTypes > Linkage) { > if (CGM.getLangOpts().OpenMPIsDevice) { > + // This could happen if the device compilation is invoked standalone. > + if (!hasDeviceGlobalVarEntryInfo(VarName)) > + initializeDeviceGlobalVarEntryInfo(VarName, Flags, > OffloadingEntriesNum); > auto &Entry = OffloadEntriesDeviceGlobalVar[VarName]; > - assert(Entry.isValid() && Entry.getFlags() == Flags && > - "Entry not initialized!"); > assert((!Entry.getAddress() || Entry.getAddress() == Addr) && > "Resetting with the new address."); > if (Entry.getAddress() && hasDeviceGlobalVarEntryInfo(VarName)) { > > diff --git a/clang/test/OpenMP/declare_target_device_only_compilation.cpp > b/clang/test/OpenMP/declare_target_device_only_compilation.cpp > new file mode 100644 > index 000000000000..280959540306 > --- /dev/null > +++ b/clang/test/OpenMP/declare_target_device_only_compilation.cpp > @@ -0,0 +1,15 @@ > +//==========================================================================/// > +// RUN: %clang -S -target powerpc64le-ibm-linux-gnu -fopenmp > -fopenmp-targets=powerpc64le-ibm-linux-gnu -emit-llvm %s -o - | FileCheck %s > +// RUN: %clang -S -target i386-pc-linux-gnu -fopenmp > -fopenmp-targets=i386-pc-linux-gnu -emit-llvm %s -o - | FileCheck %s > +// RUN: %clang -S -target x86_64-unknown-linux-gnu -fopenmp > -fopenmp-targets=x86_64-unknown-linux-gnu -emit-llvm %s -o - | FileCheck %s > +// expected-no-diagnostics > + > +#pragma omp declare target > +#pragma omp begin declare variant match(device={kind(nohost)}) > +int G1; > +#pragma omp end declare variant > +#pragma omp end declare target > + > +// CHECK: @[[G:.+]] = hidden {{.*}}global i32 0, align 4 > +// CHECK: !omp_offload.info <http://omp_offload.info/> = !{!0} > +// CHECK: !0 = !{i32 1, !"[[G]]", i32 0, i32 0} > > > > _______________________________________________ > llvm-branch-commits mailing list > llvm-branch-commits@lists.llvm.org <mailto:llvm-branch-commits@lists.llvm.org> > https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits > <https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits>
_______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits