brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.9 KiB · 1ca0b34 Raw
64 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4; InstCombine should mark null-checked argument as nonnull at callsite5declare void @dummy(ptr, i32)6 7define void @test(ptr %a, i32 %b) {8; CHECK-LABEL: @test(9; CHECK-NEXT:  entry:10; CHECK-NEXT:    [[COND1:%.*]] = icmp eq ptr [[A:%.*]], null11; CHECK-NEXT:    br i1 [[COND1]], label [[DEAD:%.*]], label [[NOT_NULL:%.*]]12; CHECK:       not_null:13; CHECK-NEXT:    [[COND2:%.*]] = icmp eq i32 [[B:%.*]], 014; CHECK-NEXT:    br i1 [[COND2]], label [[DEAD]], label [[NOT_ZERO:%.*]]15; CHECK:       not_zero:16; CHECK-NEXT:    call void @dummy(ptr nonnull [[A]], i32 [[B]])17; CHECK-NEXT:    ret void18; CHECK:       dead:19; CHECK-NEXT:    unreachable20;21entry:22  %cond1 = icmp eq ptr %a, null23  br i1 %cond1, label %dead, label %not_null24not_null:25  %cond2 = icmp eq i32 %b, 026  br i1 %cond2, label %dead, label %not_zero27not_zero:28  call void @dummy(ptr %a, i32 %b)29  ret void30dead:31  unreachable32}33 34; The nonnull attribute in the 'bar' declaration is35; propagated to the parameters of the 'baz' callsite.36 37declare void @bar(ptr, ptr nonnull noundef)38declare void @bar_without_noundef(ptr, ptr nonnull)39declare void @baz(ptr, ptr)40 41define void @deduce_nonnull_from_another_call(ptr %a, ptr %b) {42; CHECK-LABEL: @deduce_nonnull_from_another_call(43; CHECK-NEXT:    call void @bar(ptr [[A:%.*]], ptr [[B:%.*]])44; CHECK-NEXT:    call void @baz(ptr nonnull [[B]], ptr nonnull [[B]])45; CHECK-NEXT:    ret void46;47  call void @bar(ptr %a, ptr %b)48  call void @baz(ptr %b, ptr %b)49  ret void50}51 52 53define void @deduce_nonnull_from_another_call2(ptr %a, ptr %b) {54; CHECK-LABEL: @deduce_nonnull_from_another_call2(55; CHECK-NEXT:    call void @bar_without_noundef(ptr [[A:%.*]], ptr [[B:%.*]])56; CHECK-NEXT:    call void @baz(ptr [[B]], ptr [[B]])57; CHECK-NEXT:    ret void58;59  call void @bar_without_noundef(ptr %a, ptr %b)60  call void @baz(ptr %b, ptr %b)61  ret void62}63 64