143 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt -S -passes=correlated-propagation %s | FileCheck %s3 4declare void @use(i1)5 6define void @ctpop1(i8 %v) {7; CHECK-LABEL: define void @ctpop1(8; CHECK-SAME: i8 [[V:%.*]]) {9; CHECK-NEXT: [[ENTRY:.*:]]10; CHECK-NEXT: [[RES:%.*]] = call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 [[V]])11; CHECK-NEXT: [[C0_0:%.*]] = icmp samesign uge i8 [[RES]], 312; CHECK-NEXT: [[C0_1:%.*]] = icmp samesign ule i8 [[RES]], 713; CHECK-NEXT: [[C0:%.*]] = and i1 [[C0_0]], [[C0_1]]14; CHECK-NEXT: br i1 [[C0]], label %[[RANGE_3_8:.*]], label %[[ED:.*]]15; CHECK: [[RANGE_3_8]]:16; CHECK-NEXT: call void @use(i1 true)17; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i8 [[V]], 818; CHECK-NEXT: call void @use(i1 [[CMP1]])19; CHECK-NEXT: call void @use(i1 true)20; CHECK-NEXT: [[CMP3:%.*]] = icmp ule i8 [[V]], -321; CHECK-NEXT: call void @use(i1 [[CMP3]])22; CHECK-NEXT: ret void23; CHECK: [[ED]]:24; CHECK-NEXT: ret void25;26entry:27 %res = call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 %v)28 %c0.0 = icmp uge i8 %res, 329 %c0.1 = icmp ule i8 %res, 730 %c0 = and i1 %c0.0, %c0.131 br i1 %c0, label %range.3.8, label %ed32 33range.3.8:34 %cmp0 = icmp uge i8 %v, 735 call void @use(i1 %cmp0) ; true36 %cmp1 = icmp uge i8 %v, 837 call void @use(i1 %cmp1) ; unknown38 %cmp2 = icmp ule i8 %v, 25439 call void @use(i1 %cmp2) ; true40 %cmp3 = icmp ule i8 %v, 25341 call void @use(i1 %cmp3) ; unknown42 ret void43 44ed:45 ret void46}47 48define void @ctpop2(i8 %v) {49; CHECK-LABEL: define void @ctpop2(50; CHECK-SAME: i8 [[V:%.*]]) {51; CHECK-NEXT: [[ENTRY:.*:]]52; CHECK-NEXT: [[RES:%.*]] = call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 [[V]])53; CHECK-NEXT: [[C2_0:%.*]] = icmp samesign uge i8 [[RES]], 154; CHECK-NEXT: [[C2_1:%.*]] = icmp samesign ule i8 [[RES]], 455; CHECK-NEXT: [[C2:%.*]] = and i1 [[C2_0]], [[C2_1]]56; CHECK-NEXT: br i1 [[C2]], label %[[RANGE_1_5:.*]], label %[[ED:.*]]57; CHECK: [[RANGE_1_5]]:58; CHECK-NEXT: call void @use(i1 true)59; CHECK-NEXT: [[CMP9:%.*]] = icmp uge i8 [[V]], 260; CHECK-NEXT: call void @use(i1 [[CMP9]])61; CHECK-NEXT: call void @use(i1 true)62; CHECK-NEXT: [[CMP11:%.*]] = icmp ule i8 [[V]], -1763; CHECK-NEXT: call void @use(i1 [[CMP11]])64; CHECK-NEXT: ret void65; CHECK: [[ED]]:66; CHECK-NEXT: ret void67;68entry:69 %res = call range(i8 0, 9) i8 @llvm.ctpop.i8(i8 %v)70 %c2.0 = icmp uge i8 %res, 171 %c2.1 = icmp ule i8 %res, 472 %c2 = and i1 %c2.0, %c2.173 br i1 %c2, label %range.1.5, label %ed74 75range.1.5:76 %cmp8 = icmp uge i8 %v, 177 call void @use(i1 %cmp8) ; true78 %cmp9 = icmp uge i8 %v, 279 call void @use(i1 %cmp9) ; unknown80 %cmp10 = icmp ule i8 %v, 24081 call void @use(i1 %cmp10) ; true82 %cmp11 = icmp ule i8 %v, 23983 call void @use(i1 %cmp11) ; unknown84 ret void85 86ed:87 ret void88}89 90define void @ctpop3(i8 %v) {91; CHECK-LABEL: define void @ctpop3(92; CHECK-SAME: i8 [[V:%.*]]) {93; CHECK-NEXT: [[ENTRY:.*:]]94; CHECK-NEXT: [[RES:%.*]] = call i8 @llvm.ctpop.i8(i8 [[V]])95; CHECK-NEXT: [[C3:%.*]] = icmp samesign uge i8 [[RES]], 896; CHECK-NEXT: br i1 [[C3]], label %[[RANGE_8_9:.*]], label %[[ED:.*]]97; CHECK: [[RANGE_8_9]]:98; CHECK-NEXT: call void @use(i1 true)99; CHECK-NEXT: ret void100; CHECK: [[ED]]:101; CHECK-NEXT: ret void102;103entry:104 %res = call i8 @llvm.ctpop.i8(i8 %v)105 %c3 = icmp uge i8 %res, 8106 br i1 %c3, label %range.8.9, label %ed107 108range.8.9:109 %cmp4 = icmp eq i8 %v, -1110 call void @use(i1 %cmp4) ; true111 ret void112 113ed:114 ret void115}116 117define void @ctpop4(i8 %v) {118; CHECK-LABEL: define void @ctpop4(119; CHECK-SAME: i8 [[V:%.*]]) {120; CHECK-NEXT: [[TEST4:.*:]]121; CHECK-NEXT: [[RES:%.*]] = call i8 @llvm.ctpop.i8(i8 [[V]])122; CHECK-NEXT: [[C4:%.*]] = icmp eq i8 [[RES]], 0123; CHECK-NEXT: br i1 [[C4]], label %[[RANGE_0_1:.*]], label %[[ED:.*]]124; CHECK: [[RANGE_0_1]]:125; CHECK-NEXT: call void @use(i1 true)126; CHECK-NEXT: ret void127; CHECK: [[ED]]:128; CHECK-NEXT: ret void129;130test4:131 %res = call i8 @llvm.ctpop.i8(i8 %v)132 %c4 = icmp eq i8 %res, 0133 br i1 %c4, label %range.0.1, label %ed134 135range.0.1:136 %cmp5 = icmp eq i8 %v, 0137 call void @use(i1 %cmp5) ; true138 ret void139 140ed:141 ret void142}143