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
31 lines
1.3 KiB
LLVM
31 lines
1.3 KiB
LLVM
; 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 "}
|