mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-26 13:26:22 +00:00
[Local] Preserve !align if K dominates J and K has a !noundef
Similar to D142687 Reviewed By: nikic Differential Revision: https://reviews.llvm.org/D147122
This commit is contained in:
parent
66268c8ec4
commit
00b733e200
@ -2693,8 +2693,9 @@ void llvm::combineMetadata(Instruction *K, const Instruction *J,
|
||||
// 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:
|
||||
|
@ -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 @@ bb1:
|
||||
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}
|
||||
;.
|
||||
|
Loading…
x
Reference in New Issue
Block a user