; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt -S -passes=instsimplify -opaque-pointers < %s | FileCheck %s declare void @zero_args() declare void @two_args(ptr, ptr) ; TODO: Could be non-null based on call-site attributes. define i1 @test_zero_args_nonnull(ptr %p) { ; CHECK-LABEL: @test_zero_args_nonnull( ; CHECK-NEXT: call void @zero_args(ptr noundef nonnull [[P:%.*]]) ; CHECK-NEXT: [[C:%.*]] = icmp ne ptr [[P]], null ; CHECK-NEXT: ret i1 [[C]] ; call void @zero_args(ptr nonnull noundef %p) %c = icmp ne ptr %p, null ret i1 %c } define i1 @test_zero_args_maybe_null(ptr %p) { ; CHECK-LABEL: @test_zero_args_maybe_null( ; CHECK-NEXT: call void @zero_args(ptr [[P:%.*]]) ; CHECK-NEXT: [[C:%.*]] = icmp ne ptr [[P]], null ; CHECK-NEXT: ret i1 [[C]] ; call void @zero_args(ptr %p) %c = icmp ne ptr %p, null ret i1 %c } ; TODO: Could be non-null based on call-site attributes. define i1 @test_two_args_nonnull(ptr %p) { ; CHECK-LABEL: @test_two_args_nonnull( ; CHECK-NEXT: call void @two_args(ptr noundef nonnull [[P:%.*]]) ; CHECK-NEXT: [[C:%.*]] = icmp ne ptr [[P]], null ; CHECK-NEXT: ret i1 [[C]] ; call void @two_args(ptr nonnull noundef %p) %c = icmp ne ptr %p, null ret i1 %c } define i1 @test_two_args_maybe_null(ptr %p) { ; CHECK-LABEL: @test_two_args_maybe_null( ; CHECK-NEXT: call void @two_args(ptr [[P:%.*]]) ; CHECK-NEXT: [[C:%.*]] = icmp ne ptr [[P]], null ; CHECK-NEXT: ret i1 [[C]] ; call void @two_args(ptr %p) %c = icmp ne ptr %p, null ret i1 %c }