mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-30 12:07:34 +00:00
[Clang][Bundler] Do not require host triple for extracting device bundles
Bundler currently requires host triple to be provided no matter if you are performing bundling or unbundling, but for unbundling operation such requirement is too restrictive. You may for example want to examine device part of the object for a particular offload target, but you have to extract host part as well even though you do not need it. Host triple isn't really needed for unbundling, so this patch removes that requirement. Differential Revision: https://reviews.llvm.org/D66601 llvm-svn: 370143
This commit is contained in:
parent
57076d3199
commit
60a99f4964
@ -156,14 +156,20 @@
|
||||
// RUN: diff %t.i %t.res.i
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=i -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.i -unbundle
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: clang-offload-bundler -type=ii -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.ii,%t.res.tgt1,%t.res.tgt2 -inputs=%t.bundle3.ii -unbundle
|
||||
// RUN: diff %t.ii %t.res.ii
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=ii -targets=openmp-x86_64-pc-linux-gnu -outputs=%t.res.tgt2 -inputs=%t.bundle3.ii -unbundle
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=ll -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.ll,%t.res.tgt1,%t.res.tgt2 -inputs=%t.bundle3.ll -unbundle
|
||||
// RUN: diff %t.ll %t.res.ll
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=ll -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.ll -unbundle
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: clang-offload-bundler -type=s -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.s,%t.res.tgt1,%t.res.tgt2 -inputs=%t.bundle3.s -unbundle
|
||||
// RUN: diff %t.s %t.res.s
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
@ -172,6 +178,8 @@
|
||||
// RUN: diff %t.s %t.res.s
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=s -targets=openmp-x86_64-pc-linux-gnu -outputs=%t.res.tgt2 -inputs=%t.bundle3.s -unbundle
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
|
||||
// Check if we can unbundle a file with no magic strings.
|
||||
// RUN: clang-offload-bundler -type=s -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.s,%t.res.tgt1,%t.res.tgt2 -inputs=%t.s -unbundle
|
||||
@ -183,6 +191,10 @@
|
||||
// RUN: diff %t.empty %t.res.tgt1
|
||||
// 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-x86_64-xxx-linux-gnu,openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.s,%t.res.tgt1 -inputs=%t.bundle3.s -unbundle 2>&1 | FileCheck %s --check-prefix CK-NO-HOST-BUNDLE
|
||||
// CK-NO-HOST-BUNDLE: error: Can't find bundle for the host target
|
||||
|
||||
//
|
||||
// Check binary bundle/unbundle. The content that we have before bundling must be the same we have after unbundling.
|
||||
//
|
||||
@ -194,10 +206,14 @@
|
||||
// RUN: diff %t.bc %t.res.bc
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=bc -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.bc -unbundle
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: clang-offload-bundler -type=gch -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.gch,%t.res.tgt1,%t.res.tgt2 -inputs=%t.bundle3.gch -unbundle
|
||||
// RUN: diff %t.ast %t.res.gch
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=gch -targets=openmp-x86_64-pc-linux-gnu -outputs=%t.res.tgt2 -inputs=%t.bundle3.gch -unbundle
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=ast -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.ast,%t.res.tgt1,%t.res.tgt2 -inputs=%t.bundle3.ast -unbundle
|
||||
// RUN: diff %t.ast %t.res.ast
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
@ -210,6 +226,8 @@
|
||||
// RUN: diff %t.ast %t.res.ast
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// RUN: clang-offload-bundler -type=ast -targets=openmp-powerpc64le-ibm-linux-gnu -outputs=%t.res.tgt1 -inputs=%t.bundle3.ast -unbundle
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
|
||||
// Check if we can unbundle a file with no magic strings.
|
||||
// RUN: clang-offload-bundler -type=bc -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.bc,%t.res.tgt1,%t.res.tgt2 -inputs=%t.bc -unbundle
|
||||
@ -247,6 +265,8 @@
|
||||
// RUN: diff %t.o %t.res.o
|
||||
// RUN: diff %t.tgt1 %t.res.tgt1
|
||||
// RUN: diff %t.tgt2 %t.res.tgt2
|
||||
// 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
|
||||
|
||||
// Check if we can unbundle a file with no magic strings.
|
||||
// RUN: clang-offload-bundler -type=o -targets=host-%itanium_abi_triple,openmp-powerpc64le-ibm-linux-gnu,openmp-x86_64-pc-linux-gnu -outputs=%t.res.o,%t.res.tgt1,%t.res.tgt2 -inputs=%t.o -unbundle
|
||||
|
@ -791,8 +791,9 @@ static bool UnbundleFiles() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// If we found elements, we emit an error if none of those were for the host.
|
||||
if (!FoundHostBundle) {
|
||||
// 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 && HostInputIndex != ~0u) {
|
||||
errs() << "error: Can't find bundle for the host target\n";
|
||||
return true;
|
||||
}
|
||||
@ -895,7 +896,9 @@ int main(int argc, const char **argv) {
|
||||
++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";
|
||||
|
Loading…
Reference in New Issue
Block a user