xref: /llvm-project/llvm/test/Analysis/DemandedBits/add.ll (revision 99b3b8e5b9ee234ab783a1f6079e1901bb1c9240)
125ce6341SSimon Pilgrim; RUN: opt -S -disable-output -passes="print<demanded-bits>" < %s 2>&1 | FileCheck %s
225ce6341SSimon Pilgrim
3*99b3b8e5SFlorian Hahn; CHECK-LABEL: Printing analysis 'Demanded Bits Analysis' for function 'test_add':
4c1f6ce0cSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x1e for   %1 = and i32 %a, 9
5c1f6ce0cSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x1a for   %2 = and i32 %b, 9
6c1f6ce0cSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x1a for   %3 = and i32 %c, 13
7c1f6ce0cSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x1a for   %4 = and i32 %d, 4
8c1f6ce0cSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x1a for   %5 = or i32 %2, %3
9c1f6ce0cSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x1a for   %6 = or i32 %4, %5
1079d9e2cdSSimon Pilgrim; CHECK-DAG: DemandedBits: 0x10 for   %7 = add i32 %1, %6
1179d9e2cdSSimon Pilgrim; CHECK-DAG: DemandedBits: 0xffffffff for   %8 = and i32 %7, 16
1225ce6341SSimon Pilgrimdefine i32 @test_add(i32 %a, i32 %b, i32 %c, i32 %d) {
1325ce6341SSimon Pilgrim  %1 = and i32 %a, 9
1425ce6341SSimon Pilgrim  %2 = and i32 %b, 9
1525ce6341SSimon Pilgrim  %3 = and i32 %c, 13
1625ce6341SSimon Pilgrim  %4 = and i32 %d, 4 ; no bit of %d alive, %4 simplifies to zero
1725ce6341SSimon Pilgrim  %5 = or i32 %2, %3
1825ce6341SSimon Pilgrim  %6 = or i32 %4, %5
1925ce6341SSimon Pilgrim  %7 = add i32 %1, %6
2025ce6341SSimon Pilgrim  %8 = and i32 %7, 16
2125ce6341SSimon Pilgrim  ret i32 %8
2225ce6341SSimon Pilgrim}
23