1; RUN: opt -S -demanded-bits -analyze < %s | FileCheck %s
2
3; CHECK-LABEL: 'test_mul'
4; CHECK-DAG: DemandedBits: 0xFF for   %1 = add nsw i32 %a, 5
5; CHECK-DAG: DemandedBits: 0xFF for   %3 = trunc i32 %2 to i8
6; CHECK-DAG: DemandedBits: 0xFF for   %2 = mul nsw i32 %1, %b
7define i8 @test_mul(i32 %a, i32 %b) {
8  %1 = add nsw i32 %a, 5
9  %2 = mul nsw i32 %1, %b
10  %3 = trunc i32 %2 to i8
11  ret i8 %3
12}
13
14; CHECK-LABEL: 'test_icmp1'
15; CHECK-DAG: DemandedBits: 0x1 for   %3 = icmp eq i32 %1, %2
16; CHECK-DAG: DemandedBits: 0xFFF for   %1 = and i32 %a, 255
17; CHECK-DAG: DemandedBits: 0xFFF for   %2 = shl i32 %1, 4
18define i1 @test_icmp1(i32 %a, i32 %b) {
19  %1 = and i32 %a, 255
20  %2 = shl i32 %1, 4
21  %3 = icmp eq i32 %1, %2
22  ret i1 %3
23}
24
25; CHECK-LABEL: 'test_icmp2'
26; CHECK-DAG: DemandedBits: 0x1 for   %3 = icmp eq i32 %1, %2
27; CHECK-DAG: DemandedBits: 0xFF for   %1 = and i32 %a, 255
28; CHECK-DAG: DemandedBits: 0xF for   %2 = ashr i32 %1, 4
29define i1 @test_icmp2(i32 %a, i32 %b) {
30  %1 = and i32 %a, 255
31  %2 = ashr i32 %1, 4
32  %3 = icmp eq i32 %1, %2
33  ret i1 %3
34}
35