forked from OSchip/llvm-project
DAG: Avoid bitcast/ext/build_vector combine
This avoids regressions in a future AMDGPU change to make v4i16/v4f16 legal. For these types, build_vector is implemented as bitcasted operations on v2i32. This combine was creating v4i16s out of what would have been already been a v2i32 build_vector, creating a mess of nodes that never get cleaned up. I'm not sure this is the right condition to check. I initially tried just checking for the legality of the new build_vector. This works for my case, but breaks dozens of x86 tests. A Mips test seems to show some improvement or at least a neutral change. I don't want to think about how long it would take to analyze the set of different x86 vector operations impacted. Test included in future commit. llvm-svn: 334218
This commit is contained in:
parent
58cb1973de
commit
e8eb567e17
|
@ -14918,7 +14918,10 @@ SDValue DAGCombiner::reduceBuildVecExtToExtBuildVec(SDNode *N) {
|
|||
assert(VecVT.getSizeInBits() == VT.getSizeInBits() &&
|
||||
"Invalid vector size");
|
||||
// Check if the new vector type is legal.
|
||||
if (!isTypeLegal(VecVT)) return SDValue();
|
||||
if (!isTypeLegal(VecVT) ||
|
||||
(!TLI.isOperationLegal(ISD::BUILD_VECTOR, VecVT) &&
|
||||
TLI.isOperationLegal(ISD::BUILD_VECTOR, VT)))
|
||||
return SDValue();
|
||||
|
||||
// Make the new BUILD_VECTOR.
|
||||
SDValue BV = DAG.getBuildVector(VecVT, DL, Ops);
|
||||
|
|
Loading…
Reference in New Issue