HomePhabricator

Reassociate: add global reassociation algorithm

Authored by escha on Dec 12 2017, 11:18 AM.

Description

Reassociate: add global reassociation algorithm

This algorithm (explained more in the source code) takes into account
global redundancies by building a "pair map" to find common subexprs.

The primary motivation of this is to handle situations like

foo = (a * b) * c
bar = (a * d) * c

where we currently don't identify that "a * c" is redundant.

Accordingly, it prioritizes the emission of a * c so that CSE
can remove the redundant calculation later.

Does not change the actual reassociation algorithm -- only the
order in which the reassociated operand chain is reconstructed.

Gives ~1.5% floating point math instruction count reduction on
a large offline suite of graphics shaders.

llvm-svn: 320515

Details

Committed
eschaDec 12 2017, 11:18 AM
Parents
rG1b318b101699: [msan] LIT: Add lld testing config
Branches
Unknown
Tags
Unknown