[Loads] Forward constant vector store to load of first element
authorNikita Popov <nikita.ppv@gmail.com>
Sat, 6 Mar 2021 15:10:21 +0000 (16:10 +0100)
committerNikita Popov <nikita.ppv@gmail.com>
Sat, 3 Apr 2021 10:10:31 +0000 (12:10 +0200)
commitb552e16b0b04cd216753e40990da774f4a400782
treef1bc9e4246d8877a4b7da457a13033750185b894
parent9d20eaf9c08c9c22aa0d13f04d8e7895c9ac05d4
[Loads] Forward constant vector store to load of first element

InstCombine performs simple forwarding from stores to loads, but
currently only handles the case where the load and store have the
same size. This extends it to also handle a store of a constant
with a larger size followed by a load with a smaller size.

This is implemented through ConstantFoldLoadThroughBitcast() which
is fairly primitive (e.g. does not allow storing a large integer
and then loading a small one), but at least can forward the first
element of a vector store. Unfortunately it seems that we currently
don't have a generic helper for "read a constant value as a different
type", it's all tangled up with other logic in either
ConstantFolding or VNCoercion.

Differential Revision: https://reviews.llvm.org/D98114
llvm/lib/Analysis/Loads.cpp
llvm/test/Transforms/InstCombine/load-store-forward.ll