TargetLowering: Fix getTypeConversion handling of extended vector types
authorArnold Schwaighofer <aschwaighofer@apple.com>
Sun, 7 Apr 2013 20:22:56 +0000 (20:22 +0000)
committerArnold Schwaighofer <aschwaighofer@apple.com>
Sun, 7 Apr 2013 20:22:56 +0000 (20:22 +0000)
commit995ce6c388d2c70854da4954728774652e17b9e7
tree1a67ef7821bde01315e052107f8f25e9ff64f989
parent421305aff86d3085e68ed29b4d0f3bd95ac0c7f7
TargetLowering: Fix getTypeConversion handling of extended vector types

The code in getTypeConversion attempts to promote the element vector type
before it trys to split or widen the vector.
After it failed finding a legal vector type by promoting it would continue using
the promoted vector element type. Thereby missing legal splitted vector types.
For example the type v32i32 that has a legal split of 4 x v3i32 on x86/sse2
would be transformed to: v32i256 and from there on successively split to:
v16i256, v8i256, v1i256 and then finally ends up as an i64 type.
By resetting the vector element type to the original vector element type that
existed before the promotion the code will attempt to split the vector type to
smaller vector widths of the same type.

llvm-svn: 178999
llvm/include/llvm/Target/TargetLowering.h
llvm/test/Analysis/CostModel/X86/testshiftashr.ll
llvm/test/Analysis/CostModel/X86/testshiftlshr.ll
llvm/test/Analysis/CostModel/X86/testshiftshl.ll