Skip to content
  1. Dec 07, 2012
  2. Dec 06, 2012
  3. Dec 05, 2012
  4. Dec 04, 2012
  5. Dec 03, 2012
  6. Nov 30, 2012
    • Sebastian Pop's avatar
      Codegen failure for vmull with small vectors · a204f722
      Sebastian Pop authored
      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
      a204f722
Loading