OSDN Git Service

[SelectionDAG] When promoting the result of a VSELECT, make sure we promote the condi...
authorCraig Topper <craig.topper@intel.com>
Mon, 20 Nov 2017 23:08:50 +0000 (23:08 +0000)
committerCraig Topper <craig.topper@intel.com>
Mon, 20 Nov 2017 23:08:50 +0000 (23:08 +0000)
commit1bf38b1457d74e97b115436f47daf9ea4f55336d
tree3724ec95517146003cd8b8a3d7cf32802e12eca5
parent712cf3fb41459c609b6acf713f2d4ee2d059c0a0
[SelectionDAG] When promoting the result of a VSELECT, make sure we promote the condition to the SetCC type for the final result type not the original type.

Normally this would be cleaned up by promoting the condition operand next. But in the attached case we promoted the result from v2i48 to v2i64 and the condition from v2i1 to v2i48. Then we tried to "promote" the v2i48 condition back to v2i1 because that's what the SetCC result type for v2i64 is on X86 with VLX. But promote is either a NOP or SIGN_EXTEND and this would need a truncation.

With the change here we now get the SetCC type of v2i1 when we're handling the result promotion and the operand no longer needs to be promoted itself.

Fixes PR35272.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@318706 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
test/CodeGen/X86/pr35272.ll [new file with mode: 0644]