brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · 13dfc4a Raw
153 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-globals --version 22; RUN: opt -passes=instcombine -S < %s | FileCheck %s3 4target datalayout = "e-m:e-p:64:64:64-i64:64-f80:128-n8:16:32:64-S128"5 6; Check that nonnull metadata is not propagated from dominating load.7define void @combine_metadata_dominance1(ptr %p) {8; CHECK-LABEL: define void @combine_metadata_dominance19; CHECK-SAME: (ptr [[P:%.*]]) {10; CHECK-NEXT:  entry:11; CHECK-NEXT:    br label [[BB1:%.*]]12; CHECK:       bb1:13; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 814; CHECK-NEXT:    store i32 0, ptr [[A]], align 415; CHECK-NEXT:    ret void16;17entry:18  %a = load ptr, ptr %p, !nonnull !019  br label %bb120 21bb1:22  %b = load ptr, ptr %p23  store i32 0, ptr %a24  store i32 0, ptr %b25  ret void26}27 28declare i32 @use(ptr, i32) readonly29 30; Check that nonnull from the dominated load does not get propagated.31; There are some cases where it would be safe to keep it.32define void @combine_metadata_dominance2(ptr %p, i1 %c1) {33; CHECK-LABEL: define void @combine_metadata_dominance234; CHECK-SAME: (ptr [[P:%.*]], i1 [[C1:%.*]]) {35; CHECK-NEXT:  entry:36; CHECK-NEXT:    br i1 [[C1]], label [[BB1:%.*]], label [[BB2:%.*]]37; CHECK:       bb1:38; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 839; CHECK-NEXT:    store i32 0, ptr [[A]], align 440; CHECK-NEXT:    ret void41; CHECK:       bb2:42; CHECK-NEXT:    ret void43;44entry:45  %a = load ptr, ptr %p46  br i1 %c1, label %bb1, label %bb247 48bb1:49  %b = load ptr, ptr %p, !nonnull !050  store i32 0, ptr %a51  store i32 0, ptr %b52  ret void53 54bb2:55  ret void56}57 58define void @combine_metadata_dominance3(ptr %p) {59; CHECK-LABEL: define void @combine_metadata_dominance360; CHECK-SAME: (ptr [[P:%.*]]) {61; CHECK-NEXT:  entry:62; CHECK-NEXT:    br label [[BB1:%.*]]63; CHECK:       bb1:64; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 8, !nonnull !0, !noundef !065; CHECK-NEXT:    store i32 0, ptr [[A]], align 466; CHECK-NEXT:    ret void67;68entry:69  %a = load ptr, ptr %p, !nonnull !0, !noundef !170  br label %bb171 72bb1:73  %b = load ptr, ptr %p74  store i32 0, ptr %a75  store i32 0, ptr %b76  ret void77}78 79define void @combine_metadata_dominance4(ptr %p) {80; CHECK-LABEL: define void @combine_metadata_dominance481; CHECK-SAME: (ptr [[P:%.*]]) {82; CHECK-NEXT:  entry:83; CHECK-NEXT:    br label [[BB1:%.*]]84; CHECK:       bb1:85; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 886; CHECK-NEXT:    store i32 0, ptr [[A]], align 487; CHECK-NEXT:    ret void88;89entry:90  %a = load ptr, ptr %p, !nonnull !091  br label %bb192 93bb1:94  %b = load ptr, ptr %p, !noundef !195  store i32 0, ptr %a96  store i32 0, ptr %b97  ret void98}99 100define void @combine_metadata_dominance5(ptr %p) {101; CHECK-LABEL: define void @combine_metadata_dominance5102; CHECK-SAME: (ptr [[P:%.*]]) {103; CHECK-NEXT:  entry:104; CHECK-NEXT:    br label [[BB1:%.*]]105; CHECK:       bb1:106; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 8, !align !1107; CHECK-NEXT:    store i32 0, ptr [[A]], align 4108; CHECK-NEXT:    ret void109;110entry:111  %a = load ptr, ptr %p, !align !2112  br label %bb1113 114bb1:115  %b = load ptr, ptr %p, !align !3116  store i32 0, ptr %a117  store i32 0, ptr %b118  ret void119}120 121define void @combine_metadata_dominance6(ptr %p) {122; CHECK-LABEL: define void @combine_metadata_dominance6123; CHECK-SAME: (ptr [[P:%.*]]) {124; CHECK-NEXT:  entry:125; CHECK-NEXT:    br label [[BB1:%.*]]126; CHECK:       bb1:127; CHECK-NEXT:    [[A:%.*]] = load ptr, ptr [[P]], align 8, !align !2, !noundef !0128; CHECK-NEXT:    store i32 0, ptr [[A]], align 4129; CHECK-NEXT:    ret void130;131entry:132  %a = load ptr, ptr %p, !align !2, !noundef !1133  br label %bb1134 135bb1:136  %b = load ptr, ptr %p, !align !3137  store i32 0, ptr %a138  store i32 0, ptr %b139  ret void140}141 142!0 = !{}143!1 = !{}144!2 = !{i64 8}145!3 = !{i64 4}146;.147; CHECK: attributes #[[ATTR0:[0-9]+]] = { memory(read) }148;.149; CHECK: [[META0:![0-9]+]] = !{}150; CHECK: [[META1:![0-9]+]] = !{i64 4}151; CHECK: [[META2:![0-9]+]] = !{i64 8}152;.153