================
@@ -19,15 +21,134 @@ entry:
ret i32 %r
}
-; A function with an Acquire load is not readonly.
-define i32 @test2(ptr %x) uwtable ssp {
-; CHECK: Function Attrs: mustprogress nofree norecurse nounwind ssp willreturn
memory(argmem: readwrite) uwtable
-; CHECK-LABEL: @test2(
-; CHECK-NEXT: entry:
-; CHECK-NEXT: [[R:%.*]] = load atomic i32, ptr [[X:%.*]] seq_cst, align 4
+define i32 @load_monotonic(ptr %x) {
+; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn
memory(argmem: readwrite)
+; CHECK-LABEL: define i32 @load_monotonic(
+; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR1:[0-9]+]] {
+; CHECK-NEXT: [[R:%.*]] = load atomic i32, ptr [[X]] monotonic, align 4
; CHECK-NEXT: ret i32 [[R]]
;
-entry:
- %r = load atomic i32, ptr %x seq_cst, align 4
+ %r = load atomic i32, ptr %x monotonic, align 4
+ ret i32 %r
+}
+
+define i32 @load_acquire(ptr %x) {
+; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn
+; CHECK-LABEL: define i32 @load_acquire(
+; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR2:[0-9]+]] {
+; CHECK-NEXT: [[R:%.*]] = load atomic i32, ptr [[X]] acquire, align 4
+; CHECK-NEXT: ret i32 [[R]]
+;
+ %r = load atomic i32, ptr %x acquire, align 4
ret i32 %r
}
+
+define i32 @load_seq_cst(ptr %x) {
+; CHECK: Function Attrs: mustprogress nofree norecurse nounwind willreturn
+; CHECK-LABEL: define i32 @load_seq_cst(
+; CHECK-SAME: ptr captures(none) [[X:%.*]]) #[[ATTR2]] {
+; CHECK-NEXT: [[R:%.*]] = load atomic i32, ptr [[X]] acquire, align 4
+; CHECK-NEXT: ret i32 [[R]]
+;
+ %r = load atomic i32, ptr %x acquire, align 4
----------------
antoniofrighetto wrote:
```suggestion
%r = load atomic i32, ptr %x seq_cst, align 4
```
https://github.com/llvm/llvm-project/pull/193768
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits