diff options
author | liuhongt <hongtao.liu@intel.com> | 2021-08-20 15:30:40 +0800 |
---|---|---|
committer | liuhongt <hongtao.liu@intel.com> | 2021-08-24 17:45:33 +0800 |
commit | 6ddb30f941a44bd528904558673ab35394565f08 (patch) | |
tree | 93e9d42f77d3b3ea0aebc3b0ae64345c5be60947 /libgcc | |
parent | 8571ff0ae0922bee292161c7fd61dd127d26a4ed (diff) | |
download | gcc-6ddb30f941a44bd528904558673ab35394565f08.zip gcc-6ddb30f941a44bd528904558673ab35394565f08.tar.gz gcc-6ddb30f941a44bd528904558673ab35394565f08.tar.bz2 |
Optimize (a & b) | (c & ~b) to vpternlog instruction.
Also optimize below 3 forms to vpternlog, op1, op2, op3 are
register_operand or unary_p as (not reg)
A: (any_logic (any_logic op1 op2) op3)
B: (any_logic (any_logic op1 op2) (any_logic op3 op4)) op3/op4 should
be equal to op1/op2
C: (any_logic (any_logic (any_logic:op1 op2) op3) op4) op3/op4 should
be equal to op1/op2
gcc/ChangeLog:
PR target/101989
* config/i386/i386.c (ix86_rtx_costs): Define cost for
UNSPEC_VTERNLOG.
* config/i386/i386.h (STRIP_UNARY): New macro.
* config/i386/predicates.md (reg_or_notreg_operand): New
predicate.
* config/i386/sse.md (*<avx512>_vternlog<mode>_all): New define_insn.
(*<avx512>_vternlog<mode>_1): New pre_reload
define_insn_and_split.
(*<avx512>_vternlog<mode>_2): Ditto.
(*<avx512>_vternlog<mode>_3): Ditto.
(any_logic1,any_logic2): New code iterator.
(logic_op): New code attribute.
(ternlogsuffix): Extend to VNxDF and VNxSF.
gcc/testsuite/ChangeLog:
PR target/101989
* gcc.target/i386/pr101989-1.c: New test.
* gcc.target/i386/pr101989-2.c: New test.
* gcc.target/i386/avx512bw-shiftqihi-constant-1.c: Adjust testcase.
Diffstat (limited to 'libgcc')
0 files changed, 0 insertions, 0 deletions