199 lines · plain
1; RUN: opt -S -disable-output -passes="print<demanded-bits>" < %s 2>&1 | FileCheck %s2 3define i8 @test_lshr_const_amount_4(i32 %a) {4; CHECK-LABEL: 'test_lshr_const_amount_4'5; CHECK-DAG: DemandedBits: 0xff for %lshr.t = trunc i32 %lshr to i86; CHECK-DAG: DemandedBits: 0xff for %lshr in %lshr.t = trunc i32 %lshr to i87; CHECK-DAG: DemandedBits: 0xff for %lshr = lshr i32 %a, 48; CHECK-DAG: DemandedBits: 0xff0 for %a in %lshr = lshr i32 %a, 49; CHECK-DAG: DemandedBits: 0xffffffff for 4 in %lshr = lshr i32 %a, 410;11 %lshr = lshr i32 %a, 412 %lshr.t = trunc i32 %lshr to i813 ret i8 %lshr.t14}15 16define i8 @test_lshr_const_amount_5(i32 %a) {17; CHECK-LABEL: 'test_lshr_const_amount_5'18; CHECK-DAG: DemandedBits: 0xff for %lshr = lshr i32 %a, 519; CHECK-DAG: DemandedBits: 0x1fe0 for %a in %lshr = lshr i32 %a, 520; CHECK-DAG: DemandedBits: 0xffffffff for 5 in %lshr = lshr i32 %a, 521; CHECK-DAG: DemandedBits: 0xff for %lshr.t = trunc i32 %lshr to i822; CHECK-DAG: DemandedBits: 0xff for %lshr in %lshr.t = trunc i32 %lshr to i823;24 %lshr = lshr i32 %a, 525 %lshr.t = trunc i32 %lshr to i826 ret i8 %lshr.t27}28define i8 @test_lshr_const_amount_8(i32 %a) {29; CHECK-LABEL: 'test_lshr_const_amount_8'30; CHECK-DAG: DemandedBits: 0xff for %lshr.t = trunc i32 %lshr to i831; CHECK-DAG: DemandedBits: 0xff for %lshr in %lshr.t = trunc i32 %lshr to i832; CHECK-DAG: DemandedBits: 0xff for %lshr = lshr i32 %a, 833; CHECK-DAG: DemandedBits: 0xff00 for %a in %lshr = lshr i32 %a, 834; CHECK-DAG: DemandedBits: 0xffffffff for 8 in %lshr = lshr i32 %a, 835;36 %lshr = lshr i32 %a, 837 %lshr.t = trunc i32 %lshr to i838 ret i8 %lshr.t39}40 41define i8 @test_lshr_const_amount_9(i32 %a) {42; CHECK-LABEL: 'test_lshr_const_amount_9'43; CHECK-DAG: DemandedBits: 0xff for %lshr.t = trunc i32 %lshr to i844; CHECK-DAG: DemandedBits: 0xff for %lshr in %lshr.t = trunc i32 %lshr to i845; CHECK-DAG: DemandedBits: 0xff for %lshr = lshr i32 %a, 946; CHECK-DAG: DemandedBits: 0x1fe00 for %a in %lshr = lshr i32 %a, 947; CHECK-DAG: DemandedBits: 0xffffffff for 9 in %lshr = lshr i32 %a, 948;49 %lshr = lshr i32 %a, 950 %lshr.t = trunc i32 %lshr to i851 ret i8 %lshr.t52}53 54define i8 @test_lshr(i32 %a, i32 %b) {55; CHECK-LABEL: 'test_lshr'56; CHECK-DAG: DemandedBits: 0xff for %lshr = lshr i32 %a, %b57; CHECK-DAG: DemandedBits: 0xffffffff for %a in %lshr = lshr i32 %a, %b58; CHECK-DAG: DemandedBits: 0xffffffff for %b in %lshr = lshr i32 %a, %b59; CHECK-DAG: DemandedBits: 0xff for %lshr.t = trunc i32 %lshr to i860; CHECK-DAG: DemandedBits: 0xff for %lshr in %lshr.t = trunc i32 %lshr to i861;62 %lshr = lshr i32 %a, %b63 %lshr.t = trunc i32 %lshr to i864 ret i8 %lshr.t65}66 67define i8 @test_lshr_range_1(i32 %a, i32 %b) {68; CHECK-LABEL: 'test_lshr_range_1'69; CHECK-DAG: DemandedBits: 0xff for %shl.t = trunc i32 %lshr to i870; CHECK-DAG: DemandedBits: 0xff for %lshr in %shl.t = trunc i32 %lshr to i871; CHECK-DAG: DemandedBits: 0xff for %lshr = lshr i32 %a, %b272; CHECK-DAG: DemandedBits: 0x7ff for %a in %lshr = lshr i32 %a, %b273; CHECK-DAG: DemandedBits: 0xffffffff for %b2 in %lshr = lshr i32 %a, %b274; CHECK-DAG: DemandedBits: 0xffffffff for %b2 = and i32 %b, 375; CHECK-DAG: DemandedBits: 0x3 for %b in %b2 = and i32 %b, 376; CHECK-DAG: DemandedBits: 0xffffffff for 3 in %b2 = and i32 %b, 377;78 %b2 = and i32 %b, 379 %lshr = lshr i32 %a, %b280 %shl.t = trunc i32 %lshr to i881 ret i8 %shl.t82}83 84define i32 @test_lshr_range_2(i32 %a, i32 %b) {85; CHECK-LABEL: 'test_lshr_range_2'86; CHECK-DAG: DemandedBits: 0xffffffff for %lshr = lshr i32 %a, %b287; CHECK-DAG: DemandedBits: 0xffffffff for %a in %lshr = lshr i32 %a, %b288; CHECK-DAG: DemandedBits: 0xffffffff for %b2 in %lshr = lshr i32 %a, %b289; CHECK-DAG: DemandedBits: 0xffffffff for %b2 = and i32 %b, 390; CHECK-DAG: DemandedBits: 0x3 for %b in %b2 = and i32 %b, 391; CHECK-DAG: DemandedBits: 0xffffffff for 3 in %b2 = and i32 %b, 392;93 %b2 = and i32 %b, 394 %lshr = lshr i32 %a, %b295 ret i32 %lshr96}97 98define i32 @test_lshr_range_3(i32 %a, i32 %b) {99; CHECK-LABEL: 'test_lshr_range_3'100; CHECK-DAG: DemandedBits: 0xffff for %lshr = lshr i32 %a, %b101; CHECK-DAG: DemandedBits: 0xffffffff for %a in %lshr = lshr i32 %a, %b102; CHECK-DAG: DemandedBits: 0xffffffff for %b in %lshr = lshr i32 %a, %b103; CHECK-DAG: DemandedBits: 0xffffffff for %shl = shl i32 %lshr, 16104; CHECK-DAG: DemandedBits: 0xffff for %lshr in %shl = shl i32 %lshr, 16105; CHECK-DAG: DemandedBits: 0xffffffff for 16 in %shl = shl i32 %lshr, 16106;107 %lshr = lshr i32 %a, %b108 %shl = shl i32 %lshr, 16109 ret i32 %shl110}111 112define i32 @test_lshr_range_4(i32 %a, i32 %b) {113; CHECK-LABEL: 'test_lshr_range_4'114; CHECK-DAG: DemandedBits: 0xffffff00 for %lshr = lshr i32 %a, %b115; CHECK-DAG: DemandedBits: 0xffffff00 for %a in %lshr = lshr i32 %a, %b116; CHECK-DAG: DemandedBits: 0xffffffff for %b in %lshr = lshr i32 %a, %b117; CHECK-DAG: DemandedBits: 0xffffffff for %shr = ashr i32 %lshr, 8118; CHECK-DAG: DemandedBits: 0xffffff00 for %lshr in %shr = ashr i32 %lshr, 8119; CHECK-DAG: DemandedBits: 0xffffffff for 8 in %shr = ashr i32 %lshr, 8120 %lshr = lshr i32 %a, %b121 %shr = ashr i32 %lshr, 8122 ret i32 %shr123}124 125define i32 @test_lshr_range_5(i32 %a, i32 %b) {126; CHECK-LABEL: 'test_lshr_range_5'127; CHECK-DAG: DemandedBits: 0xff for %1 = lshr i32 %a, %b128; CHECK-DAG: DemandedBits: 0xffffffff for %a in %1 = lshr i32 %a, %b129; CHECK-DAG: DemandedBits: 0xffffffff for %b in %1 = lshr i32 %a, %b130; CHECK-DAG: DemandedBits: 0xffffffff for %2 = and i32 %1, 255131; CHECK-DAG: DemandedBits: 0xff for %1 in %2 = and i32 %1, 255132; CHECK-DAG: DemandedBits: 0xffffffff for 255 in %2 = and i32 %1, 255133;134 %1 = lshr i32 %a, %b135 %2 = and i32 %1, 255136 ret i32 %2137}138 139define i32 @test_lshr_range_6(i32 %a, i32 %b) {140; CHECK-LABEL: 'test_lshr_range_6'141; CHECK-DAG: DemandedBits: 0xffff0000 for %lshr.1 = lshr i32 %a, %b142; CHECK-DAG: DemandedBits: 0xffff0000 for %a in %lshr.1 = lshr i32 %a, %b143; CHECK-DAG: DemandedBits: 0xffffffff for %b in %lshr.1 = lshr i32 %a, %b144; CHECK-DAG: DemandedBits: 0xffffffff for %lshr.2 = lshr i32 %lshr.1, 16145; CHECK-DAG: DemandedBits: 0xffff0000 for %lshr.1 in %lshr.2 = lshr i32 %lshr.1, 16146; CHECK-DAG: DemandedBits: 0xffffffff for 16 in %lshr.2 = lshr i32 %lshr.1, 16147;148 %lshr.1 = lshr i32 %a, %b149 %lshr.2 = lshr i32 %lshr.1, 16150 ret i32 %lshr.2151}152 153 154define i8 @test_lshr_var_amount(i32 %a, i32 %b){155; CHECK-LABEL: 'test_lshr_var_amount'156; CHECK-DAG: DemandedBits: 0xff for %4 = lshr i32 %1, %3157; CHECK-DAG: DemandedBits: 0xffffffff for %1 in %4 = lshr i32 %1, %3158; CHECK-DAG: DemandedBits: 0xffffffff for %3 in %4 = lshr i32 %1, %3159; CHECK-DAG: DemandedBits: 0xff for %5 = trunc i32 %4 to i8160; CHECK-DAG: DemandedBits: 0xff for %4 in %5 = trunc i32 %4 to i8161; CHECK-DAG: DemandedBits: 0xffffffff for %3 = zext i8 %2 to i32162; CHECK-DAG: DemandedBits: 0xff for %2 in %3 = zext i8 %2 to i32163; CHECK-DAG: DemandedBits: 0xffffffff for %1 = add nsw i32 %a, %b164; CHECK-DAG: DemandedBits: 0xffffffff for %a in %1 = add nsw i32 %a, %b165; CHECK-DAG: DemandedBits: 0xffffffff for %b in %1 = add nsw i32 %a, %b166; CHECK-DAG: DemandedBits: 0xff for %2 = trunc i32 %1 to i8167; CHECK-DAG: DemandedBits: 0xff for %1 in %2 = trunc i32 %1 to i8168;169 %1 = add nsw i32 %a, %b170 %2 = trunc i32 %1 to i8171 %3 = zext i8 %2 to i32172 %4 = lshr i32 %1, %3173 %5 = trunc i32 %4 to i8174 ret i8 %5175}176 177define i8 @test_lshr_var_amount_exact(i32 %a, i32 %b){178 ; CHECK-LABEL 'test_lshr_var_amount_nsw'179 ; CHECK-DAG: DemandedBits: 0xffffffff for %1 = add nsw i32 %a, %b180 ; CHECK-DAG: DemandedBits: 0xffffffff for %a in %1 = add nsw i32 %a, %b181 ; CHECK-DAG: DemandedBits: 0xffffffff for %b in %1 = add nsw i32 %a, %b182 ; CHECK-DAG: DemandedBits: 0xff for %2 = trunc i32 %1 to i8183 ; CHECK-DAG: DemandedBits: 0xff for %1 in %2 = trunc i32 %1 to i8184 ; CHECK-DAG: DemandedBits: 0xffffffff for %3 = zext i8 %2 to i32185 ; CHECK-DAG: DemandedBits: 0xff for %2 in %3 = zext i8 %2 to i32186 ; CHECK-DAG: DemandedBits: 0xff for %4 = lshr exact i32 %1, %3187 ; CHECK-DAG: DemandedBits: 0xffffffff for %1 in %4 = lshr exact i32 %1, %3188 ; CHECK-DAG: DemandedBits: 0xffffffff for %3 in %4 = lshr exact i32 %1, %3189 ; CHECK-DAG: DemandedBits: 0xff for %5 = trunc i32 %4 to i8190 ; CHECK-DAG: DemandedBits: 0xff for %4 in %5 = trunc i32 %4 to i8191 ;192 %1 = add nsw i32 %a, %b193 %2 = trunc i32 %1 to i8194 %3 = zext i8 %2 to i32195 %4 = lshr exact i32 %1, %3196 %5 = trunc i32 %4 to i8197 ret i8 %5198}199