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