Fix PR16571, which is a bug in the code that checks that all of the types in the bundle are uniform.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185970 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nadav Rotem 2013-07-09 21:38:08 +00:00
parent 3517640443
commit 30bbf070a2
2 changed files with 25 additions and 1 deletions

View File

@ -172,7 +172,7 @@ static unsigned getSameOpcode(ArrayRef<Value *> VL) {
static Type* getSameType(ArrayRef<Value *> VL) {
Type *Ty = VL[0]->getType();
for (int i = 1, e = VL.size(); i < e; i++)
if (VL[0]->getType() != Ty)
if (VL[i]->getType() != Ty)
return 0;
return Ty;
@ -389,6 +389,8 @@ private:
void BoUpSLP::buildTree(ArrayRef<Value *> Roots) {
deleteTree();
if (!getSameType(Roots))
return;
buildTree_rec(Roots, 0);
}

View File

@ -0,0 +1,22 @@
; RUN: opt < %s -slp-vectorizer -S -mtriple=i686-pc-win32 -mcpu=corei7-avx
target datalayout = "e-p:32:32:32-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-f80:32:32-n8:16:32-S32"
target triple = "i686-pc-win32"
define hidden fastcc void @"System.PrimitiveTypesParser.TryParseIEEE754<char>(char*,uint,double&)"() unnamed_addr {
"@0":
br i1 undef, label %"@38.lr.ph", label %"@37"
"@37": ; preds = %"@38.lr.ph", %"@44", %"@0"
ret void
"@44": ; preds = %"@38.lr.ph"
%0 = add i64 undef, undef
%1 = add i32 %mainPartDigits.loc.0.ph45, 1
br i1 undef, label %"@38.lr.ph", label %"@37"
"@38.lr.ph": ; preds = %"@44", %"@0"
%mainDoublePart.loc.0.ph46 = phi i64 [ %0, %"@44" ], [ 0, %"@0" ]
%mainPartDigits.loc.0.ph45 = phi i32 [ %1, %"@44" ], [ 0, %"@0" ]
br i1 undef, label %"@44", label %"@37"
}