blob: ab23d3354da66582d5d45310435976ee2b46e569 [file] [edit]
; 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
}