yaxunl created this revision.
yaxunl added a reviewer: tra.
Herald added a project: All.
yaxunl requested review of this revision.
Herald added subscribers: sstefan1, MaskRay.
Herald added a reviewer: jdoerfert.
clang-offload-bundler should allow missing host entry when unbundling with
option
--allow-missing-bundles specified.
This is for the use cases where users want to link device-only bundles with
bundles containing both device and host entries.
https://reviews.llvm.org/D142118
Files:
clang/lib/Driver/OffloadBundler.cpp
clang/test/Driver/clang-offload-bundler.c
Index: clang/test/Driver/clang-offload-bundler.c
===================================================================
--- clang/test/Driver/clang-offload-bundler.c
+++ clang/test/Driver/clang-offload-bundler.c
@@ -224,8 +224,11 @@
// RUN: diff %t.empty %t.res.tgt2
// Check that bindler prints an error if given host bundle does not exist in
the fat binary.
-// RUN: not clang-offload-bundler -type=s
-targets=host-amdgcn-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu
-output=%t.res.s -output=%t.res.tgt1 -input=%t.bundle3.s -unbundle
-allow-missing-bundles 2>&1 | FileCheck %s --check-prefix CK-NO-HOST-BUNDLE
-// CK-NO-HOST-BUNDLE: error: Can't find bundle for the host target
+// RUN: not clang-offload-bundler -type=s
-targets=host-amdgcn-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu
-output=%t.res.s -output=%t.res.tgt1 -input=%t.bundle3.s -unbundle 2>&1 |
FileCheck %s --check-prefix CK-NO-HOST-BUNDLE
+// CK-NO-HOST-BUNDLE: error: Can't find bundles for host-amdgcn-xxx-linux-gnu
+
+// Check missing host entry is allowed with -allow-missing-bundles
+// RUN: clang-offload-bundler -type=s
-targets=host-amdgcn-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu
-output=%t.res.s -output=%t.res.tgt1 -input=%t.bundle3.s -unbundle
-allow-missing-bundles
//
// Check binary bundle/unbundle. The content that we have before bundling must
be the same we have after unbundling.
Index: clang/lib/Driver/OffloadBundler.cpp
===================================================================
--- clang/lib/Driver/OffloadBundler.cpp
+++ clang/lib/Driver/OffloadBundler.cpp
@@ -1060,7 +1060,7 @@
// If we found elements, we emit an error if none of those were for the host
// in case host bundle name was provided in command line.
- if (!FoundHostBundle && BundlerConfig.HostInputIndex != ~0u)
+ if (!FoundHostBundle && BundlerConfig.HostInputIndex != ~0u &&
!BundlerConfig.AllowMissingBundles)
return createStringError(inconvertibleErrorCode(),
"Can't find bundle for the host target");
Index: clang/test/Driver/clang-offload-bundler.c
===================================================================
--- clang/test/Driver/clang-offload-bundler.c
+++ clang/test/Driver/clang-offload-bundler.c
@@ -224,8 +224,11 @@
// RUN: diff %t.empty %t.res.tgt2
// Check that bindler prints an error if given host bundle does not exist in the fat binary.
-// RUN: not clang-offload-bundler -type=s -targets=host-amdgcn-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu -output=%t.res.s -output=%t.res.tgt1 -input=%t.bundle3.s -unbundle -allow-missing-bundles 2>&1 | FileCheck %s --check-prefix CK-NO-HOST-BUNDLE
-// CK-NO-HOST-BUNDLE: error: Can't find bundle for the host target
+// RUN: not clang-offload-bundler -type=s -targets=host-amdgcn-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu -output=%t.res.s -output=%t.res.tgt1 -input=%t.bundle3.s -unbundle 2>&1 | FileCheck %s --check-prefix CK-NO-HOST-BUNDLE
+// CK-NO-HOST-BUNDLE: error: Can't find bundles for host-amdgcn-xxx-linux-gnu
+
+// Check missing host entry is allowed with -allow-missing-bundles
+// RUN: clang-offload-bundler -type=s -targets=host-amdgcn-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu -output=%t.res.s -output=%t.res.tgt1 -input=%t.bundle3.s -unbundle -allow-missing-bundles
//
// Check binary bundle/unbundle. The content that we have before bundling must be the same we have after unbundling.
Index: clang/lib/Driver/OffloadBundler.cpp
===================================================================
--- clang/lib/Driver/OffloadBundler.cpp
+++ clang/lib/Driver/OffloadBundler.cpp
@@ -1060,7 +1060,7 @@
// If we found elements, we emit an error if none of those were for the host
// in case host bundle name was provided in command line.
- if (!FoundHostBundle && BundlerConfig.HostInputIndex != ~0u)
+ if (!FoundHostBundle && BundlerConfig.HostInputIndex != ~0u && !BundlerConfig.AllowMissingBundles)
return createStringError(inconvertibleErrorCode(),
"Can't find bundle for the host target");
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits