forked from OSchip/llvm-project
Fix a bug in getCopyFromParts turned up in the testcase for PR1132.
llvm-svn: 40598
This commit is contained in:
parent
fedeaa3045
commit
4ff9fb14f6
|
@ -695,9 +695,9 @@ static SDOperand getCopyFromParts(SelectionDAG &DAG,
|
||||||
} else if (NumParts > 0) {
|
} else if (NumParts > 0) {
|
||||||
// If the intermediate type was expanded, build the intermediate operands
|
// If the intermediate type was expanded, build the intermediate operands
|
||||||
// from the parts.
|
// from the parts.
|
||||||
assert(NumIntermediates % NumParts == 0 &&
|
assert(NumParts % NumIntermediates == 0 &&
|
||||||
"Must expand into a divisible number of parts!");
|
"Must expand into a divisible number of parts!");
|
||||||
unsigned Factor = NumIntermediates / NumParts;
|
unsigned Factor = NumParts / NumIntermediates;
|
||||||
for (unsigned i = 0; i != NumIntermediates; ++i)
|
for (unsigned i = 0; i != NumIntermediates; ++i)
|
||||||
Ops[i] = getCopyFromParts(DAG, &Parts[i * Factor], Factor,
|
Ops[i] = getCopyFromParts(DAG, &Parts[i * Factor], Factor,
|
||||||
PartVT, IntermediateVT);
|
PartVT, IntermediateVT);
|
||||||
|
@ -708,7 +708,7 @@ static SDOperand getCopyFromParts(SelectionDAG &DAG,
|
||||||
return DAG.getNode(MVT::isVector(IntermediateVT) ?
|
return DAG.getNode(MVT::isVector(IntermediateVT) ?
|
||||||
ISD::CONCAT_VECTORS :
|
ISD::CONCAT_VECTORS :
|
||||||
ISD::BUILD_VECTOR,
|
ISD::BUILD_VECTOR,
|
||||||
ValueVT, &Ops[0], NumParts);
|
ValueVT, &Ops[0], NumIntermediates);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// getCopyToParts - Create a series of nodes that contain the
|
/// getCopyToParts - Create a series of nodes that contain the
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
; RUN: llvm-as < %s | llc -mtriple=alphaev6-unknown-linux-gnu
|
||||||
|
|
||||||
|
define void @foo() {
|
||||||
|
entry:
|
||||||
|
br label %bb
|
||||||
|
|
||||||
|
bb: ; preds = %bb, %entry
|
||||||
|
br i1 false, label %bb26, label %bb
|
||||||
|
|
||||||
|
bb19: ; preds = %bb26
|
||||||
|
ret void
|
||||||
|
|
||||||
|
bb26: ; preds = %bb
|
||||||
|
br i1 false, label %bb30, label %bb19
|
||||||
|
|
||||||
|
bb30: ; preds = %bb26
|
||||||
|
br label %bb45
|
||||||
|
|
||||||
|
bb45: ; preds = %bb45, %bb30
|
||||||
|
%V.0 = phi <8 x i16> [ %tmp42, %bb45 ], [ zeroinitializer, %bb30 ] ; <<8 x i16>> [#uses=1]
|
||||||
|
%tmp42 = mul <8 x i16> zeroinitializer, %V.0 ; <<8 x i16>> [#uses=1]
|
||||||
|
br label %bb45
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
; RUN: llvm-as < %s | llc -march=ppc32 -mcpu=g3
|
||||||
|
|
||||||
|
define void @foo() {
|
||||||
|
entry:
|
||||||
|
br label %bb
|
||||||
|
|
||||||
|
bb: ; preds = %bb, %entry
|
||||||
|
br i1 false, label %bb26, label %bb
|
||||||
|
|
||||||
|
bb19: ; preds = %bb26
|
||||||
|
ret void
|
||||||
|
|
||||||
|
bb26: ; preds = %bb
|
||||||
|
br i1 false, label %bb30, label %bb19
|
||||||
|
|
||||||
|
bb30: ; preds = %bb26
|
||||||
|
br label %bb45
|
||||||
|
|
||||||
|
bb45: ; preds = %bb45, %bb30
|
||||||
|
%V.0 = phi <8 x i16> [ %tmp42, %bb45 ], [ zeroinitializer, %bb30 ] ; <<8 x i16>> [#uses=1]
|
||||||
|
%tmp42 = mul <8 x i16> zeroinitializer, %V.0 ; <<8 x i16>> [#uses=1]
|
||||||
|
br label %bb45
|
||||||
|
}
|
Loading…
Reference in New Issue