[PATCH] D66601: [Clang][Bundler] Do not require host triple for extracting device bundles
Sergey Dmitriev via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Aug 26 14:00:06 PDT 2019
sdmitriev updated this revision to Diff 217234.
sdmitriev added a comment.
Rebase.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D66601/new/
https://reviews.llvm.org/D66601
Files:
clang/test/Driver/clang-offload-bundler.c
clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
Index: clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
===================================================================
--- clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
+++ clang/tools/clang-offload-bundler/ClangOffloadBundler.cpp
@@ -739,7 +739,6 @@
// Read all the bundles that are in the work list. If we find no bundles we
// assume the file is meant for the host target.
- bool FoundHostBundle = false;
while (!Worklist.empty()) {
StringRef CurTriple = FH.get()->ReadBundleStart(Input);
@@ -765,10 +764,6 @@
FH.get()->ReadBundle(OutputFile, Input);
FH.get()->ReadBundleEnd(Input);
Worklist.erase(Output);
-
- // Record if we found the host bundle.
- if (hasHostKind(CurTriple))
- FoundHostBundle = true;
}
// If no bundles were found, assume the input file is the host bundle and
@@ -790,12 +785,6 @@
return false;
}
- // If we found elements, we emit an error if none of those were for the host.
- if (!FoundHostBundle) {
- errs() << "error: Can't find bundle for the host target\n";
- return true;
- }
-
// If we still have any elements in the worklist, create empty files for them.
for (auto &E : Worklist) {
std::error_code EC;
@@ -894,7 +883,9 @@
++Index;
}
- if (HostTargetNum != 1) {
+ // Host triple is not really needed for unbundling operation, so do not
+ // treat missing host triple as error if we do unbundling.
+ if ((Unbundle && HostTargetNum > 1) || (!Unbundle && HostTargetNum != 1)) {
Error = true;
errs() << "error: expecting exactly one host target but got "
<< HostTargetNum << ".\n";
Index: clang/test/Driver/clang-offload-bundler.c
===================================================================
--- clang/test/Driver/clang-offload-bundler.c
+++ clang/test/Driver/clang-offload-bundler.c
@@ -183,6 +183,10 @@
// RUN: diff %t.empty %t.res.tgt1
// RUN: diff %t.empty %t.res.tgt2
+// Check that we can extract target parts without providing host triple.
+// RUN: clang-offload-bundler -type=s -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.s -unbundle
+// RUN: diff %t.tgt1 %t.res.tgt1
+
//
// Check binary bundle/unbundle. The content that we have before bundling must be the same we have after unbundling.
//
@@ -221,6 +225,10 @@
// RUN: diff %t.empty %t.res.tgt1
// RUN: diff %t.empty %t.res.tgt2
+// Check that we can extract target parts without providing host triple.
+// RUN: clang-offload-bundler -type=ast -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.unordered.ast -unbundle
+// RUN: diff %t.tgt1 %t.res.tgt1
+
//
// Check object bundle/unbundle. The content should be bundled into an ELF
// section (we are using a PowerPC little-endian host which uses ELF). We
@@ -253,6 +261,10 @@
// RUN: diff %t.empty %t.res.tgt1
// RUN: diff %t.empty %t.res.tgt2
+// Check that we can extract target parts without providing host triple.
+// RUN: clang-offload-bundler -type=o -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.o -unbundle
+// RUN: diff %t.tgt1 %t.res.tgt1
+
// Some code so that we can create a binary out of this file.
int A = 0;
void test_func(void) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D66601.217234.patch
Type: text/x-patch
Size: 3268 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190826/feabb14e/attachment-0001.bin>
More information about the cfe-commits
mailing list