100 lines · plain
1; RUN: opt < %s -passes=gvn-sink -S | FileCheck %s2 3; Check that nonnull metadata for non-dominating loads is not propagated.4; CHECK-LABEL: @test1(5; CHECK-LABEL: if.end:6; CHECK: %[[ptr:.*]] = phi ptr7; CHECK: %[[load:.*]] = load ptr, ptr %[[ptr]]8; CHECK-NOT: !nonnull9; CHECK: ret ptr %[[load]]10define ptr @test1(i1 zeroext %flag, ptr %p) {11entry:12 br i1 %flag, label %if.then, label %if.else13 14if.then:15 %a = load ptr, ptr %p16 %aa = load ptr, ptr %a, !nonnull !017 br label %if.end18 19if.else:20 %b = load ptr, ptr %p21 %bb= load ptr, ptr %b22 br label %if.end23 24if.end:25 %c = phi ptr [ %aa, %if.then ], [ %bb, %if.else ]26 ret ptr %c27}28 29; CHECK-LABEL: @test2(30; CHECK-LABEL: if.end:31; CHECK: %[[ptr:.*]] = phi ptr32; CHECK: %[[load:.*]] = load ptr, ptr %[[ptr]]33; CHECK-NOT: !nonnull34; CHECK: ret ptr %[[load]]35define ptr @test2(i1 zeroext %flag, ptr %p) {36entry:37 br i1 %flag, label %if.then, label %if.else38 39if.then:40 %a = load ptr, ptr %p41 %aa = load ptr, ptr %a42 br label %if.end43 44if.else:45 %b = load ptr, ptr %p46 %bb= load ptr, ptr %b, !nonnull !047 br label %if.end48 49if.end:50 %c = phi ptr [ %aa, %if.then ], [ %bb, %if.else ]51 ret ptr %c52}53 54; Check that nontemporal markings are propagated if both original stores are55; marked.56; CHECK-LABEL: @nontemporal(57; CHECK-LABEL: if.end:58; CHECK: !nontemporal59; CHECK: ret void60define void @nontemporal(i1 zeroext %flag, ptr %p) {61entry:62 br i1 %flag, label %if.then, label %if.else63 64if.then:65 %a = load ptr, ptr %p66 store ptr %p, ptr %a, align 8, !nontemporal !167 br label %if.end68 69if.else:70 %b = load ptr, ptr %p71 store ptr %p, ptr %b, align 8, !nontemporal !172 br label %if.end73 74if.end:75 ret void76}77 78; CHECK-LABEL: @nontemporal_mismatch(79; CHECK-NOT: !nontemporal80define void @nontemporal_mismatch(i1 zeroext %flag, ptr %p) {81entry:82 br i1 %flag, label %if.then, label %if.else83 84if.then:85 %a = load ptr, ptr %p86 store ptr %p, ptr %a, align 887 br label %if.end88 89if.else:90 %b = load ptr, ptr %p91 store ptr %p, ptr %b, align 8, !nontemporal !192 br label %if.end93 94if.end:95 ret void96}97 98!0 = !{}99!1 = !{i32 1}100