89 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=ipsccp %s | FileCheck %s3 4declare void @use(i1)5 6define i1 @test1(i64 %x) {7; CHECK-LABEL: @test1(8; CHECK-NEXT: entry:9; CHECK-NEXT: [[COND:%.*]] = icmp ugt i64 [[X:%.*]], 6553510; CHECK-NEXT: call void @llvm.assume(i1 [[COND]])11; CHECK-NEXT: [[MASK:%.*]] = and i64 [[X]], -6552112; CHECK-NEXT: ret i1 false13;14entry:15 %cond = icmp ugt i64 %x, 6553516 call void @llvm.assume(i1 %cond)17 %mask = and i64 %x, -6552118 %cmp = icmp eq i64 %mask, 019 ret i1 %cmp20}21 22define void @test.and(i64 %x, i64 %y) {23; CHECK-LABEL: @test.and(24; CHECK-NEXT: entry:25; CHECK-NEXT: [[C0:%.*]] = icmp uge i64 [[X:%.*]], 13826; CHECK-NEXT: [[C1:%.*]] = icmp ule i64 [[X]], 16127; CHECK-NEXT: call void @llvm.assume(i1 [[C0]])28; CHECK-NEXT: call void @llvm.assume(i1 [[C1]])29; CHECK-NEXT: [[C2:%.*]] = icmp uge i64 [[Y:%.*]], 18630; CHECK-NEXT: [[C3:%.*]] = icmp ule i64 [[Y]], 18831; CHECK-NEXT: call void @llvm.assume(i1 [[C2]])32; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])33; CHECK-NEXT: [[AND:%.*]] = and i64 [[X]], [[Y]]34; CHECK-NEXT: call void @use(i1 false)35; CHECK-NEXT: [[R1:%.*]] = icmp ult i64 [[AND]], 13736; CHECK-NEXT: call void @use(i1 [[R1]])37; CHECK-NEXT: ret void38;39entry:40 %c0 = icmp uge i64 %x, 138 ; 0b1000101041 %c1 = icmp ule i64 %x, 161 ; 0b1010000042 call void @llvm.assume(i1 %c0)43 call void @llvm.assume(i1 %c1)44 %c2 = icmp uge i64 %y, 186 ; 0b1011101045 %c3 = icmp ule i64 %y, 188 ; 0b1011111046 call void @llvm.assume(i1 %c2)47 call void @llvm.assume(i1 %c3)48 %and = and i64 %x, %y49 %r0 = icmp ult i64 %and, 136 ; 0b1000100050 call void @use(i1 %r0) ; false51 %r1 = icmp ult i64 %and, 13752 call void @use(i1 %r1) ; unknown53 ret void54}55 56define void @test.or(i64 %x, i64 %y) {57; CHECK-LABEL: @test.or(58; CHECK-NEXT: entry:59; CHECK-NEXT: [[C0:%.*]] = icmp ule i64 [[X:%.*]], 11760; CHECK-NEXT: [[C1:%.*]] = icmp uge i64 [[X]], 9561; CHECK-NEXT: call void @llvm.assume(i1 [[C0]])62; CHECK-NEXT: call void @llvm.assume(i1 [[C1]])63; CHECK-NEXT: [[C2:%.*]] = icmp ule i64 [[Y:%.*]], 6964; CHECK-NEXT: [[C3:%.*]] = icmp uge i64 [[Y]], 6765; CHECK-NEXT: call void @llvm.assume(i1 [[C2]])66; CHECK-NEXT: call void @llvm.assume(i1 [[C3]])67; CHECK-NEXT: [[OR:%.*]] = or i64 [[X]], [[Y]]68; CHECK-NEXT: call void @use(i1 false)69; CHECK-NEXT: [[R1:%.*]] = icmp ugt i64 [[OR]], 11870; CHECK-NEXT: call void @use(i1 [[R1]])71; CHECK-NEXT: ret void72;73entry:74 %c0 = icmp ule i64 %x, 117 ; 0b0111010175 %c1 = icmp uge i64 %x, 95 ; 0b0101111176 call void @llvm.assume(i1 %c0)77 call void @llvm.assume(i1 %c1)78 %c2 = icmp ule i64 %y, 69 ; 0b0100010179 %c3 = icmp uge i64 %y, 67 ; 0b0100001180 call void @llvm.assume(i1 %c2)81 call void @llvm.assume(i1 %c3)82 %or = or i64 %x, %y83 %r0 = icmp ugt i64 %or, 119 ; 0b0111011184 call void @use(i1 %r0) ; false85 %r1 = icmp ugt i64 %or, 11886 call void @use(i1 %r1) ; unknown87 ret void88}89