Files
clang-p2996/llvm/test/Transforms/SLPVectorizer/X86/pr31599.ll
Michael Kuperstein f69e64662b [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
2017-01-11 19:23:57 +00:00

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 "}