xref: /llvm-project/llvm/test/Transforms/SCCP/assume.ll (revision 0991da36906bdb29b8f1030d5123bafb58fee79e)
19dfea035SNikita Popov; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
28ebb3eacSBjorn Pettersson; RUN: opt < %s -passes=ipsccp -S | FileCheck %s
39dfea035SNikita Popov
49dfea035SNikita Popovdeclare void @use(i1)
59dfea035SNikita Popovdeclare void @llvm.assume(i1)
69dfea035SNikita Popov
79dfea035SNikita Popovdefine void @basic(i32 %v) {
89dfea035SNikita Popov; CHECK-LABEL: @basic(
99dfea035SNikita Popov; CHECK-NEXT:    [[A1:%.*]] = icmp ult i32 [[V:%.*]], 10
109dfea035SNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[A1]])
119dfea035SNikita Popov; CHECK-NEXT:    [[A2:%.*]] = icmp ugt i32 [[V]], 5
129dfea035SNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[A2]])
139dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 true)
149dfea035SNikita Popov; CHECK-NEXT:    [[C2:%.*]] = icmp ult i32 [[V]], 9
159dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 [[C2]])
169dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 false)
179dfea035SNikita Popov; CHECK-NEXT:    [[C4:%.*]] = icmp ugt i32 [[V]], 8
189dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 [[C4]])
199dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 true)
209dfea035SNikita Popov; CHECK-NEXT:    [[C6:%.*]] = icmp ugt i32 [[V]], 6
219dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 [[C6]])
229dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 false)
239dfea035SNikita Popov; CHECK-NEXT:    [[C8:%.*]] = icmp ult i32 [[V]], 7
249dfea035SNikita Popov; CHECK-NEXT:    call void @use(i1 [[C8]])
259dfea035SNikita Popov; CHECK-NEXT:    ret void
269dfea035SNikita Popov;
279dfea035SNikita Popov  %a1 = icmp ult i32 %v, 10
289dfea035SNikita Popov  call void @llvm.assume(i1 %a1)
299dfea035SNikita Popov  %a2 = icmp ugt i32 %v, 5
309dfea035SNikita Popov  call void @llvm.assume(i1 %a2)
319dfea035SNikita Popov  %c1 = icmp ult i32 %v, 10
329dfea035SNikita Popov  call void @use(i1 %c1)
339dfea035SNikita Popov  %c2 = icmp ult i32 %v, 9
349dfea035SNikita Popov  call void @use(i1 %c2)
359dfea035SNikita Popov  %c3 = icmp ugt i32 %v, 9
369dfea035SNikita Popov  call void @use(i1 %c3)
379dfea035SNikita Popov  %c4 = icmp ugt i32 %v, 8
389dfea035SNikita Popov  call void @use(i1 %c4)
399dfea035SNikita Popov  %c5 = icmp ugt i32 %v, 5
409dfea035SNikita Popov  call void @use(i1 %c5)
419dfea035SNikita Popov  %c6 = icmp ugt i32 %v, 6
429dfea035SNikita Popov  call void @use(i1 %c6)
439dfea035SNikita Popov  %c7 = icmp ult i32 %v, 6
449dfea035SNikita Popov  call void @use(i1 %c7)
459dfea035SNikita Popov  %c8 = icmp ult i32 %v, 7
469dfea035SNikita Popov  call void @use(i1 %c8)
479dfea035SNikita Popov  ret void
489dfea035SNikita Popov}
49f4199b8fSNikita Popov
50*0991da36SNikita Popovdefine void @nonnull(ptr %v) {
51f4199b8fSNikita Popov; CHECK-LABEL: @nonnull(
52*0991da36SNikita Popov; CHECK-NEXT:    [[A:%.*]] = icmp ne ptr [[V:%.*]], null
53f4199b8fSNikita Popov; CHECK-NEXT:    call void @llvm.assume(i1 [[A]])
5445649745SNikita Popov; CHECK-NEXT:    call void @use(i1 false)
5545649745SNikita Popov; CHECK-NEXT:    call void @use(i1 true)
5645649745SNikita Popov; CHECK-NEXT:    call void @use(i1 false)
5745649745SNikita Popov; CHECK-NEXT:    call void @use(i1 true)
58f4199b8fSNikita Popov; CHECK-NEXT:    ret void
59f4199b8fSNikita Popov;
60*0991da36SNikita Popov  %a = icmp ne ptr %v, null
61f4199b8fSNikita Popov  call void @llvm.assume(i1 %a)
62*0991da36SNikita Popov  %c1 = icmp eq ptr %v, null
63f4199b8fSNikita Popov  call void @use(i1 %c1)
64*0991da36SNikita Popov  %c2 = icmp ne ptr %v, null
65f4199b8fSNikita Popov  call void @use(i1 %c2)
66*0991da36SNikita Popov  %c3 = icmp eq ptr null, %v
67f4199b8fSNikita Popov  call void @use(i1 %c3)
68*0991da36SNikita Popov  %c4 = icmp ne ptr null, %v
69f4199b8fSNikita Popov  call void @use(i1 %c4)
70f4199b8fSNikita Popov  ret void
71f4199b8fSNikita Popov}
72