mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-25 13:24:46 +00:00
- When DAG combiner is folding a bit convert into a BUILD_VECTOR, it should check if it's essentially a SCALAR_TO_VECTOR. Avoid turning (v8i16) <10, u, u, u> to <10, 0, u, u, u, u, u, u>. Instead, simply convert it to a SCALAR_TO_VECTOR of the proper type.
- X86 now normalize SCALAR_TO_VECTOR to (BIT_CONVERT (v4i32 SCALAR_TO_VECTOR)). Get rid of X86ISD::S2VEC. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@47290 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -176,6 +176,27 @@ bool ISD::isBuildVectorAllZeros(const SDNode *N) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/// isScalarToVector - Return true if the specified node is a
|
||||
/// ISD::SCALAR_TO_VECTOR node or a BUILD_VECTOR node where only the low
|
||||
/// element is not an undef.
|
||||
bool ISD::isScalarToVector(const SDNode *N) {
|
||||
if (N->getOpcode() == ISD::SCALAR_TO_VECTOR)
|
||||
return true;
|
||||
|
||||
if (N->getOpcode() != ISD::BUILD_VECTOR)
|
||||
return false;
|
||||
if (N->getOperand(0).getOpcode() == ISD::UNDEF)
|
||||
return false;
|
||||
unsigned NumElems = N->getNumOperands();
|
||||
for (unsigned i = 1; i < NumElems; ++i) {
|
||||
SDOperand V = N->getOperand(i);
|
||||
if (V.getOpcode() != ISD::UNDEF)
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// isDebugLabel - Return true if the specified node represents a debug
|
||||
/// label (i.e. ISD::LABEL or TargetInstrInfo::LABEL node and third operand
|
||||
/// is 0).
|
||||
|
Reference in New Issue
Block a user