forked from OSchip/llvm-project
[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 llvm-svn: 291692
This commit is contained in:
parent
3b5edf4fa7
commit
f69e64662b
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 "}
|
Loading…
Reference in New Issue