Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 14 additions & 0 deletions clang/lib/Driver/ToolChains/AMDGPU.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -858,6 +858,20 @@ void AMDGPUToolChain::addClangTargetOptions(
CC1Args.push_back("-fapply-global-visibility-to-externs");
}

// For SPIR-V we want to retain the pristine output of Clang CodeGen, since
// optimizations might lose structure / information that is necessary for
// generating optimal concrete AMDGPU code.
// TODO: using the below option is a temporary placeholder until Clang
// provides the required functionality, which essentially boils down to
// -O0 being refactored / reworked to not imply optnone / remove TBAA.
// Once that is added, we should pivot to that functionality, being
// mindful to not corrupt the user provided and subsequently embedded
// command-line (i.e. if the user asks for -O3 this is what the
// finalisation should use).
if (getTriple().isSPIRV() &&
!DriverArgs.hasArg(options::OPT_disable_llvm_optzns))
CC1Args.push_back("-disable-llvm-optzns");

if (DeviceOffloadingKind == Action::OFK_None)
addOpenCLBuiltinsLib(getDriver(), DriverArgs, CC1Args);
}
Expand Down
6 changes: 6 additions & 0 deletions clang/lib/Driver/ToolChains/HIPAMD.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,12 @@ void HIPAMDToolChain::addClangTargetOptions(
// with options that match the user-supplied ones.
if (!DriverArgs.hasArg(options::OPT_fembed_bitcode_marker))
CC1Args.push_back("-fembed-bitcode=marker");
// For SPIR-V we want to retain the pristine output of Clang CodeGen, since
// optimizations might lose structure / information that is necessary for
// generating optimal concrete AMDGPU code. We duplicate this because the
// HIP TC doesn't invoke the base AMDGPU TC addClangTargetOptions.
if (!DriverArgs.hasArg(options::OPT_disable_llvm_passes))
CC1Args.push_back("-disable-llvm-passes");
return; // No DeviceLibs for SPIR-V.
}

Expand Down
2 changes: 1 addition & 1 deletion clang/test/Driver/hip-toolchain-no-rdc.hip
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@
// Check mixed AMDGCNSPIRV and concrete GPU arch.
//

// AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
// AMDGCNSPIRV: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-emit-llvm-bc" {{.*}}"-fembed-bitcode=marker" "-disable-llvm-passes" {{.*}} "-o" "[[AMDGCNSPV_BC:.*bc]]"
// AMDGCNSPIRV: {{".*llvm-link.*"}} "-o" "[[AMDGCNSPV_TMP:.*out]]" "[[AMDGCNSPV_BC]]"
// AMDGCNSPIRV: {{".*llvm-spirv.*"}} "--spirv-max-version=1.6" "--spirv-ext=+all" {{.*}} "[[AMDGCNSPV_TMP]]" {{.*}}"-o" "[[AMDGCNSPV_CO:.*out]]"
// AMDGCNSPIRV: "-cc1" "-triple" "amdgcn-amd-amdhsa" {{.*}}"-emit-obj" {{.*}}"-target-cpu" "gfx900"{{.*}} "-o" "[[GFX900_OBJ:.*o]]"
Expand Down
2 changes: 1 addition & 1 deletion clang/test/Driver/spirv-amd-toolchain.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,6 @@

// RUN: %clang -### --target=spirv64-amd-amdhsa %s -nogpulib -nogpuinc 2>&1 \
// RUN: | FileCheck %s --check-prefix=INVOCATION
// INVOCATION: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}} "-o" "[[OUTPUT:.+]]" "-x" "c"
// INVOCATION: "-cc1" "-triple" "spirv64-amd-amdhsa" {{.*}}"-disable-llvm-optzns" {{.*}} "-o" "[[OUTPUT:.+]]" "-x" "c"
// INVOCATION: "{{.*}}llvm-link" "-o" "a.out" "[[OUTPUT]]"
// INVOCATION: "{{.*}}llvm-spirv" "--spirv-max-version=1.6" "--spirv-ext=+all" "--spirv-allow-unknown-intrinsics" "--spirv-lower-const-expr" "--spirv-preserve-auxdata" "--spirv-debug-info-version=nonsemantic-shader-200" "a.out" "-o" "a.out"