diff options
author | Aaron Enye Shi <enye.shi@gmail.com> | 2019-02-12 21:21:06 +0000 |
---|---|---|
committer | Aaron Enye Shi <enye.shi@gmail.com> | 2019-02-12 21:21:06 +0000 |
commit | 5a9a60b604282258d8f437a58e934c7a26414668 (patch) | |
tree | aa65b1ceec7745083cb21c47735b52de22378886 | |
parent | a0129f30b362434ac1af52d2dabc7b2708c25e9d (diff) | |
download | clang-5a9a60b604282258d8f437a58e934c7a26414668.tar.gz |
[HIP] Handle compile -m options and propagate into LLC
Allow the compile options for -m such as -mxnack/-mno-xnack, -msram-ecc/-mno-sram-ecc, -mcode-object-v3/-mno-code-object-v3 to propagate into LLC args.
Also add lit tests to verify features are properly passed.
Differential Revision: https://reviews.llvm.org/D57977
Reviewers: yaxunl, kzhuravl
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@353880 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/Driver/ToolChains/HIP.cpp | 21 | ||||
-rw-r--r-- | test/Driver/hip-toolchain-features.hip | 49 |
2 files changed, 68 insertions, 2 deletions
diff --git a/lib/Driver/ToolChains/HIP.cpp b/lib/Driver/ToolChains/HIP.cpp index cd8ed6118f..23e918be78 100644 --- a/lib/Driver/ToolChains/HIP.cpp +++ b/lib/Driver/ToolChains/HIP.cpp @@ -159,8 +159,25 @@ const char *AMDGCN::Linker::constructLlcCommand( llvm::StringRef OutputFilePrefix, const char *InputFileName) const { // Construct llc command. ArgStringList LlcArgs{InputFileName, "-mtriple=amdgcn-amd-amdhsa", - "-filetype=obj", "-mattr=-code-object-v3", - Args.MakeArgString("-mcpu=" + SubArchName), "-o"}; + "-filetype=obj", + Args.MakeArgString("-mcpu=" + SubArchName)}; + + // Extract all the -m options + std::vector<llvm::StringRef> Features; + handleTargetFeaturesGroup( + Args, Features, options::OPT_m_amdgpu_Features_Group); + + // Add features to mattr such as code-object-v3 and xnack + std::string MAttrString = "-mattr="; + for(auto OneFeature : Features) { + MAttrString.append(Args.MakeArgString(OneFeature)); + if (OneFeature != Features.back()) + MAttrString.append(","); + } + LlcArgs.push_back(Args.MakeArgString(MAttrString)); + + // Add output filename + LlcArgs.push_back("-o"); std::string LlcOutputFileName = C.getDriver().GetTemporaryPath(OutputFilePrefix, "o"); const char *LlcOutputFile = diff --git a/test/Driver/hip-toolchain-features.hip b/test/Driver/hip-toolchain-features.hip new file mode 100644 index 0000000000..63c40e6a23 --- /dev/null +++ b/test/Driver/hip-toolchain-features.hip @@ -0,0 +1,49 @@ +// REQUIRES: clang-driver +// REQUIRES: x86-registered-target +// REQUIRES: amdgpu-registered-target + +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mcode-object-v3 2>&1 | FileCheck %s -check-prefix=COV3 +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mno-code-object-v3 2>&1 | FileCheck %s -check-prefix=NOCOV3 + +// COV3: {{.*}}clang{{.*}}"-target-feature" "+code-object-v3" +// NOCOV3: {{.*}}clang{{.*}}"-target-feature" "-code-object-v3" + + +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mxnack 2>&1 | FileCheck %s -check-prefix=XNACK +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mno-xnack 2>&1 | FileCheck %s -check-prefix=NOXNACK + +// XNACK: {{.*}}clang{{.*}}"-target-feature" "+xnack" +// NOXNACK: {{.*}}clang{{.*}}"-target-feature" "-xnack" + + +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -msram-ecc 2>&1 | FileCheck %s -check-prefix=SRAM +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mno-sram-ecc 2>&1 | FileCheck %s -check-prefix=NOSRAM + +// SRAM: {{.*}}clang{{.*}}"-target-feature" "+sram-ecc" +// NOSRAM: {{.*}}clang{{.*}}"-target-feature" "-sram-ecc" + + +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mcode-object-v3 -mxnack -msram-ecc \ +// RUN: 2>&1 | FileCheck %s -check-prefix=ALL3 +// RUN: %clang -### -c -target x86_64-linux-gnu -fgpu-rdc \ +// RUN: -x hip --cuda-gpu-arch=gfx803 --cuda-gpu-arch=gfx900 %s \ +// RUN: -mno-code-object-v3 -mno-xnack -mno-sram-ecc \ +// RUN: 2>&1 | FileCheck %s -check-prefix=NOALL3 + +// ALL3: {{.*}}clang{{.*}}"-target-feature" "+code-object-v3" "-target-feature" "+xnack" "-target-feature" "+sram-ecc" +// NOALL3: {{.*}}clang{{.*}}"-target-feature" "-code-object-v3" "-target-feature" "-xnack" "-target-feature" "-sram-ecc" + |