[PowerPC] Fix invalid cast for vector shuffles when lowering to the xxsplti32dx instr...
authorAmy Kwan <amy.kwan1@ibm.com>
Sat, 22 Oct 2022 22:33:14 +0000 (17:33 -0500)
committerAmy Kwan <amy.kwan1@ibm.com>
Mon, 24 Oct 2022 14:56:54 +0000 (09:56 -0500)
commit715301056ee0b12d01463ea32ff0f006392f2d12
treeeda470380c1618aa6a7bf0abd684c1a72032795e
parent65aaecca8842dec30d03734a7fe8ce33c5afec81
[PowerPC] Fix invalid cast for vector shuffles when lowering to the xxsplti32dx instruction.

When lowering vector shuffles into the xxsplti32dx instruction on Power10, we
canonicalize the right operand to be a BUILD_VECTOR and as a result, get the
commuted vector shuffle node.

However, a vector shuffle will not always be returned as the result for a
commuted vector shuffle. In such a scenario, this patch updates the original
cast of a shuffle into a dyn_cast<> and checks if the shuffle is a valid vector
shuffle node prior to obtaining the commuted shuffle mask.

This patch also adds a new test case that demonstrates this scenario (primarily
seen on 32-bit), and was originally a crash prior to this fix.

Differential Revision: https://reviews.llvm.org/D135024
llvm/lib/Target/PowerPC/PPCISelLowering.cpp
llvm/test/CodeGen/PowerPC/p10-splatImm32-undef.ll