Sebastian Pop a204f72237 Codegen failure for vmull with small vectors
Codegen was failing with an assertion because of unexpected vector
operands when legalizing the selection DAG for a MUL instruction.

The asserting code was legalizing multiplies for vectors of size 128
bits. It uses a custom lowering to try and detect cases where it can
use a VMULL instruction instead of a VMOVL + VMUL.  The code was
looking for input operands to the MUL that had been sign or zero
extended. If it found the extended operands it would drop the
sign/zero extension and use the original vector size as input to a
VMULL instruction.

The code assumed that the original input vector was 64 bits so that
after dropping the extension it would fit directly into a D register
and could be used as an operand of a VMULL instruction. The input
code that trigger the failure used a vector of <4 x i8> that was
sign extended to <4 x i32>. It was not safe to drop the sign
extension in this case because the original vector is only 32 bits
wide. The fix is to insert a sign extension for the vector to reach
the required 64 bit size. In this particular example, the vector would
need to be sign extented to a <4 x i16>.

llvm-svn: 169024
2012-11-30 19:08:04 +00:00
..
2012-09-29 21:43:49 +00:00
2012-10-16 07:16:47 +00:00
2012-10-16 07:16:47 +00:00
2012-10-19 08:23:06 +00:00
2012-09-29 21:43:49 +00:00
2010-09-17 21:46:16 +00:00
2012-04-10 03:15:42 +00:00
2012-06-11 08:07:26 +00:00
2012-02-28 02:08:50 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2010-09-02 20:19:24 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-06-15 21:32:12 +00:00
2012-09-29 21:43:49 +00:00
2011-12-19 23:26:44 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2011-11-14 18:03:05 +00:00
2012-09-29 21:43:49 +00:00
2009-10-21 08:15:52 +00:00
2011-11-29 23:09:16 +00:00
2012-09-29 21:43:49 +00:00
2012-09-29 21:43:49 +00:00
2010-10-22 22:04:28 +00:00
2011-03-15 01:49:08 +00:00
2011-04-01 03:36:33 +00:00
2012-09-29 21:43:49 +00:00
2011-07-26 20:49:44 +00:00
2010-08-30 23:41:49 +00:00
2010-11-29 22:39:38 +00:00
2009-09-15 20:58:02 +00:00
2009-09-15 20:58:02 +00:00
2009-10-07 20:51:42 +00:00
2012-10-12 22:59:21 +00:00