[RS4GC] Handle uses of extractelement for conversion from vector to scalar base
authorAnna Thomas <anna@azul.com>
Fri, 6 Mar 2020 16:07:11 +0000 (11:07 -0500)
committerAnna Thomas <anna@azul.com>
Fri, 6 Mar 2020 21:28:49 +0000 (16:28 -0500)
commit59029b9eef23c72d904f9a6b182c5cd4402a69c5
tree6c0c2b60b910c104b054305c81d167c1711c27c6
parenteb755df5c27f5687a4f43a62e7eb0713c3f8f030
[RS4GC] Handle uses of extractelement for conversion from vector to scalar base

As mentioned in the comments, extractelement is special
since we actually want a scalar base for that element we extracted from
the vector (i.e. not a vector base).
This same logic should apply to uses of the extractelement such as phis
and selects which have the same BDV as the extractelement.
Howeber, for these uses we conservatively mark the BDV state as
conflict, since setting the EE's new base BDV does not always dominate
these uses.

Added testcase showcases the problem where the BDV identification chokes
on the incorrect cast from vector to scalar for the phi use of
extractelement.

Tests-Run: make check, internal fuzzer testing

Reviewers: reames, skatkov, dantrushin
Reviewed-By: dantrushin
Differential Revision: https://reviews.llvm.org/D75704
llvm/lib/Transforms/Scalar/RewriteStatepointsForGC.cpp
llvm/test/Transforms/RewriteStatepointsForGC/scalar-base-vector.ll