[llvm] a41ae90 - [MergeLodstore] Add tests for preserving metadata when sinking stores.

Florian Hahn via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 15 05:11:19 PST 2024


Author: Florian Hahn
Date: 2024-11-15T13:11:12Z
New Revision: a41ae90c0c9f063de1231b454da2631c07b44535

URL: https://github.com/llvm/llvm-project/commit/a41ae90c0c9f063de1231b454da2631c07b44535
DIFF: https://github.com/llvm/llvm-project/commit/a41ae90c0c9f063de1231b454da2631c07b44535.diff

LOG: [MergeLodstore] Add tests for preserving metadata when sinking stores.

Added: 
    llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll b/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll
new file mode 100644
index 00000000000000..f733003e90729b
--- /dev/null
+++ b/llvm/test/Transforms/MergedLoadStoreMotion/preserve-store-metadata.ll
@@ -0,0 +1,104 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
+; RUN: opt -passes=mldst-motion -S %s | FileCheck %s
+
+target datalayout = "e-m:o-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-n32:64-S128-Fn32"
+
+; FIXME: Can preserve common metadata on the sunk store.
+define void @perserve_common_metadata(i1 %c, ptr %dst, ptr %min) {
+; CHECK-LABEL: define void @perserve_common_metadata(
+; CHECK-SAME: i1 [[C:%.*]], ptr [[DST:%.*]], ptr [[MIN:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[GEP_DST_16:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 16
+; CHECK-NEXT:    br i1 [[C]], label %[[THEN:.*]], label %[[ELSE:.*]]
+; CHECK:       [[THEN]]:
+; CHECK-NEXT:    store ptr [[DST]], ptr [[MIN]], align 8, !tbaa [[TBAA0:![0-9]+]]
+; CHECK-NEXT:    br label %[[RETURN:.*]]
+; CHECK:       [[ELSE]]:
+; CHECK-NEXT:    [[GEP_DST_24:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 24
+; CHECK-NEXT:    store ptr null, ptr [[GEP_DST_24]], align 8
+; CHECK-NEXT:    br label %[[RETURN]]
+; CHECK:       [[RETURN]]:
+; CHECK-NEXT:    [[DOTSINK:%.*]] = phi ptr [ [[DST]], %[[THEN]] ], [ null, %[[ELSE]] ]
+; CHECK-NEXT:    store ptr [[DOTSINK]], ptr [[GEP_DST_16]], align 8
+; CHECK-NEXT:    ret void
+;
+entry:
+  %gep.dst.16 = getelementptr inbounds nuw i8, ptr %dst, i64 16
+  br i1 %c, label %then, label %else
+
+then:
+  store ptr %dst, ptr %gep.dst.16, align 8, !tbaa !0, !alias.scope !9, !noalias !9, !llvm.access.group !13
+  store ptr %dst, ptr %min, align 8, !tbaa !5
+  br label %return
+
+else:
+  store ptr null, ptr %gep.dst.16, align 8, !tbaa !0, !alias.scope !9, !noalias !9, !llvm.access.group !13
+  %gep.dst.24 = getelementptr inbounds nuw i8, ptr %dst, i64 24
+  store ptr null, ptr %gep.dst.24, align 8
+  br label %return
+
+return:
+  ret void
+}
+
+define void @clear_
diff erent_metadata(i1 %c, ptr %dst, ptr %min) {
+; CHECK-LABEL: define void @clear_
diff erent_metadata(
+; CHECK-SAME: i1 [[C:%.*]], ptr [[DST:%.*]], ptr [[MIN:%.*]]) {
+; CHECK-NEXT:  [[ENTRY:.*:]]
+; CHECK-NEXT:    [[GEP_DST_16:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 16
+; CHECK-NEXT:    br i1 [[C]], label %[[THEN:.*]], label %[[ELSE:.*]]
+; CHECK:       [[THEN]]:
+; CHECK-NEXT:    store ptr [[DST]], ptr [[MIN]], align 8, !tbaa [[TBAA4:![0-9]+]]
+; CHECK-NEXT:    br label %[[RETURN:.*]]
+; CHECK:       [[ELSE]]:
+; CHECK-NEXT:    [[GEP_DST_24:%.*]] = getelementptr inbounds nuw i8, ptr [[DST]], i64 24
+; CHECK-NEXT:    store ptr null, ptr [[GEP_DST_24]], align 8
+; CHECK-NEXT:    br label %[[RETURN]]
+; CHECK:       [[RETURN]]:
+; CHECK-NEXT:    [[DOTSINK:%.*]] = phi ptr [ [[DST]], %[[THEN]] ], [ null, %[[ELSE]] ]
+; CHECK-NEXT:    store ptr [[DOTSINK]], ptr [[GEP_DST_16]], align 8
+; CHECK-NEXT:    ret void
+;
+entry:
+  %gep.dst.16 = getelementptr inbounds nuw i8, ptr %dst, i64 16
+  br i1 %c, label %then, label %else
+
+then:
+  store ptr %dst, ptr %gep.dst.16, align 8, !tbaa !5, !alias.scope !9, !noalias !9, !llvm.access.group !13
+  store ptr %dst, ptr %min, align 8, !tbaa !6
+  br label %return
+
+else:
+  store ptr null, ptr %gep.dst.16, align 8, !tbaa !6, !alias.scope !12, !noalias !12, !llvm.access.group !14
+  %gep.dst.24 = getelementptr inbounds nuw i8, ptr %dst, i64 24
+  store ptr null, ptr %gep.dst.24, align 8
+  br label %return
+
+return:
+  ret void
+}
+
+!0 = !{!1, !1, i64 0, i64 0}
+!1 = !{!"long", !2}
+!2 = !{!"omnipotent char", !3, i64 0}
+!3 = !{!"Simple C++ TBAA"}
+!4 = !{!5, !5, i64 0, i64 0}
+!5 = !{!"int", !2}
+!6 = !{!7, !7, i64 0, i64 0}
+!7 = !{!"p2 _Foo", !8}
+!8 = !{!"any pointer", !2, i64 0}
+!9 = !{!10}
+!10 = distinct !{!10, !11}
+!11 = distinct !{!11}
+!12 = distinct !{!10}
+!13 = distinct !{}
+!14 = distinct !{}
+;.
+; CHECK: [[TBAA0]] = !{[[META1:![0-9]+]], [[META1]], i64 0}
+; CHECK: [[META1]] = !{!"int", [[META2:![0-9]+]]}
+; CHECK: [[META2]] = !{!"omnipotent char", [[META3:![0-9]+]], i64 0}
+; CHECK: [[META3]] = !{!"Simple C++ TBAA"}
+; CHECK: [[TBAA4]] = !{[[META5:![0-9]+]], [[META5]], i64 0, i64 0}
+; CHECK: [[META5]] = !{!"p2 _Foo", [[META6:![0-9]+]]}
+; CHECK: [[META6]] = !{!"any pointer", [[META2]], i64 0}
+;.


        


More information about the llvm-commits mailing list