[all-commits] [llvm/llvm-project] 191a6e: optimize icmp-ugt-ashr
Nadav Rotem via All-commits
all-commits at lists.llvm.org
Thu Jan 20 09:32:04 PST 2022
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: 191a6e9dfa1a54b616e12bde2efa849ad8e03f48
https://github.com/llvm/llvm-project/commit/191a6e9dfa1a54b616e12bde2efa849ad8e03f48
Author: Nadav Rotem <nadav256 at gmail.com>
Date: 2022-01-20 (Thu, 20 Jan 2022)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp
M llvm/test/Transforms/InstCombine/icmp-shr-lt-gt.ll
M llvm/test/Transforms/InstCombine/icmp-shr.ll
Log Message:
-----------
optimize icmp-ugt-ashr
This diff optimizes the sequence icmp-ugt(ashr,C_1) C_2. InstCombine
already implements this optimization for sgt, and this patch adds
support ugt. This patch adds the check for UGT.
@craig.topper came up with the idea and proof:
define i1 @src(i8 %x, i8 %y, i8 %c) {
%cp1 = add i8 %c, 1
%i = shl i8 %cp1, %y
%i.2 = ashr i8 %i, %y
%cmp = icmp eq i8 %cp1, %i.2
;Assume: C + 1 == (((C + 1) << y) >> y)
call void @llvm.assume(i1 %cmp)
; uncomment for the sgt case
%j = shl i8 %cp1, %y
%j.2 = sub i8 %j, 1
%cmp2 = icmp ne i8 %j.2, 127
;Assume (((c + 1 ) << y) - 1) != 127
call void @llvm.assume(i1 %cmp2)
%s = ashr i8 %x, %y
%r = icmp sgt i8 %s, %c
ret i1 %r
}
define i1 @tgt(i8 %x, i8 %y, i8 %c) {
%cp1 = add i8 %c, 1
%j = shl i8 %cp1, %y
%j.2 = sub i8 %j, 1
%r = icmp sgt i8 %x, %j.2
ret i1 %r
}
declare void @llvm.assume(i1)
This change is related to the optimizations in D117252.
Differential Revision: https://reviews.llvm.org/D117365
More information about the All-commits
mailing list