Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
4 changes: 4 additions & 0 deletions src/ir/effects.h
Original file line number Diff line number Diff line change
Expand Up @@ -846,6 +846,10 @@ class EffectAnalyzer {
// so we set these to true.
parent.readsSharedMemory = true;
parent.writesSharedMemory = true;
parent.readsSharedMutableStruct = true;
parent.writesSharedStruct = true;
parent.readsSharedMutableArray = true;
parent.writesSharedArray = true;
parent.readOrder = parent.writeOrder = MemoryOrder::SeqCst;
}
void visitPause(Pause* curr) {
Expand Down
41 changes: 41 additions & 0 deletions test/lit/passes/simplify-locals-atomic-effects.wast
Original file line number Diff line number Diff line change
Expand Up @@ -795,4 +795,45 @@
)
(local.get $x)
)

;; CHECK: (func $fence-struct-mutable (type $3) (param $shared (ref null $shared-struct)) (result i32)
;; CHECK-NEXT: (local $x i32)
;; CHECK-NEXT: (local.set $x
;; CHECK-NEXT: (struct.get $shared-struct 0
;; CHECK-NEXT: (local.get $shared)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (atomic.fence)
;; CHECK-NEXT: (local.get $x)
;; CHECK-NEXT: )
(func $fence-struct-mutable (param $shared (ref null $shared-struct)) (result i32)
(local $x i32)
;; A shared struct read cannot be moved past an atomic.fence.
(local.set $x
(struct.get $shared-struct 0 (local.get $shared))
)
(atomic.fence)
(local.get $x)
)

;; CHECK: (func $fence-array-mutable (type $2) (param $shared (ref null $shared-struct)) (param $shared-array (ref null $shared-array)) (result i32)
;; CHECK-NEXT: (local $x i32)
;; CHECK-NEXT: (local.set $x
;; CHECK-NEXT: (array.get $shared-array
;; CHECK-NEXT: (local.get $shared-array)
;; CHECK-NEXT: (i32.const 0)
;; CHECK-NEXT: )
;; CHECK-NEXT: )
;; CHECK-NEXT: (atomic.fence)
;; CHECK-NEXT: (local.get $x)
;; CHECK-NEXT: )
(func $fence-array-mutable (param $shared (ref null $shared-struct)) (param $shared-array (ref null $shared-array)) (result i32)
(local $x i32)
;; A shared array read cannot be moved past an atomic.fence.
(local.set $x
(array.get $shared-array (local.get $shared-array) (i32.const 0))
)
(atomic.fence)
(local.get $x)
)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can also test writes here.

)
Loading