1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-02-01 05:01:59 +01:00
Simon Pilgrim 5ef0d1424c [TargetLowering] Add SimplifyMultipleUseDemandedBits
This patch introduces the DAG version of SimplifyMultipleUseDemandedBits, which attempts to peek through ops (mainly and/or/xor so far) that don't contribute to the demandedbits/elts of a node - which means we can do this even in cases where we have multiple uses of an op, which normally requires us to demanded all bits/elts. The intention is to remove a similar instruction - SelectionDAG::GetDemandedBits - once SimplifyMultipleUseDemandedBits has matured.

The InstCombine version of SimplifyMultipleUseDemandedBits can constant fold which I haven't added here yet, and so far I've only wired this up to some basic binops (and/or/xor/add/sub/mul) to demonstrate its use.

We do see a couple of regressions that need to be addressed:

    AMDGPU unsigned dot product codegen retains an AND mask (for ZERO_EXTEND) that it previously removed (but otherwise the dotproduct codegen is a lot better).
	
    X86/AVX2 has poor handling of vector ANY_EXTEND/ANY_EXTEND_VECTOR_INREG - it prematurely gets converted to ZERO_EXTEND_VECTOR_INREG.

The code owners have confirmed its ok for these cases to fixed up in future patches.

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

llvm-svn: 366799
2019-07-23 12:39:08 +00:00
..
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2017-10-06 13:59:28 +00:00
2016-08-08 18:11:13 +00:00
2018-10-27 15:00:38 +00:00
2018-10-27 15:00:38 +00:00
2019-03-14 11:56:41 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2016-06-23 21:18:59 +00:00
2016-10-19 16:58:59 +00:00
2017-10-06 13:59:28 +00:00
2017-10-06 13:59:28 +00:00
2017-10-06 13:59:28 +00:00
2016-06-10 19:58:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00
2018-07-20 12:12:10 +00:00