mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
037a1994f1
Add getDemandedBits method for uses so we can query demanded bits for each use. This can help getting better use information. For example, for the code below define i32 @test_use(i32 %a) { %1 = and i32 %a, -256 %2 = or i32 %1, 1 %3 = trunc i32 %2 to i8 (didn't optimize this to 1 for illustration purpose) ... some use of %3 ret %2 } if we look at the demanded bit of %2 (which is all 32 bits because of the return), we would conclude that %a is used regardless of how its return is used. However, if we look at each use separately, we will see that the demanded bit of %2 in trunc only uses the lower 8 bits of %a which is redefined, therefore %a's usage depends on how the function return is used. Reviewed By: RKSimon Differential Revision: https://reviews.llvm.org/D97074
28 lines
1.3 KiB
LLVM
28 lines
1.3 KiB
LLVM
; RUN: opt -S -demanded-bits -analyze -enable-new-pm=0 < %s | FileCheck %s
|
|
; RUN: opt -S -disable-output -passes="print<demanded-bits>" < %s 2>&1 | FileCheck %s
|
|
|
|
; CHECK-DAG: DemandedBits: 0xff for %1 = add nsw i32 %a, 5
|
|
; CHECK-DAG: DemandedBits: 0xff for %3 = trunc i32 %2 to i8
|
|
; CHECK-DAG: DemandedBits: 0xff for %2 = mul nsw i32 %1, %b
|
|
; CHECK-DAG: DemandedBits: 0x1 for %4 = trunc i32 %2 to i1
|
|
; CHECK-DAG: DemandedBits: 0xff for %5 = zext i1 %4 to i8
|
|
; CHECK-DAG: DemandedBits: 0xff for %6 = add nsw i8 %3, %5
|
|
; CHECK-DAG: DemandedBits: 0xff for %a in %1 = add nsw i32 %a, 5
|
|
; CHECK-DAG: DemandedBits: 0xff for 5 in %1 = add nsw i32 %a, 5
|
|
; CHECK-DAG: DemandedBits: 0xff for %1 in %2 = mul nsw i32 %1, %b
|
|
; CHECK-DAG: DemandedBits: 0xff for %b in %2 = mul nsw i32 %1, %b
|
|
; CHECK-DAG: DemandedBits: 0xff for %2 in %3 = trunc i32 %2 to i8
|
|
; CHECK-DAG: DemandedBits: 0x1 for %2 in %4 = trunc i32 %2 to i1
|
|
; CHECK-DAG: DemandedBits: 0x1 for %4 in %5 = zext i1 %4 to i8
|
|
; CHECK-DAG: DemandedBits: 0xff for %3 in %6 = add nsw i8 %3, %5
|
|
; CHECK-DAG: DemandedBits: 0xff for %5 in %6 = add nsw i8 %3, %5
|
|
define i8 @test_mul(i32 %a, i32 %b) {
|
|
%1 = add nsw i32 %a, 5
|
|
%2 = mul nsw i32 %1, %b
|
|
%3 = trunc i32 %2 to i8
|
|
%4 = trunc i32 %2 to i1
|
|
%5 = zext i1 %4 to i8
|
|
%6 = add nsw i8 %3, %5
|
|
ret i8 %6
|
|
}
|