42 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 22; RUN: opt -passes=inline < %s -S | FileCheck %s3 4; Test that instsimplify invoked by the inliner respects null_pointer_is_valid5; (by ensuring that the instruction is inserted into the function when invoking6; instsimplify).7 8define internal i1 @f(ptr %p) null_pointer_is_valid {9 %g = getelementptr inbounds i8, ptr %p, i32 -110 %r = icmp eq ptr %g, null11 ret i1 %r12}13 14define i1 @g(ptr %p) null_pointer_is_valid {15; CHECK-LABEL: define i1 @g16; CHECK-SAME: (ptr [[P:%.*]]) #[[ATTR0:[0-9]+]] {17; CHECK-NEXT: [[G_I:%.*]] = getelementptr inbounds i8, ptr [[P]], i32 -118; CHECK-NEXT: [[R_I:%.*]] = icmp eq ptr [[G_I]], null19; CHECK-NEXT: ret i1 [[R_I]]20;21 %r = call i1 @f(ptr %p)22 ret i1 %r23}24 25define internal i1 @f2(ptr %p) {26 %g = getelementptr inbounds i8, ptr %p, i32 -127 %r = icmp eq ptr %g, null28 ret i1 %r29}30 31define i1 @g2(ptr %p) null_pointer_is_valid {32; CHECK-LABEL: define i1 @g233; CHECK-SAME: (ptr [[P:%.*]]) #[[ATTR0]] {34; CHECK-NEXT: [[G_I:%.*]] = getelementptr inbounds i8, ptr [[P]], i32 -135; CHECK-NEXT: [[R_I:%.*]] = icmp eq ptr [[G_I]], null36; CHECK-NEXT: ret i1 [[R_I]]37;38 %r = call i1 @f2(ptr %p)39 ret i1 %r40}41 42