Need to set the insertpoint for extractelement to point to the first instruction in the node to avoid possible crash during external uses combine process. Without it we may endup with the incorrect transformation. Differential Revision: https://reviews.llvm.org/D135591
32 lines
1.5 KiB
LLVM
32 lines
1.5 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
|
|
; RUN: opt -S -slp-vectorizer -mtriple=x86_64-grtev4-linux-gnu -o - < %s | FileCheck %s
|
|
|
|
define i32 @crash() {
|
|
; CHECK-LABEL: @crash(
|
|
; CHECK-NEXT: label:
|
|
; CHECK-NEXT: [[ADD:%.*]] = fadd <2 x double> zeroinitializer, zeroinitializer
|
|
; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <2 x double> [[ADD]], <2 x double> poison, <2 x i32> <i32 1, i32 0>
|
|
; CHECK-NEXT: [[TMP0:%.*]] = shufflevector <2 x double> zeroinitializer, <2 x double> [[SHUFFLE]], <2 x i32> <i32 2, i32 1>
|
|
; CHECK-NEXT: [[TMP1:%.*]] = fmul <2 x double> [[SHUFFLE]], zeroinitializer
|
|
; CHECK-NEXT: [[TMP2:%.*]] = extractelement <2 x double> [[TMP1]], i32 0
|
|
; CHECK-NEXT: [[TMP3:%.*]] = extractelement <2 x double> [[TMP1]], i32 1
|
|
; CHECK-NEXT: [[ADD1:%.*]] = fadd double [[TMP2]], [[TMP3]]
|
|
; CHECK-NEXT: [[MUL1:%.*]] = fmul double [[ADD1]], 0.000000e+00
|
|
; CHECK-NEXT: store double [[MUL1]], double* null, align 16
|
|
; CHECK-NEXT: ret i32 0
|
|
;
|
|
label:
|
|
%0 = extractelement <2 x double> zeroinitializer, i64 1
|
|
%1 = extractelement <2 x double> zeroinitializer, i64 0
|
|
%add = fadd <2 x double> zeroinitializer, zeroinitializer
|
|
%extract1 = extractelement <2 x double> %add, i64 1
|
|
%2 = fmul double %extract1, %1
|
|
%insert = insertelement <2 x double> zeroinitializer, double %extract1, i64 0
|
|
%extract0 = extractelement <2 x double> %add, i64 0
|
|
%mul = fmul double %extract0, %0
|
|
%add1 = fadd double %2, %mul
|
|
%mul1 = fmul double %add1, 0.000000e+00
|
|
store double %mul1, double* null, align 16
|
|
ret i32 0
|
|
}
|