OSDN Git Service

[MIR] Add simple PRE pass to MachineCSE
authorAnton Afanasyev <anton.a.afanasyev@gmail.com>
Sun, 9 Jun 2019 12:15:47 +0000 (12:15 +0000)
committerAnton Afanasyev <anton.a.afanasyev@gmail.com>
Sun, 9 Jun 2019 12:15:47 +0000 (12:15 +0000)
commitc4a28d7017eb9dc11de83cf6c051e8d3ef19036a
treef4f98783e935aca0282eb1db65734cf5d5b3c5cc
parent1cbbb3f527a5aa13eda990e3dfa31f2ca4f64e07
[MIR] Add simple PRE pass to MachineCSE

This is the second part of the commit fixing PR38917 (hoisting
partitially redundant machine instruction). Most of PRE (partitial
redundancy elimination) and CSE work is done on LLVM IR, but some of
redundancy arises during DAG legalization. Machine CSE is not enough
to deal with it. This simple PRE implementation works a little bit
intricately: it passes before CSE, looking for partitial redundancy
and transforming it to fully redundancy, anticipating that the next
CSE step will eliminate this created redundancy. If CSE doesn't
eliminate this, than created instruction will remain dead and eliminated
later by Remove Dead Machine Instructions pass.

The third part of the commit is supposed to refactor MachineCSE,
to make it more clear and to merge MachinePRE with MachineCSE,
so one need no rely on further Remove Dead pass to clear instrs
not eliminated by CSE.

First step: https://reviews.llvm.org/D54839

Fixes llvm.org/PR38917

This is fixed recommit of r361356 after PowerPC64 multistage build failure.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362901 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/MachineCSE.cpp
test/CodeGen/X86/avx2-masked-gather.ll
test/CodeGen/X86/masked_compressstore.ll
test/CodeGen/X86/masked_gather.ll
test/CodeGen/X86/masked_store.ll
test/CodeGen/X86/masked_store_trunc.ll
test/CodeGen/X86/masked_store_trunc_ssat.ll
test/CodeGen/X86/masked_store_trunc_usat.ll