summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC
diff options
context:
space:
mode:
authorChandler Carruth <chandlerc@gmail.com>2014-08-15 02:43:18 +0000
committerChandler Carruth <chandlerc@gmail.com>2014-08-15 02:43:18 +0000
commit372c143c2f0e12a496fce84966bc0ce7f84f90eb (patch)
treecaa1133a2499cfe2ced68c63d14384b44f1d584c /llvm/lib/MC
parent070db177bd530a935237097ee53e4480d90cf830 (diff)
downloadbcm5719-llvm-372c143c2f0e12a496fce84966bc0ce7f84f90eb.tar.gz
bcm5719-llvm-372c143c2f0e12a496fce84966bc0ce7f84f90eb.zip
[x86] Fix PR20540 where the x86 shuffle DAG combiner had completely
broken logic for merging shuffle masks in the face of SM_SentinelZero mask operands. While these are '-1' they don't mean 'undef' the way '-1' means in the pre-legalized shuffle masks. Instead, they mean that the shuffle operation is forcibly zeroing that lane. Reflect this and explicitly handle it in a bunch of places. In one place the effect is equivalent but much more clear. In the rest it was really weirdly broken. Also, rewrite the entire merging thing to be a more directy operation with a single loop and just doing math to map the indices through the various masks. Also add a bunch of asserts to try to make in extremely clear what the different masks can possibly look like. Finally, add some comments to clarify that we're merging shuffle masks *up* here rather than *down* as we do everywhere else, and thus the logic is quite confusing. Thanks to several different people for sending test cases, and for Robert Khasanov for an initial attempt at fixing. llvm-svn: 215687
Diffstat (limited to 'llvm/lib/MC')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud