[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
https://github.com/yxsamliu closed https://github.com/llvm/llvm-project/pull/80322 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
https://github.com/yxsamliu updated https://github.com/llvm/llvm-project/pull/80322 >From c2b559f5853a50a54958f2d5f2410a94ca0f722e Mon Sep 17 00:00:00 2001 From: "Yaxun (Sam) Liu" Date: Thu, 1 Feb 2024 13:44:03 -0500 Subject: [PATCH] [AMDGPU] Diagnose unaligned atomic for amdgpu AMDGPU does not support unaligned atomics, therefore make the warning an error. This patch is transferred from https://reviews.llvm.org/D99201 --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 6 ++ clang/lib/Driver/ToolChains/AMDGPU.h | 3 +++ clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 1 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 1 + clang/test/Driver/amdgpu-openmp-toolchain.c | 4 clang/test/Driver/amdgpu-toolchain-opencl.cl | 3 +++ clang/test/Driver/hip-options.hip| 16 7 files changed, 34 insertions(+) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 4a35da6140b2a..60e8c123c591d 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -829,6 +829,12 @@ void AMDGPUToolChain::addClangTargetOptions( } } +void AMDGPUToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + // AMDGPU does not support atomic lib call. Treat atomic alignment + // warnings as errors. + CC1Args.push_back("-Werror=atomic-alignment"); +} + StringRef AMDGPUToolChain::getGPUArch(const llvm::opt::ArgList &DriverArgs) const { return getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index b3361b1e36079..13c0e138f08f3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -121,6 +121,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; + /// Common warning options shared by AMDGPU HIP, OpenCL and OpenMP toolchains. + /// Language specific warning options should go to derived classes. + void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index b012b7cb72937..cca18431ff773 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -118,6 +118,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( void AMDGPUOpenMPToolChain::addClangWarningOptions( ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index f9854a4840092..34236e8bcf949 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -308,6 +308,7 @@ Tool *HIPAMDToolChain::buildLinker() const { } void HIPAMDToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c index daa41b216089b..4975e2f8a5239 100644 --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -74,3 +74,7 @@ // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a \ // RUN: -O3 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-OPT // CHECK-OPT: clang-linker-wrapper{{.*}}"--opt-level=O3" + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARN-ATOMIC +// CHECK-WARN-ATOMIC-NOT: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-Werror=atomic-alignment" +// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-Werror=atomic-alignment" diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 12fb1e4107d15..755d5e0ad8c50 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -32,3 +32,6 @@ // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Wl,--unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Xlinker --unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // CHK-LINK_UR: ld.lld{{.*}} "--no-undefined"{{.*}} "--unresolved-symbols=ignore-all" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -x cl -c -emit-llvm -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -chec
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
https://github.com/yxsamliu updated https://github.com/llvm/llvm-project/pull/80322 >From 8cc0ecfe6723b7eb363a5eef2cd4b8630e6a2ac8 Mon Sep 17 00:00:00 2001 From: "Yaxun (Sam) Liu" Date: Thu, 1 Feb 2024 13:44:03 -0500 Subject: [PATCH] [AMDGPU] Diagnose unaligned atomic for amdgpu AMDGPU does not support unaligned atomics, therefore make the warning an error. This patch is transferred from https://reviews.llvm.org/D99201 --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 6 ++ clang/lib/Driver/ToolChains/AMDGPU.h | 3 +++ clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 1 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 1 + clang/test/Driver/amdgpu-openmp-toolchain.c | 4 clang/test/Driver/amdgpu-toolchain-opencl.cl | 3 +++ clang/test/Driver/hip-options.hip| 16 7 files changed, 34 insertions(+) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 4a35da6140b2a..60e8c123c591d 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -829,6 +829,12 @@ void AMDGPUToolChain::addClangTargetOptions( } } +void AMDGPUToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + // AMDGPU does not support atomic lib call. Treat atomic alignment + // warnings as errors. + CC1Args.push_back("-Werror=atomic-alignment"); +} + StringRef AMDGPUToolChain::getGPUArch(const llvm::opt::ArgList &DriverArgs) const { return getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index b3361b1e36079..13c0e138f08f3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -121,6 +121,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; + /// Common warning options shared by AMDGPU HIP, OpenCL and OpenMP toolchains. + /// Language specific warning options should go to derived classes. + void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index b012b7cb72937..cca18431ff773 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -118,6 +118,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( void AMDGPUOpenMPToolChain::addClangWarningOptions( ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index f9854a4840092..34236e8bcf949 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -308,6 +308,7 @@ Tool *HIPAMDToolChain::buildLinker() const { } void HIPAMDToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c index daa41b216089b..4975e2f8a5239 100644 --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -74,3 +74,7 @@ // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a \ // RUN: -O3 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-OPT // CHECK-OPT: clang-linker-wrapper{{.*}}"--opt-level=O3" + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARN-ATOMIC +// CHECK-WARN-ATOMIC-NOT: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-Werror=atomic-alignment" +// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-Werror=atomic-alignment" diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 12fb1e4107d15..755d5e0ad8c50 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -32,3 +32,6 @@ // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Wl,--unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Xlinker --unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // CHK-LINK_UR: ld.lld{{.*}} "--no-undefined"{{.*}} "--unresolved-symbols=ignore-all" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -x cl -c -emit-llvm -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -chec
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
yxsamliu wrote: > You may want to check that we can still disable the error with > `-Wno-error=atomic-alignment` passed via top-level options. > > Other than that LGTM. Good point. Added a test https://github.com/llvm/llvm-project/pull/80322 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
https://github.com/yxsamliu updated https://github.com/llvm/llvm-project/pull/80322 >From 91c9113a986c90179d36ca33c6d4559cb946f746 Mon Sep 17 00:00:00 2001 From: "Yaxun (Sam) Liu" Date: Thu, 1 Feb 2024 13:44:03 -0500 Subject: [PATCH] [AMDGPU] Diagnose unaligned atomic for amdgpu AMDGPU does not support unaligned atomics, therefore make the warning an error. This patch is transferred from https://reviews.llvm.org/D99201 --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 6 ++ clang/lib/Driver/ToolChains/AMDGPU.h | 3 +++ clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 1 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 1 + clang/test/Driver/amdgpu-openmp-toolchain.c | 4 clang/test/Driver/amdgpu-toolchain-opencl.cl | 3 +++ clang/test/Driver/hip-options.hip| 16 7 files changed, 34 insertions(+) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 4a35da6140b2a..60e8c123c591d 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -829,6 +829,12 @@ void AMDGPUToolChain::addClangTargetOptions( } } +void AMDGPUToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + // AMDGPU does not support atomic lib call. Treat atomic alignment + // warnings as errors. + CC1Args.push_back("-Werror=atomic-alignment"); +} + StringRef AMDGPUToolChain::getGPUArch(const llvm::opt::ArgList &DriverArgs) const { return getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index b3361b1e36079..13c0e138f08f3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -121,6 +121,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; + /// Common warning options shared by AMDGPU HIP, OpenCL and OpenMP toolchains. + /// Language specific warning options should go to derived classes. + void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index b012b7cb72937..cca18431ff773 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -118,6 +118,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( void AMDGPUOpenMPToolChain::addClangWarningOptions( ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index f9854a4840092..34236e8bcf949 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -308,6 +308,7 @@ Tool *HIPAMDToolChain::buildLinker() const { } void HIPAMDToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c index daa41b216089b..4975e2f8a5239 100644 --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -74,3 +74,7 @@ // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a \ // RUN: -O3 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-OPT // CHECK-OPT: clang-linker-wrapper{{.*}}"--opt-level=O3" + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARN-ATOMIC +// CHECK-WARN-ATOMIC-NOT: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-Werror=atomic-alignment" +// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-Werror=atomic-alignment" diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 12fb1e4107d15..2fe684c1feddf 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -32,3 +32,6 @@ // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Wl,--unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Xlinker --unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // CHK-LINK_UR: ld.lld{{.*}} "--no-undefined"{{.*}} "--unresolved-symbols=ignore-all" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -x cl -c -emit-llvm -mcpu=fiji %s 2>&1 | FileCheck -check-prefix=C
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
https://github.com/Artem-B approved this pull request. You may want to check that we can still disable the error with `-Wno-error=atomic-alignment` passed via top-level options. Other than that LGTM. https://github.com/llvm/llvm-project/pull/80322 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
llvmbot wrote: @llvm/pr-subscribers-clang-driver Author: Yaxun (Sam) Liu (yxsamliu) Changes AMDGPU does not support unaligned atomics, therefore make the warning an error. This patch is transferred from https://reviews.llvm.org/D99201 --- Full diff: https://github.com/llvm/llvm-project/pull/80322.diff 7 Files Affected: - (modified) clang/lib/Driver/ToolChains/AMDGPU.cpp (+6) - (modified) clang/lib/Driver/ToolChains/AMDGPU.h (+3) - (modified) clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp (+1) - (modified) clang/lib/Driver/ToolChains/HIPAMD.cpp (+1) - (modified) clang/test/Driver/amdgpu-openmp-toolchain.c (+4) - (modified) clang/test/Driver/amdgpu-toolchain-opencl.cl (+3) - (modified) clang/test/Driver/hip-options.hip (+7) ``diff diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 4a35da6140b2a..60e8c123c591d 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -829,6 +829,12 @@ void AMDGPUToolChain::addClangTargetOptions( } } +void AMDGPUToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + // AMDGPU does not support atomic lib call. Treat atomic alignment + // warnings as errors. + CC1Args.push_back("-Werror=atomic-alignment"); +} + StringRef AMDGPUToolChain::getGPUArch(const llvm::opt::ArgList &DriverArgs) const { return getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index b3361b1e36079..13c0e138f08f3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -121,6 +121,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; + /// Common warning options shared by AMDGPU HIP, OpenCL and OpenMP toolchains. + /// Language specific warning options should go to derived classes. + void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index b012b7cb72937..cca18431ff773 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -118,6 +118,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( void AMDGPUOpenMPToolChain::addClangWarningOptions( ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index f9854a4840092..34236e8bcf949 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -308,6 +308,7 @@ Tool *HIPAMDToolChain::buildLinker() const { } void HIPAMDToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c index daa41b216089b..4975e2f8a5239 100644 --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -74,3 +74,7 @@ // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a \ // RUN: -O3 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-OPT // CHECK-OPT: clang-linker-wrapper{{.*}}"--opt-level=O3" + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARN-ATOMIC +// CHECK-WARN-ATOMIC-NOT: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-Werror=atomic-alignment" +// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-Werror=atomic-alignment" diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 12fb1e4107d15..2fe684c1feddf 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -32,3 +32,6 @@ // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Wl,--unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Xlinker --unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // CHK-LINK_UR: ld.lld{{.*}} "--no-undefined"{{.*}} "--unresolved-symbols=ignore-all" + +// RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -x cl -c -emit-llvm -mcpu=fiji %s 2>&1 | FileCheck -check-prefix=CHECK-WARN-ATOMIC %s +// CHECK-WARN-ATOMIC: "-cc1"{{.*}} "-Werror=atomic-alignment" diff --git a/cla
[clang] [AMDGPU] Diagnose unaligned atomic (PR #80322)
https://github.com/yxsamliu created https://github.com/llvm/llvm-project/pull/80322 AMDGPU does not support unaligned atomics, therefore make the warning an error. This patch is transferred from https://reviews.llvm.org/D99201 >From a5d78d7439d58eefc45a6ea694f1e4d941de9d10 Mon Sep 17 00:00:00 2001 From: "Yaxun (Sam) Liu" Date: Thu, 1 Feb 2024 13:44:03 -0500 Subject: [PATCH] [AMDGPU] Diagnose unaligned atomic for amdgpu AMDGPU does not support unaligned atomics, therefore make the warning an error. This patch is transferred from https://reviews.llvm.org/D99201 --- clang/lib/Driver/ToolChains/AMDGPU.cpp | 6 ++ clang/lib/Driver/ToolChains/AMDGPU.h | 3 +++ clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp | 1 + clang/lib/Driver/ToolChains/HIPAMD.cpp | 1 + clang/test/Driver/amdgpu-openmp-toolchain.c | 4 clang/test/Driver/amdgpu-toolchain-opencl.cl | 3 +++ clang/test/Driver/hip-options.hip| 7 +++ 7 files changed, 25 insertions(+) diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp b/clang/lib/Driver/ToolChains/AMDGPU.cpp index 4a35da6140b2a..60e8c123c591d 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp @@ -829,6 +829,12 @@ void AMDGPUToolChain::addClangTargetOptions( } } +void AMDGPUToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + // AMDGPU does not support atomic lib call. Treat atomic alignment + // warnings as errors. + CC1Args.push_back("-Werror=atomic-alignment"); +} + StringRef AMDGPUToolChain::getGPUArch(const llvm::opt::ArgList &DriverArgs) const { return getProcessorFromTargetID( diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h b/clang/lib/Driver/ToolChains/AMDGPU.h index b3361b1e36079..13c0e138f08f3 100644 --- a/clang/lib/Driver/ToolChains/AMDGPU.h +++ b/clang/lib/Driver/ToolChains/AMDGPU.h @@ -121,6 +121,9 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public Generic_ELF { /// Get GPU arch from -mcpu without checking. StringRef getGPUArch(const llvm::opt::ArgList &DriverArgs) const; + /// Common warning options shared by AMDGPU HIP, OpenCL and OpenMP toolchains. + /// Language specific warning options should go to derived classes. + void addClangWarningOptions(llvm::opt::ArgStringList &CC1Args) const override; }; class LLVM_LIBRARY_VISIBILITY ROCMToolChain : public AMDGPUToolChain { diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp index b012b7cb72937..cca18431ff773 100644 --- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp +++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp @@ -118,6 +118,7 @@ llvm::opt::DerivedArgList *AMDGPUOpenMPToolChain::TranslateArgs( void AMDGPUOpenMPToolChain::addClangWarningOptions( ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp b/clang/lib/Driver/ToolChains/HIPAMD.cpp index f9854a4840092..34236e8bcf949 100644 --- a/clang/lib/Driver/ToolChains/HIPAMD.cpp +++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp @@ -308,6 +308,7 @@ Tool *HIPAMDToolChain::buildLinker() const { } void HIPAMDToolChain::addClangWarningOptions(ArgStringList &CC1Args) const { + AMDGPUToolChain::addClangWarningOptions(CC1Args); HostTC.addClangWarningOptions(CC1Args); } diff --git a/clang/test/Driver/amdgpu-openmp-toolchain.c b/clang/test/Driver/amdgpu-openmp-toolchain.c index daa41b216089b..4975e2f8a5239 100644 --- a/clang/test/Driver/amdgpu-openmp-toolchain.c +++ b/clang/test/Driver/amdgpu-openmp-toolchain.c @@ -74,3 +74,7 @@ // RUN: %clang -### -target x86_64-pc-linux-gnu -fopenmp --offload-arch=gfx90a \ // RUN: -O3 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-OPT // CHECK-OPT: clang-linker-wrapper{{.*}}"--opt-level=O3" + +// RUN: %clang -### --target=x86_64-unknown-linux-gnu -emit-llvm -S -fopenmp -fopenmp-targets=amdgcn-amd-amdhsa -Xopenmp-target=amdgcn-amd-amdhsa -march=gfx803 -nogpulib %s 2>&1 | FileCheck %s --check-prefix=CHECK-WARN-ATOMIC +// CHECK-WARN-ATOMIC-NOT: "-cc1" "-triple" "x86_64-unknown-linux-gnu"{{.*}}"-Werror=atomic-alignment" +// CHECK-WARN-ATOMIC: "-cc1" "-triple" "amdgcn-amd-amdhsa"{{.*}}"-Werror=atomic-alignment" diff --git a/clang/test/Driver/amdgpu-toolchain-opencl.cl b/clang/test/Driver/amdgpu-toolchain-opencl.cl index 12fb1e4107d15..2fe684c1feddf 100644 --- a/clang/test/Driver/amdgpu-toolchain-opencl.cl +++ b/clang/test/Driver/amdgpu-toolchain-opencl.cl @@ -32,3 +32,6 @@ // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Wl,--unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // RUN: %clang -### --target=amdgcn-amd-amdhsa-opencl -Xlinker --unresolved-symbols=ignore-all -x cl -mcpu=fiji -nogpulib %s 2>&1 | FileCheck -check-prefix=CHK-LINK_UR %s // CHK-LINK_UR: ld.lld{{.*}} "--no-undefined"{{.*}} "--unresolved-symbols=ignore