Skip to content

Conversation

arsenm
Copy link
Contributor

@arsenm arsenm commented Apr 8, 2025

No description provided.

Copy link
Contributor Author

arsenm commented Apr 8, 2025

@llvmbot
Copy link
Member

llvmbot commented Apr 8, 2025

@llvm/pr-subscribers-llvm-transforms

Author: Matt Arsenault (arsenm)

Changes

Full diff: https://github.com/llvm/llvm-project/pull/134836.diff

1 Files Affected:

  • (added) llvm/test/Transforms/Attributor/align-atomic.ll (+64)
diff --git a/llvm/test/Transforms/Attributor/align-atomic.ll b/llvm/test/Transforms/Attributor/align-atomic.ll
new file mode 100644
index 0000000000000..764ed7419a079
--- /dev/null
+++ b/llvm/test/Transforms/Attributor/align-atomic.ll
@@ -0,0 +1,64 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal  -attributor-annotate-decl-cs  -S < %s | FileCheck %s --check-prefixes=CHECK,TUNIT
+; RUN: opt -aa-pipeline=basic-aa -passes=attributor-cgscc -attributor-manifest-internal  -attributor-annotate-decl-cs -S < %s | FileCheck %s --check-prefixes=CHECK,CGSCC
+
+define i32 @atomicrmw_add_no_op(ptr align 4 %ptr, i32 %val) {
+; CHECK-LABEL: define i32 @atomicrmw_add_no_op(
+; CHECK-SAME: ptr nofree noundef nonnull align 4 captures(none) dereferenceable(4) [[PTR:%.*]], i32 [[VAL:%.*]]) #[[ATTR0:[0-9]+]] {
+; CHECK-NEXT:    [[RESULT:%.*]] = atomicrmw add ptr [[PTR]], i32 [[VAL]] seq_cst, align 4
+; CHECK-NEXT:    ret i32 [[RESULT]]
+;
+  %result = atomicrmw add ptr %ptr, i32 %val seq_cst, align 4
+  ret i32 %result
+}
+
+; Check that the aligment increases to 8
+define i32 @atomicrmw_add_propagate(ptr align 8 %ptr, i32 %val) {
+; CHECK-LABEL: define i32 @atomicrmw_add_propagate(
+; CHECK-SAME: ptr nofree noundef nonnull align 8 captures(none) dereferenceable(4) [[PTR:%.*]], i32 [[VAL:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[RESULT:%.*]] = atomicrmw add ptr [[PTR]], i32 [[VAL]] seq_cst, align 2
+; CHECK-NEXT:    ret i32 [[RESULT]]
+;
+  %result = atomicrmw add ptr %ptr, i32 %val seq_cst, align 2
+  ret i32 %result
+}
+
+; Should increase alignment to 8, not 16.
+define ptr @atomicrmw_non_ptr_op_no_propagate(ptr %ptr, ptr align 16 %val) {
+; CHECK-LABEL: define ptr @atomicrmw_non_ptr_op_no_propagate(
+; CHECK-SAME: ptr nofree noundef nonnull align 2 captures(none) dereferenceable(8) [[PTR:%.*]], ptr nofree align 16 [[VAL:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[RESULT:%.*]] = atomicrmw xchg ptr [[PTR]], ptr [[VAL]] seq_cst, align 2
+; CHECK-NEXT:    ret ptr [[RESULT]]
+;
+  %result = atomicrmw xchg ptr %ptr, ptr %val seq_cst, align 2
+  ret ptr %result
+}
+
+define i32 @cmpxchg_propagate(ptr align 8 %ptr, i32 %cmp, i32 %val) {
+; CHECK-LABEL: define i32 @cmpxchg_propagate(
+; CHECK-SAME: ptr nofree noundef nonnull align 8 captures(none) dereferenceable(4) [[PTR:%.*]], i32 [[CMP:%.*]], i32 [[VAL:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[PAIR:%.*]] = cmpxchg ptr [[PTR]], i32 [[CMP]], i32 [[VAL]] seq_cst monotonic, align 2
+; CHECK-NEXT:    [[RESULT:%.*]] = extractvalue { i32, i1 } [[PAIR]], 0
+; CHECK-NEXT:    ret i32 [[RESULT]]
+;
+  %pair = cmpxchg ptr %ptr, i32 %cmp, i32 %val seq_cst monotonic, align 2
+  %result = extractvalue { i32, i1 } %pair, 0
+  ret i32 %result
+}
+
+; Should not increase alignment
+define ptr @cmpxchg_no_propagate(ptr %ptr, ptr align 16 %cmp, ptr align 32 %val) {
+; CHECK-LABEL: define ptr @cmpxchg_no_propagate(
+; CHECK-SAME: ptr nofree noundef nonnull align 2 captures(none) dereferenceable(8) [[PTR:%.*]], ptr nofree align 16 [[CMP:%.*]], ptr nofree align 32 [[VAL:%.*]]) #[[ATTR0]] {
+; CHECK-NEXT:    [[PAIR:%.*]] = cmpxchg ptr [[PTR]], ptr [[CMP]], ptr [[VAL]] seq_cst monotonic, align 2
+; CHECK-NEXT:    [[RESULT:%.*]] = extractvalue { ptr, i1 } [[PAIR]], 0
+; CHECK-NEXT:    ret ptr [[RESULT]]
+;
+  %pair = cmpxchg ptr %ptr, ptr %cmp, ptr %val seq_cst monotonic, align 2
+  %result = extractvalue { ptr, i1 } %pair, 0
+  ret ptr %result
+}
+
+;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
+; CGSCC: {{.*}}
+; TUNIT: {{.*}}

Copy link
Contributor Author

arsenm commented Apr 8, 2025

Merge activity

  • Apr 8, 11:01 AM EDT: A user started a stack merge that includes this pull request via Graphite.
  • Apr 8, 11:03 AM EDT: Graphite rebased this pull request as part of a merge.
  • Apr 8, 11:06 AM EDT: Graphite rebased this pull request as part of a merge.
  • Apr 8, 11:08 AM EDT: A user merged this pull request with Graphite.

@arsenm arsenm force-pushed the users/arsenm/attributor/add-baseline-tests-atomic-align-propagate branch from 4e2ff83 to 5fa7aac Compare April 8, 2025 15:02
@arsenm arsenm force-pushed the users/arsenm/attributor/add-baseline-tests-atomic-align-propagate branch from 5fa7aac to 639fefd Compare April 8, 2025 15:06
@arsenm arsenm merged commit 2cf4254 into main Apr 8, 2025
6 of 9 checks passed
@arsenm arsenm deleted the users/arsenm/attributor/add-baseline-tests-atomic-align-propagate branch April 8, 2025 15:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants