[SLP] Remove bogus assert.

The removed assert seems bogus - it's perfectly legal for the roots of the
vectorized subtrees to be equal even if the original scalar values aren't,
if the original scalars happen to be equivalent.

This fixes PR31599.

Differential Revision: https://reviews.llvm.org/D28539


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291692 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Michael Kuperstein 2017-01-11 19:23:57 +00:00
parent 83229eeee3
commit 8672808b6b
2 changed files with 30 additions and 4 deletions

View File

@ -2493,10 +2493,6 @@ Value *BoUpSLP::vectorizeTree(TreeEntry *E) {
Value *LHS = vectorizeTree(LHSVL);
Value *RHS = vectorizeTree(RHSVL);
if (LHS == RHS && isa<Instruction>(LHS)) {
assert((VL0->getOperand(0) == VL0->getOperand(1)) && "Invalid order");
}
if (Value *V = alreadyVectorized(E->Scalars))
return V;

View File

@ -0,0 +1,30 @@
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
; RUN: opt -slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
define <2 x float> @foo() {
; CHECK-LABEL: @foo(
; CHECK-NEXT: entry:
; CHECK-NEXT: [[SOURCE:%.*]] = insertelement <2 x float> undef, float undef, i32 0
; CHECK-NEXT: [[TMP0:%.*]] = fsub <2 x float> [[SOURCE]], [[SOURCE]]
; CHECK-NEXT: [[TMP1:%.*]] = extractelement <2 x float> [[TMP0]], i32 0
; CHECK-NEXT: [[RES1:%.*]] = insertelement <2 x float> undef, float [[TMP1]], i32 0
; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x float> [[TMP0]], i32 1
; CHECK-NEXT: [[RES2:%.*]] = insertelement <2 x float> [[RES1]], float [[TMP2]], i32 1
; CHECK-NEXT: ret <2 x float> [[RES2]]
;
entry:
%source = insertelement <2 x float> undef, float undef, i32 0
%e0 = extractelement <2 x float> %source, i32 0
%e0.dup = extractelement <2 x float> %source, i32 0
%sub1 = fsub float %e0, %e0.dup
%e1 = extractelement <2 x float> %source, i32 1
%e1.dup = extractelement <2 x float> %source, i32 1
%sub2 = fsub float %e1, %e1.dup
%res1 = insertelement <2 x float> undef, float %sub1, i32 0
%res2 = insertelement <2 x float> %res1, float %sub2, i32 1
ret <2 x float> %res2
}
!llvm.ident = !{!0, !0}
!0 = !{!"clang version 4.0.0 "}