OSDN Git Service

When the legalizer is splitting vector shifts, the result may not have the right...
authorBenjamin Kramer <benny.kra@googlemail.com>
Sun, 27 Jan 2013 11:19:11 +0000 (11:19 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Sun, 27 Jan 2013 11:19:11 +0000 (11:19 +0000)
commit914f8c4825140a97219e94b815beb2bc77395d10
treee805607941f621af83fdd47b7c5b175986f7a6af
parent16f95669ec814d98ce28ad514df603c01d662ee8
When the legalizer is splitting vector shifts, the result may not have the right shift amount type.

Fix that by adding a cast to the shift expander. This came up with vector shifts
on sse-less X86 CPUs.

   <2 x i64>       = shl <2 x i64> <2 x i64>
-> i64,i64         = shl i64 i64; shl i64 i64
-> i32,i32,i32,i32 = shl_parts i32 i32 i64; shl_parts i32 i32 i64

Now we cast the last two i64s to the right type. Fixes the crash in PR14668.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@173615 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/SelectionDAG/LegalizeIntegerTypes.cpp
test/CodeGen/X86/legalize-shift-64.ll