mirror of
https://github.com/RPCS3/llvm.git
synced 2025-02-07 19:19:26 +00:00
[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:
parent
83229eeee3
commit
8672808b6b
@ -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;
|
||||
|
||||
|
30
test/Transforms/SLPVectorizer/X86/pr31599.ll
Normal file
30
test/Transforms/SLPVectorizer/X86/pr31599.ll
Normal 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 "}
|
Loading…
x
Reference in New Issue
Block a user