[DAGCombiner] Add vector demanded elements support to ComputeNumSignBits
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 31 Mar 2017 13:54:09 +0000 (13:54 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Fri, 31 Mar 2017 13:54:09 +0000 (13:54 +0000)
commit3c81c34d8d8a5f9e9abde0fcfedce91dc1d09156
treea72d5ca9822304fc7a3bc8c7ba48b23a2ae39a25
parent60088c3ff67e6fab8192cd670e2185d855ead749
[DAGCombiner] Add vector demanded elements support to ComputeNumSignBits

Currently ComputeNumSignBits returns the minimum number of sign bits for all elements of vector data, when we may only be interested in one/some of the elements.

This patch adds a DemandedElts argument that allows us to specify the elements we actually care about. The original ComputeNumSignBits implementation calls with a DemandedElts demanding all elements to match current behaviour. Scalar types set this to 1.

I've only added support for BUILD_VECTOR and EXTRACT_VECTOR_ELT so far, all others will default to demanding all elements but can be updated in due course.

Followup to D25691.

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

llvm-svn: 299219
llvm/include/llvm/CodeGen/SelectionDAG.h
llvm/include/llvm/Target/TargetLowering.h
llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
llvm/lib/Target/AMDGPU/AMDGPUISelLowering.cpp
llvm/lib/Target/AMDGPU/AMDGPUISelLowering.h
llvm/lib/Target/X86/X86ISelLowering.cpp
llvm/lib/Target/X86/X86ISelLowering.h
llvm/test/CodeGen/X86/known-bits-vector.ll