[all-commits] [llvm/llvm-project] 750f4c: [InstCombine] allow peeking through zext of shift ...
RotateRight via All-commits
all-commits at lists.llvm.org
Mon Jul 20 13:18:55 PDT 2020
Branch: refs/heads/master
Home: https://github.com/llvm/llvm-project
Commit: 750f4c591d6c3a62887250783e2a63af0daaa630
https://github.com/llvm/llvm-project/commit/750f4c591d6c3a62887250783e2a63af0daaa630
Author: Sanjay Patel <spatel at rotateright.com>
Date: 2020-07-20 (Mon, 20 Jul 2020)
Changed paths:
M llvm/lib/Transforms/InstCombine/InstCombineSelect.cpp
M llvm/test/Transforms/InstCombine/rotate.ll
Log Message:
-----------
[InstCombine] allow peeking through zext of shift amount to match rotate idioms (PR45701)
We might want to also allow trunc of the shift amount, but that seems less likely?
define i32 @src(i32 %x, i1 %y) {
%0:
%rem = and i1 %y, 1
%cmp = icmp eq i1 %rem, 0
%sh_prom = zext i1 %rem to i32
%sub = sub nsw nuw i1 0, %rem
%sh_prom1 = zext i1 %sub to i32
%shr = lshr i32 %x, %sh_prom1
%shl = shl i32 %x, %sh_prom
%or = or i32 %shl, %shr
%r = select i1 %cmp, i32 %x, i32 %or
ret i32 %r
}
=>
define i32 @tgt(i32 %x, i1 %y) {
%0:
%t = zext i1 %y to i32
%r = fshl i32 %x, i32 %x, i32 %t
ret i32 %r
}
Transformation seems to be correct!
https://alive2.llvm.org/ce/z/xgMvE3
http://bugs.llvm.org/PR45701
More information about the All-commits
mailing list