| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-inst-comments |
| ; RUN: opt -S -passes=print-predicateinfo %s 2>&1 >/dev/null | FileCheck %s |
| |
| declare void @use(i1) |
| |
| define void @nonnull0(ptr %v) { |
| ; CHECK-LABEL: @nonnull0( |
| ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[V:%.*]]) ] |
| ; CHECK-NEXT: ret void |
| ; |
| call void @llvm.assume(i1 true) [ "nonnull"(ptr %v) ] |
| ret void |
| } |
| |
| define void @nonnull1(ptr %v) { |
| ; CHECK-LABEL: @nonnull1( |
| ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[V:%.*]]) ] |
| ; CHECK-NEXT: ; assume predicate info { Attribute: nonnull, RenamedOp: [[V]] } |
| ; CHECK-NEXT: [[TMP1:%.*]] = bitcast ptr [[V]] to ptr |
| ; CHECK-NEXT: [[C1:%.*]] = icmp eq ptr [[TMP1]], null |
| ; CHECK-NEXT: call void @use(i1 [[C1]]) |
| ; CHECK-NEXT: ret void |
| ; |
| call void @llvm.assume(i1 true) [ "nonnull"(ptr %v) ] |
| %c1 = icmp eq ptr %v, null |
| call void @use(i1 %c1) |
| ret void |
| } |
| |
| define void @nonnull2(ptr %v, ptr %w) { |
| ; CHECK-LABEL: @nonnull2( |
| ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[V:%.*]]), "nonnull"(ptr [[W:%.*]]) ] |
| ; CHECK-NEXT: ; assume predicate info { Attribute: nonnull, RenamedOp: [[W]] } |
| ; CHECK-NEXT: [[TMP1:%.*]] = bitcast ptr [[W]] to ptr |
| ; CHECK-NEXT: ; assume predicate info { Attribute: nonnull, RenamedOp: [[V]] } |
| ; CHECK-NEXT: [[TMP2:%.*]] = bitcast ptr [[V]] to ptr |
| ; CHECK-NEXT: [[C1:%.*]] = icmp eq ptr [[TMP2]], null |
| ; CHECK-NEXT: call void @use(i1 [[C1]]) |
| ; CHECK-NEXT: [[C2:%.*]] = icmp eq ptr [[TMP1]], null |
| ; CHECK-NEXT: call void @use(i1 [[C2]]) |
| ; CHECK-NEXT: ret void |
| ; |
| call void @llvm.assume(i1 true) [ "nonnull"(ptr %v), "nonnull"(ptr %w) ] |
| %c1 = icmp eq ptr %v, null |
| call void @use(i1 %c1) |
| %c2 = icmp eq ptr %w, null |
| call void @use(i1 %c2) |
| ret void |
| } |
| |
| define void @nonnull3(ptr %v) { |
| ; CHECK-LABEL: @nonnull3( |
| ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[V:%.*]]) ] |
| ; CHECK-NEXT: ; assume predicate info { Attribute: nonnull, RenamedOp: [[V]] } |
| ; CHECK-NEXT: [[TMP1:%.*]] = bitcast ptr [[V]] to ptr |
| ; CHECK-NEXT: call void @llvm.assume(i1 true) [ "nonnull"(ptr [[TMP1]]) ] |
| ; CHECK-NEXT: ; assume predicate info { Attribute: nonnull, RenamedOp: [[TMP1]] } |
| ; CHECK-NEXT: [[TMP2:%.*]] = bitcast ptr [[TMP1]] to ptr |
| ; CHECK-NEXT: [[C1:%.*]] = icmp eq ptr [[TMP2]], null |
| ; CHECK-NEXT: call void @use(i1 [[C1]]) |
| ; CHECK-NEXT: ret void |
| ; |
| call void @llvm.assume(i1 true) [ "nonnull"(ptr %v) ] |
| call void @llvm.assume(i1 true) [ "nonnull"(ptr %v) ] |
| %c1 = icmp eq ptr %v, null |
| call void @use(i1 %c1) |
| ret void |
| } |