[PATCH] D147122: [Local] Preserve !align if K dominates J and K has a !noundef

luxufan via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Mar 29 01:07:18 PDT 2023


StephenFan created this revision.
StephenFan added a reviewer: nikic.
Herald added a subscriber: hiraditya.
Herald added a project: All.
StephenFan requested review of this revision.
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Similar to D142687 <https://reviews.llvm.org/D142687>


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D147122

Files:
  llvm/lib/Transforms/Utils/Local.cpp
  llvm/test/Transforms/InstCombine/load-combine-metadata-dominance.ll


Index: llvm/test/Transforms/InstCombine/load-combine-metadata-dominance.ll
===================================================================
--- llvm/test/Transforms/InstCombine/load-combine-metadata-dominance.ll
+++ llvm/test/Transforms/InstCombine/load-combine-metadata-dominance.ll
@@ -1,4 +1,4 @@
-; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --version 2
 ; RUN: opt -passes=instcombine -S < %s | FileCheck %s
 
 target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"
@@ -96,5 +96,57 @@
   store i32 0, ptr %b
   ret void
 }
+
+define void @combine_metadata_dominance5(ptr %p) {
+; CHECK-LABEL: define void @combine_metadata_dominance5
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[BB1:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 8, !align !1
+; CHECK-NEXT:    store i32 0, ptr [[A]], align 4
+; CHECK-NEXT:    ret void
+;
+entry:
+  %a = load ptr, ptr %p, !align !2
+  br label %bb1
+
+bb1:
+  %b = load ptr, ptr %p, !align !3
+  store i32 0, ptr %a
+  store i32 0, ptr %b
+  ret void
+}
+
+define void @combine_metadata_dominance6(ptr %p) {
+; CHECK-LABEL: define void @combine_metadata_dominance6
+; CHECK-SAME: (ptr [[P:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    br label [[BB1:%.*]]
+; CHECK:       bb1:
+; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 8, !align !2, !noundef !0
+; CHECK-NEXT:    store i32 0, ptr [[A]], align 8
+; CHECK-NEXT:    ret void
+;
+entry:
+  %a = load ptr, ptr %p, !align !2, !noundef !1
+  br label %bb1
+
+bb1:
+  %b = load ptr, ptr %p, !align !3
+  store i32 0, ptr %a
+  store i32 0, ptr %b
+  ret void
+}
+
 !0 = !{}
 !1 = !{}
+!2 = !{i64 8}
+!3 = !{i64 4}
+;.
+; CHECK: attributes #[[ATTR0:[0-9]+]] = { memory(read) }
+;.
+; CHECK: [[META0:![0-9]+]] = !{}
+; CHECK: [[META1:![0-9]+]] = !{i64 4}
+; CHECK: [[META2:![0-9]+]] = !{i64 8}
+;.
Index: llvm/lib/Transforms/Utils/Local.cpp
===================================================================
--- llvm/lib/Transforms/Utils/Local.cpp
+++ llvm/lib/Transforms/Utils/Local.cpp
@@ -2693,8 +2693,9 @@
         // Preserve !invariant.group in K.
         break;
       case LLVMContext::MD_align:
-        K->setMetadata(Kind,
-          MDNode::getMostGenericAlignmentOrDereferenceable(JMD, KMD));
+        if (DoesKMove || !K->hasMetadata(LLVMContext::MD_noundef))
+          K->setMetadata(
+              Kind, MDNode::getMostGenericAlignmentOrDereferenceable(JMD, KMD));
         break;
       case LLVMContext::MD_dereferenceable:
       case LLVMContext::MD_dereferenceable_or_null:


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147122.509242.patch
Type: text/x-patch
Size: 2746 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230329/bd1b6004/attachment.bin>


More information about the llvm-commits mailing list