OSDN Git Service

[PowerPC] support ZERO_EXTEND in tryBitPermutation
authorHiroshi Inoue <inouehrs@jp.ibm.com>
Mon, 2 Oct 2017 09:24:00 +0000 (09:24 +0000)
committerHiroshi Inoue <inouehrs@jp.ibm.com>
Mon, 2 Oct 2017 09:24:00 +0000 (09:24 +0000)
commit86ba0ab2a727acb8c19079cc2d6ea9dc66187372
tree2accdd4858043b1883fd43164620da6c1e882ff8
parent37eec1b4487264448c01314f4cfa90209ab7732f
[PowerPC] support ZERO_EXTEND in tryBitPermutation

This patch add a support of ISD::ZERO_EXTEND in PPCDAGToDAGISel::tryBitPermutation to increase the opportunity to use rotate-and-mask by reordering ZEXT and ANDI.
Since tryBitPermutation stops analyzing nodes if it hits a ZEXT node while traversing SDNodes, we want to avoid ZEXT between two nodes that can be folded into a rotate-and-mask instruction.

For example, we allow these nodes

      t9: i32 = add t7, Constant:i32<1>
    t11: i32 = and t9, Constant:i32<255>
  t12: i64 = zero_extend t11
t14: i64 = shl t12, Constant:i64<2>

to be folded into a rotate-and-mask instruction.
Such case often happens in array accesses with logical AND operation in the index, e.g. array[i & 0xFF];

Differential Revision: https://reviews.llvm.org/D37514

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314655 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Target/PowerPC/PPCISelDAGToDAG.cpp
test/CodeGen/PowerPC/zext-bitperm.ll [new file with mode: 0644]