-
Notifications
You must be signed in to change notification settings - Fork 11k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Driver][CodeGen] Properly handle -fsplit-machine-functions for fatbi…
…nary compilation. When building a fatbinary, the driver invokes the compiler multiple times with different "--target". (For example, with "-x cuda --cuda-gpu-arch=sm_70" flags, clang will be invoded twice, once with --target=x86_64_...., once with --target=sm_70) If we use -fsplit-machine-functions or -fno-split-machine-functions for such invocation, the driver reports an error. This CL changes the behavior so: - "-fsplit-machine-functions" is now passed to all targets, for non-X86 targets, the flag is a NOOP and causes a warning. - "-fno-split-machine-functions" now negates -fsplit-machine-functions (if -fno-split-machine-functions appears after any -fsplit-machine-functions) for any target triple, previously, it causes an error. - "-fsplit-machine-functions -Xarch_device -fno-split-machine-functions" enables MFS on host but disables MFS for GPUS without warnings/errors. - "-Xarch_host -fsplit-machine-functions" enables MFS on host but disables MFS for GPUS without warnings/errors. Reviewed by: xur, dhoekwater Differential Revision: https://reviews.llvm.org/D157750
- Loading branch information
1 parent
2f3fe3e
commit 317a0fe
Showing
10 changed files
with
127 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
61 changes: 61 additions & 0 deletions
61
clang/test/Driver/fsplit-machine-functions-with-cuda-nvptx.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
// REQUIRES: system-linux | ||
// REQUIRES: x86-registered-target | ||
// REQUIRES: nvptx-registered-target | ||
// REQUIRES: shell | ||
|
||
// Check that -fsplit-machine-functions is passed to both x86 and cuda | ||
// compilation and does not cause driver error. | ||
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN: --cuda-gpu-arch=sm_70 -x cuda -fsplit-machine-functions -S %s 2>&1 \ | ||
// RUN: | FileCheck %s --check-prefix=MFS1 | ||
// MFS1: "-target-cpu" "x86-64"{{.*}}"-fsplit-machine-functions" | ||
// MFS1: "-target-cpu" "sm_70"{{.*}}"-fsplit-machine-functions" | ||
|
||
// Check that -fsplit-machine-functions is passed to cuda and it | ||
// causes a warning. | ||
// RUN: %clang --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN: --cuda-gpu-arch=sm_70 -x cuda -fsplit-machine-functions -S %s 2>&1 \ | ||
// RUN: | FileCheck %s --check-prefix=MFS2 | ||
// MFS2: warning: -fsplit-machine-functions is not valid for nvptx | ||
|
||
// Check that -Xarch_host -fsplit-machine-functions is passed only to | ||
// native compilation. | ||
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN: --cuda-gpu-arch=sm_70 -x cuda -Xarch_host \ | ||
// RUN: -fsplit-machine-functions -S %s \ | ||
// RUN: 2>&1 | FileCheck %s --check-prefix=MFS3 | ||
// MFS3: "-target-cpu" "x86-64"{{.*}}"-fsplit-machine-functions" | ||
// MFS3-NOT: "-target-cpu" "sm_70"{{.*}}"-fsplit-machine-functions" | ||
|
||
// Check that -Xarch_host -fsplit-machine-functions does not cause any warning. | ||
// RUN: %clang --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN --cuda-gpu-arch=sm_70 -x cuda -Xarch_host \ | ||
// RUN -fsplit-machine-functions -S %s || { echo \ | ||
// RUN "warning: -fsplit-machine-functions is not valid for" ; } \ | ||
// RUN 2>&1 | FileCheck %s --check-prefix=MFS4 | ||
// MFS4-NOT: warning: -fsplit-machine-functions is not valid for | ||
|
||
// Check that -Xarch_device -fsplit-machine-functions does cause the warning. | ||
// RUN: %clang --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN: --cuda-gpu-arch=sm_70 -x cuda -Xarch_device \ | ||
// RUN: -fsplit-machine-functions -S %s 2>&1 | \ | ||
// RUN: FileCheck %s --check-prefix=MFS5 | ||
// MFS5: warning: -fsplit-machine-functions is not valid for | ||
|
||
// Check that -fsplit-machine-functions -Xarch_device | ||
// -fno-split-machine-functions only passes MFS to x86 | ||
// RUN: %clang -### --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN: --cuda-gpu-arch=sm_70 -x cuda -fsplit-machine-functions \ | ||
// RUN: -Xarch_device -fno-split-machine-functions -S %s \ | ||
// RUN: 2>&1 | FileCheck %s --check-prefix=MFS6 | ||
// MFS6: "-target-cpu" "x86-64"{{.*}}"-fsplit-machine-functions" | ||
// MFS6-NOT: "-target-cpu" "sm_70"{{.*}}"-fsplit-machine-functions" | ||
|
||
// Check that -fsplit-machine-functions -Xarch_device | ||
// -fno-split-machine-functions has no warnings | ||
// RUN: %clang --target=x86_64-unknown-linux-gnu -nogpulib -nogpuinc \ | ||
// RUN: --cuda-gpu-arch=sm_70 -x cuda -fsplit-machine-functions \ | ||
// RUN: -Xarch_device -fno-split-machine-functions -S %s \ | ||
// RUN: || { echo "warning: -fsplit-machine-functions is not valid for"; } \ | ||
// RUN: 2>&1 | FileCheck %s --check-prefix=MFS7 | ||
// MFS7-NOT: warning: -fsplit-machine-functions is not valid for |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,8 +1,8 @@ | ||
// RUN: %clang -### -target x86_64 -fprofile-use=default.profdata -fsplit-machine-functions %s -c 2>&1 | FileCheck -check-prefix=CHECK-OPT %s | ||
// RUN: %clang -### -target x86_64 -fsplit-machine-functions %s -c 2>&1 | FileCheck -check-prefix=CHECK-OPT %s | ||
// RUN: %clang -### -target x86_64 -fprofile-use=default.profdata -fsplit-machine-functions -fno-split-machine-functions %s -c 2>&1 | FileCheck -check-prefix=CHECK-NOOPT %s | ||
// RUN: not %clang -c -target arm-unknown-linux -fsplit-machine-functions %s 2>&1 | FileCheck -check-prefix=CHECK-TRIPLE %s | ||
// RUN: %clang -c -target arm-unknown-linux -fsplit-machine-functions %s 2>&1 | FileCheck -check-prefix=CHECK-TRIPLE %s | ||
|
||
// CHECK-OPT: "-fsplit-machine-functions" | ||
// CHECK-NOOPT-NOT: "-fsplit-machine-functions" | ||
// CHECK-TRIPLE: error: unsupported option '-fsplit-machine-functions' for target | ||
// CHECK-TRIPLE: warning: -fsplit-machine-functions is not valid for arm |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters