Remove an invalid assert in TargetTransformImpl

getCastInstrCost had an assert prohibiting scalar to vector casts. Such casts,
however, are allowed. This should make the vectorizer buildbot happier.

llvm-svn: 166998
This commit is contained in:
Hal Finkel 2012-10-30 02:41:57 +00:00
parent 67211fb6fb
commit d0b95b0961
2 changed files with 25 additions and 4 deletions

View File

@ -196,7 +196,6 @@ unsigned VectorTargetTransformImpl::getBroadcastCost(Type *Tp) const {
unsigned VectorTargetTransformImpl::getCastInstrCost(unsigned Opcode, Type *Dst,
Type *Src) const {
assert(Src->isVectorTy() == Dst->isVectorTy() && "Invalid input types");
int ISD = InstructionOpcodeToISD(Opcode);
assert(ISD && "Invalid opcode");
@ -217,6 +216,8 @@ unsigned VectorTargetTransformImpl::getCastInstrCost(unsigned Opcode, Type *Dst,
}
}
unsigned ScalarizationCost = 1;
// Otherwise, assume that the cast is scalarized.
if (Dst->isVectorTy()) {
unsigned Num = Dst->getVectorNumElements();
@ -224,11 +225,19 @@ unsigned VectorTargetTransformImpl::getCastInstrCost(unsigned Opcode, Type *Dst,
Dst->getScalarType());
// return the cost of multiple scalar invocation plus the cost of inserting
// and extracting the values.
return getScalarizationOverhead(Dst, true, true) + Num * Cost;
ScalarizationCost *= getScalarizationOverhead(Dst, true, true) + Num * Cost;
}
// Unknown scalar opcode.
return 1;
if (Src->isVectorTy()) {
unsigned Num = Src->getVectorNumElements();
unsigned Cost = getCastInstrCost(Opcode, Dst->getScalarType(),
Src->getScalarType());
// return the cost of multiple scalar invocation plus the cost of inserting
// and extracting the values.
ScalarizationCost *= getScalarizationOverhead(Src, true, true) + Num * Cost;
}
return ScalarizationCost;
}
unsigned VectorTargetTransformImpl::getCFInstrCost(unsigned Opcode) const {

View File

@ -0,0 +1,12 @@
target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -bb-vectorize -S | FileCheck %s
define void @main() nounwind uwtable {
entry:
%0 = bitcast <2 x i64> undef to i128
%1 = bitcast <2 x i64> undef to i128
ret void
; CHECK: @main
}