[KnownBits] Return zero instead of unknown for always poison shifts
authorNikita Popov <npopov@redhat.com>
Mon, 15 May 2023 15:56:02 +0000 (17:56 +0200)
committerNikita Popov <npopov@redhat.com>
Tue, 23 May 2023 12:41:22 +0000 (14:41 +0200)
commitf7d1baa414e6e4fca04092cb2f71e9b037c762f0
treeea94854d0ca8b5ece0bdecec12b40f71e5c8d95d
parent35ce741ef3e3dd9db1da3ea0a06c565cb90f665a
[KnownBits] Return zero instead of unknown for always poison shifts

For always poison shifts, any KnownBits return value is valid.
Currently we return unknown, but returning zero is generally more
profitable. We had some code in ValueTracking that tried to do this,
but was actually dead code.

Differential Revision: https://reviews.llvm.org/D150648
12 files changed:
llvm/lib/Analysis/ValueTracking.cpp
llvm/lib/Support/KnownBits.cpp
llvm/test/Analysis/ScalarEvolution/ashr.ll
llvm/test/CodeGen/AArch64/GlobalISel/form-bitfield-extract-from-sextinreg.mir
llvm/test/CodeGen/LoongArch/rotl-rotr.ll
llvm/test/CodeGen/RISCV/rotl-rotr.ll
llvm/test/Transforms/InstCombine/not-add.ll
llvm/test/Transforms/InstCombine/oss_fuzz_32759.ll
llvm/test/Transforms/InstCombine/shift.ll
llvm/unittests/Analysis/ValueTrackingTest.cpp
llvm/unittests/CodeGen/GlobalISel/KnownBitsTest.cpp
llvm/unittests/CodeGen/GlobalISel/KnownBitsVectorTest.cpp