mirror of
https://github.com/RPCS3/llvm.git
synced 2026-08-27 21:00:01 -04:00
8672808b6b
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
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 "}
|