[llvm-branch-commits] [llvm] fc03fad - [AArch64][GlobalISel] Lower vector G_CTTZ.
Author: Amara Emerson Date: 2022-07-29T15:21:57-07:00 New Revision: fc03fad3dde95d9c0b073de28d43770bf3b68969 URL: https://github.com/llvm/llvm-project/commit/fc03fad3dde95d9c0b073de28d43770bf3b68969 DIFF: https://github.com/llvm/llvm-project/commit/fc03fad3dde95d9c0b073de28d43770bf3b68969.diff LOG: [AArch64][GlobalISel] Lower vector G_CTTZ. Fixes issue 56398 (cherry picked from commit 9cc1dd209d20eda51710f302800899730b419381) Added: Modified: llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp llvm/test/CodeGen/AArch64/GlobalISel/legalize-cttz.mir Removed: diff --git a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp index d3617b87a851d..380d3621e7452 100644 --- a/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp +++ b/llvm/lib/Target/AArch64/GISel/AArch64LegalizerInfo.cpp @@ -662,8 +662,8 @@ AArch64LegalizerInfo::AArch64LegalizerInfo(const AArch64Subtarget &ST) getActionDefinitionsBuilder(G_CTTZ_ZERO_UNDEF).lower(); - // TODO: Handle vector types. getActionDefinitionsBuilder(G_CTTZ) + .lowerIf(isVector(0)) .clampScalar(0, s32, s64) .scalarSameSizeAs(1, 0) .customFor({s32, s64}); diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-cttz.mir b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-cttz.mir index 418b31d061518..0486efc665d9c 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/legalize-cttz.mir +++ b/llvm/test/CodeGen/AArch64/GlobalISel/legalize-cttz.mir @@ -88,3 +88,29 @@ body: | %1:_(s64) = G_CTTZ %val(s64) $x0 = COPY %1(s64) RET_ReallyLR implicit $x0 +... +--- +name:v4s32 +alignment: 4 +tracksRegLiveness: true +body: | + bb.0: +liveins: $q0 + +; CHECK-LABEL: name: v4s32 +; CHECK: liveins: $q0 +; CHECK-NEXT: {{ $}} +; CHECK-NEXT: %val:_(<4 x s32>) = COPY $q0 +; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -1 +; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32) +; CHECK-NEXT: [[XOR:%[0-9]+]]:_(<4 x s32>) = G_XOR %val, [[BUILD_VECTOR]] +; CHECK-NEXT: [[ADD:%[0-9]+]]:_(<4 x s32>) = G_ADD %val, [[BUILD_VECTOR]] +; CHECK-NEXT: [[AND:%[0-9]+]]:_(<4 x s32>) = G_AND [[XOR]], [[ADD]] +; CHECK-NEXT: [[CTPOP:%[0-9]+]]:_(<4 x s32>) = G_CTPOP [[AND]](<4 x s32>) +; CHECK-NEXT: $q0 = COPY [[CTPOP]](<4 x s32>) +; CHECK-NEXT: RET_ReallyLR implicit $q0 +%val:_(<4 x s32>) = COPY $q0 +%1:_(<4 x s32>) = G_CTTZ %val(<4 x s32>) +$q0 = COPY %1(<4 x s32>) +RET_ReallyLR implicit $q0 +... ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [lld] e077f4a - [ELF][test] Fix compressed-debug-level.test with zlib-ng
Author: Fangrui Song Date: 2022-07-29T15:22:44-07:00 New Revision: e077f4a6bfde096a1e2a16e7e17d7ac39718b68a URL: https://github.com/llvm/llvm-project/commit/e077f4a6bfde096a1e2a16e7e17d7ac39718b68a DIFF: https://github.com/llvm/llvm-project/commit/e077f4a6bfde096a1e2a16e7e17d7ac39718b68a.diff LOG: [ELF][test] Fix compressed-debug-level.test with zlib-ng The test is brittle but it seems unnecessary to remove size check now. Close #56222 (cherry picked from commit 876af563e73a3c1d6b49e13b4c1791a4208c8546) Added: Modified: lld/test/ELF/compressed-debug-level.test Removed: diff --git a/lld/test/ELF/compressed-debug-level.test b/lld/test/ELF/compressed-debug-level.test index d755e9fedf13b..ee95f12679972 100644 --- a/lld/test/ELF/compressed-debug-level.test +++ b/lld/test/ELF/compressed-debug-level.test @@ -20,7 +20,7 @@ ## Here we check how -O flag affects the size of compressed sections produced. # HEADER: [Nr] NameType Address OffSize -# LEVEL1: [ 1] .debug_info PROGBITS 94 1c +# LEVEL1: [ 1] .debug_info PROGBITS 94 1{{[bc]}} # LEVEL6: [ 1] .debug_info PROGBITS 94 1a ## A little arbitrary debug section which has a diff erent size after ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang-tools-extra] e8c390d - [clang-tidy] Rename the make-confusable-table executable
Author: Martin Storsjö Date: 2022-07-29T15:23:32-07:00 New Revision: e8c390dfdb6a878b04e9bc4f45f05f6d678cccfc URL: https://github.com/llvm/llvm-project/commit/e8c390dfdb6a878b04e9bc4f45f05f6d678cccfc DIFF: https://github.com/llvm/llvm-project/commit/e8c390dfdb6a878b04e9bc4f45f05f6d678cccfc.diff LOG: [clang-tidy] Rename the make-confusable-table executable Rename it to clang-tidy-confusable-chars-gen, to make its role clearer in a wider context. In cross builds, the caller might want to provide this tool externally (to avoid needing to rebuild it in the cross build). In such a case, having the tool properly namespaced makes its role clearer. This matches how the clang-pseudo-gen tool was renamed in a43fef05d4fae32f02365c7b8fef2aa631d23628 / D126725. Differential Revision: https://reviews.llvm.org/D129798 (cherry picked from commit 18b4a8bcf3553174f770f09528c9bd01c8cebfe7) Added: Modified: clang-tools-extra/clang-tidy/misc/CMakeLists.txt clang-tools-extra/clang-tidy/misc/ConfusableTable/CMakeLists.txt llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/misc/ConfusableTable/BUILD.gn Removed: diff --git a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt index 04172db29ea5e..ee8fe0b37fce9 100644 --- a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt @@ -4,11 +4,11 @@ set(LLVM_LINK_COMPONENTS ) if(LLVM_USE_HOST_TOOLS) - build_native_tool(make-confusable-table make_confusable_table) + build_native_tool(clang-tidy-confusable-chars-gen make_confusable_table) set(make_confusable_table_target "${make_confusable_table}") else() - set(make_confusable_table $) - set(make_confusable_table_target make-confusable-table) + set(make_confusable_table $) + set(make_confusable_table_target clang-tidy-confusable-chars-gen) endif() add_subdirectory(ConfusableTable) diff --git a/clang-tools-extra/clang-tidy/misc/ConfusableTable/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/ConfusableTable/CMakeLists.txt index a35f206fbf783..f0ad2dbc0c578 100644 --- a/clang-tools-extra/clang-tidy/misc/ConfusableTable/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/misc/ConfusableTable/CMakeLists.txt @@ -1,6 +1,6 @@ set(LLVM_LINK_COMPONENTS Support) list(REMOVE_ITEM LLVM_COMMON_DEPENDS clang-tablegen-targets) -add_llvm_executable(make-confusable-table +add_llvm_executable(clang-tidy-confusable-chars-gen BuildConfusableTable.cpp ) diff --git a/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/misc/ConfusableTable/BUILD.gn b/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/misc/ConfusableTable/BUILD.gn index 10521474ce57e..25025c499f04a 100644 --- a/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/misc/ConfusableTable/BUILD.gn +++ b/llvm/utils/gn/secondary/clang-tools-extra/clang-tidy/misc/ConfusableTable/BUILD.gn @@ -1,4 +1,4 @@ -executable("make-confusable-table") { +executable("clang-tidy-confusable-chars-gen") { deps = [ "//llvm/lib/Support" ] sources = [ "BuildConfusableTable.cpp" ] } ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [clang-tools-extra] 5e4e882 - [clang-tidy] Add CLANG_TIDY_CONFUSABLE_CHARS_GEN cmake cache variable to avoid building when cross compiling
Author: Martin Storsjö Date: 2022-07-29T15:23:32-07:00 New Revision: 5e4e8822c4c4fe568607b4168ed2cf4cf559b4e8 URL: https://github.com/llvm/llvm-project/commit/5e4e8822c4c4fe568607b4168ed2cf4cf559b4e8 DIFF: https://github.com/llvm/llvm-project/commit/5e4e8822c4c4fe568607b4168ed2cf4cf559b4e8.diff LOG: [clang-tidy] Add CLANG_TIDY_CONFUSABLE_CHARS_GEN cmake cache variable to avoid building when cross compiling This is similar to the LLVM_TABLEGEN, CLANG_TABLEGEN and CLANG_PSEUDO_GEN cmake cache variables. Differential Revision: https://reviews.llvm.org/D129799 (cherry picked from commit dc95d0c525636aed53a3b38258efa2dff4c83edf) Added: Modified: clang-tools-extra/clang-tidy/misc/CMakeLists.txt Removed: diff --git a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt index ee8fe0b37fce..de76b4b00c36 100644 --- a/clang-tools-extra/clang-tidy/misc/CMakeLists.txt +++ b/clang-tools-extra/clang-tidy/misc/CMakeLists.txt @@ -3,7 +3,13 @@ set(LLVM_LINK_COMPONENTS Support ) -if(LLVM_USE_HOST_TOOLS) +set(CLANG_TIDY_CONFUSABLE_CHARS_GEN "clang-tidy-confusable-chars-gen" CACHE + STRING "Host clang-tidy-confusable-chars-gen executable. Saves building if cross-compiling.") + +if(NOT CLANG_TIDY_CONFUSABLE_CHARS_GEN STREQUAL "clang-tidy-confusable-chars-gen") + set(make_confusable_table ${CLANG_TIDY_CONFUSABLE_CHARS_GEN}) + set(make_confusable_table_target ${CLANG_TIDY_CONFUSABLE_CHARS_GEN}) +elseif(LLVM_USE_HOST_TOOLS) build_native_tool(clang-tidy-confusable-chars-gen make_confusable_table) set(make_confusable_table_target "${make_confusable_table}") else() ___ llvm-branch-commits mailing list llvm-branch-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
[llvm-branch-commits] [llvm] 57bdd98 - [ARM] Add target feature to force 32-bit atomics
Author: Nikita Popov Date: 2022-07-29T15:23:01-07:00 New Revision: 57bdd9892d0eba5bdd25fc44799235be7b9f5153 URL: https://github.com/llvm/llvm-project/commit/57bdd9892d0eba5bdd25fc44799235be7b9f5153 DIFF: https://github.com/llvm/llvm-project/commit/57bdd9892d0eba5bdd25fc44799235be7b9f5153.diff LOG: [ARM] Add target feature to force 32-bit atomics This adds a +atomic-32 target feature, which instructs LLVM to assume that lock-free 32-bit atomics are available for this target, even if they usually wouldn't be. If only atomic loads/stores are used, then this won't emit libcalls. If atomic CAS is used, then the user is responsible for providing any necessary __sync implementations (e.g. by masking interrupts for single-core privileged use cases). See https://reviews.llvm.org/D120026#3674333 for context on this change. The tl;dr is that the thumbv6m target in Rust has historically made atomic load/store only available, which is incompatible with the change from D120026, which switched these to use libatomic. Differential Revision: https://reviews.llvm.org/D130480 (cherry picked from commit b1b1086973d5be26f127540852ace59c5119e90a) Added: llvm/test/CodeGen/ARM/thumbv6m-atomic32.ll Modified: llvm/lib/Target/ARM/ARM.td llvm/lib/Target/ARM/ARMISelLowering.cpp Removed: diff --git a/llvm/lib/Target/ARM/ARM.td b/llvm/lib/Target/ARM/ARM.td index 73970b9c74c56..71388bc4efa4c 100644 --- a/llvm/lib/Target/ARM/ARM.td +++ b/llvm/lib/Target/ARM/ARM.td @@ -556,6 +556,15 @@ def FeatureAAPCSFrameChainLeaf : SubtargetFeature<"aapcs-frame-chain-leaf", "for leaf functions", [FeatureAAPCSFrameChain]>; +// Assume that lock-free 32-bit atomics are available, even if the target +// and operating system combination would not usually provide them. The user +// is responsible for providing any necessary __sync implementations. Code +// built with this feature is not ABI-compatible with code built without this +// feature, if atomic variables are exposed across the ABI boundary. +def FeatureAtomics32 : SubtargetFeature< +"atomics-32", "HasForced32BitAtomics", "true", +"Assume that lock-free 32-bit atomics are available">; + //===--===// // ARM architecture class // diff --git a/llvm/lib/Target/ARM/ARMISelLowering.cpp b/llvm/lib/Target/ARM/ARMISelLowering.cpp index 743cca9ff71f2..4c24d70209325 100644 --- a/llvm/lib/Target/ARM/ARMISelLowering.cpp +++ b/llvm/lib/Target/ARM/ARMISelLowering.cpp @@ -1370,7 +1370,8 @@ ARMTargetLowering::ARMTargetLowering(const TargetMachine &TM, // instructions. (ARMv6 doesn't have dmb, but it has an equivalent // encoding; see ARMISD::MEMBARRIER_MCR.) setMaxAtomicSizeInBitsSupported(64); - } else if (Subtarget->isMClass() && Subtarget->hasV8MBaselineOps()) { + } else if ((Subtarget->isMClass() && Subtarget->hasV8MBaselineOps()) || + Subtarget->hasForced32BitAtomics()) { // Cortex-M (besides Cortex-M0) have 32-bit atomics. setMaxAtomicSizeInBitsSupported(32); } else { diff --git a/llvm/test/CodeGen/ARM/thumbv6m-atomic32.ll b/llvm/test/CodeGen/ARM/thumbv6m-atomic32.ll new file mode 100644 index 0..36ed03a8c384b --- /dev/null +++ b/llvm/test/CodeGen/ARM/thumbv6m-atomic32.ll @@ -0,0 +1,203 @@ +; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py +; RUN: llc -mtriple=thumbv6m-none-eabi < %s | FileCheck %s --check-prefixes=CHECK,NO-ATOMIC32 +; RUN: llc -mtriple=thumbv6m-none-eabi -mattr=+atomics-32 < %s | FileCheck %s --check-prefixes=CHECK,ATOMIC32 + +define i32 @load32(ptr %p) { +; NO-ATOMIC32-LABEL: load32: +; NO-ATOMIC32: @ %bb.0: +; NO-ATOMIC32-NEXT:.save {r7, lr} +; NO-ATOMIC32-NEXT:push {r7, lr} +; NO-ATOMIC32-NEXT:movs r1, #5 +; NO-ATOMIC32-NEXT:bl __atomic_load_4 +; NO-ATOMIC32-NEXT:pop {r7, pc} +; +; ATOMIC32-LABEL: load32: +; ATOMIC32: @ %bb.0: +; ATOMIC32-NEXT:ldr r0, [r0] +; ATOMIC32-NEXT:dmb sy +; ATOMIC32-NEXT:bx lr + %v = load atomic i32, ptr %p seq_cst, align 4 + ret i32 %v +} + +define void @store32(ptr %p) { +; NO-ATOMIC32-LABEL: store32: +; NO-ATOMIC32: @ %bb.0: +; NO-ATOMIC32-NEXT:.save {r7, lr} +; NO-ATOMIC32-NEXT:push {r7, lr} +; NO-ATOMIC32-NEXT:movs r1, #0 +; NO-ATOMIC32-NEXT:movs r2, #5 +; NO-ATOMIC32-NEXT:bl __atomic_store_4 +; NO-ATOMIC32-NEXT:pop {r7, pc} +; +; ATOMIC32-LABEL: store32: +; ATOMIC32: @ %bb.0: +; ATOMIC32-NEXT:dmb sy +; ATOMIC32-NEXT:movs r1, #0 +; ATOMIC32-NEXT:str r1, [r0] +; ATOMIC32-NEXT:dmb sy +; ATOMIC32-NEXT:bx lr + store atomic i32 0, ptr %p seq_cst, align 4 + ret void +} + +define i32 @rmw32(ptr %p) { +; NO-ATOMIC32-LABEL: rmw32: +; NO-ATOMIC32: @ %bb.0: +; NO-ATOMIC32-NEXT:
[llvm-branch-commits] [llvm] fd8fd9e - Revert "[OpenMP] Remove noinline attributes in the device runtime"
Author: Joseph Huber Date: 2022-07-29T22:12:16-07:00 New Revision: fd8fd9e51cbeb76d290ceda941fd8b7d5a4151bc URL: https://github.com/llvm/llvm-project/commit/fd8fd9e51cbeb76d290ceda941fd8b7d5a4151bc DIFF: https://github.com/llvm/llvm-project/commit/fd8fd9e51cbeb76d290ceda941fd8b7d5a4151bc.diff LOG: Revert "[OpenMP] Remove noinline attributes in the device runtime" The behaviour of this patch is not great, but it has some side-effects that are required for OpenMPOpt to work. The problem is that when we use `-mlink-builtin-bitcode` we only import used symbols from the runtime. Then OpenMPOpt will insert calls to symbols that were not previously included. This patch removed this implicit behaviour as these functions were kept alive by the `noinline` simply because it kept calls to them in the module. This caused regression in some tests that relied on some OpenMPOpt passes without using LTO. Reverting for the LLVM15 release but will try to fix it more correctly on main. This reverts commit d61d72dae604c3258e25c00622b1a85861450303. Fixes #56752 (cherry picked from commit b08369f7f288b6efb0897953da42ed54e60cfc0b) Added: llvm/test/Transforms/OpenMP/remove_noinline_attributes.ll Modified: llvm/lib/Transforms/IPO/OpenMPOpt.cpp openmp/libomptarget/DeviceRTL/include/Synchronization.h openmp/libomptarget/DeviceRTL/src/Mapping.cpp openmp/libomptarget/DeviceRTL/src/Parallelism.cpp openmp/libomptarget/DeviceRTL/src/State.cpp openmp/libomptarget/DeviceRTL/src/Synchronization.cpp Removed: diff --git a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp index ef2384faa2730..0b42fc1519918 100644 --- a/llvm/lib/Transforms/IPO/OpenMPOpt.cpp +++ b/llvm/lib/Transforms/IPO/OpenMPOpt.cpp @@ -499,6 +499,18 @@ struct OMPInformationCache : public InformationCache { } #include "llvm/Frontend/OpenMP/OMPKinds.def" +// Remove the `noinline` attribute from `__kmpc`, `_OMP::` and `omp_` +// functions, except if `optnone` is present. +if (isOpenMPDevice(M)) { + for (Function &F : M) { +for (StringRef Prefix : {"__kmpc", "_ZN4_OMP", "omp_"}) + if (F.hasFnAttribute(Attribute::NoInline) && + F.getName().startswith(Prefix) && + !F.hasFnAttribute(Attribute::OptimizeNone)) +F.removeFnAttr(Attribute::NoInline); + } +} + // TODO: We should attach the attributes defined in OMPKinds.def. } diff --git a/llvm/test/Transforms/OpenMP/remove_noinline_attributes.ll b/llvm/test/Transforms/OpenMP/remove_noinline_attributes.ll new file mode 100644 index 0..349e2799de27a --- /dev/null +++ b/llvm/test/Transforms/OpenMP/remove_noinline_attributes.ll @@ -0,0 +1,99 @@ +; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes +; RUN: opt < %s -S -openmp-opt-cgscc| FileCheck %s +; RUN: opt < %s -S -passes=openmp-opt-cgscc | FileCheck %s + +declare void @unknown() + +; __kmpc functions +define void @__kmpc_noinline() noinline nounwind { +; CHECK: Function Attrs: nounwind +; CHECK-LABEL: @__kmpc_noinline( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} +; omp_X functions +define void @omp_noinline() noinline nounwind { +; CHECK: Function Attrs: nounwind +; CHECK-LABEL: @omp_noinline( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} +; _OMP namespace +define void @_ZN4_OMP_noinline() noinline nounwind { +; CHECK: Function Attrs: nounwind +; CHECK-LABEL: @_ZN4_OMP_noinline( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} + +; Negative tests: + +define void @__kmpc_noinline_optnone() noinline optnone nounwind { +; CHECK: Function Attrs: noinline nounwind optnone +; CHECK-LABEL: @__kmpc_noinline_optnone( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} +define void @omp_noinline_optnone() noinline optnone nounwind { +; CHECK: Function Attrs: noinline nounwind optnone +; CHECK-LABEL: @omp_noinline_optnone( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} +; _OMP namespace +define void @_ZN4_OMP_noinline_optnone() noinline optnone nounwind { +; CHECK: Function Attrs: noinline nounwind optnone +; CHECK-LABEL: @_ZN4_OMP_noinline_optnone( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} +define void @a___kmpc_noinline() noinline nounwind { +; CHECK: Function Attrs: noinline nounwind +; CHECK-LABEL: @a___kmpc_noinline( +; CHECK-NEXT:call void @unknown() +; CHECK-NEXT:ret void +; + call void @unknown() + ret void +} +define void @a_omp_noinline() noinline nounwind { +; CHECK: Function Attrs: noinline