Files
clang-p2996/llvm/test/Transforms/SLPVectorizer/X86/splat-buildvector.ll
Alexey Bataev 036e48e2f5 [SLP]Fix PR76850: do the analysis of the submask.
Need to limit the transformation of the VecMask by the corresponding part of the mask of SliceSize size to avoid compiler crash during further cost analysis.
2024-01-08 07:51:02 -08:00

26 lines
1.3 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
; RUN: opt --passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu %s -o - -slp-threshold=-100 | FileCheck %s
declare i64 @llvm.smax.i64(i64, i64)
define i8 @foo(i64 %val_i64_57) {
; CHECK-LABEL: define i8 @foo(
; CHECK-SAME: i64 [[VAL_I64_57:%.*]]) {
; CHECK-NEXT: entry_1:
; CHECK-NEXT: [[VAL_I64_58:%.*]] = call i64 @llvm.smax.i64(i64 0, i64 1)
; CHECK-NEXT: [[TMP0:%.*]] = insertelement <4 x i64> <i64 0, i64 poison, i64 poison, i64 0>, i64 [[VAL_I64_57]], i32 1
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <4 x i64> [[TMP0]], i64 [[VAL_I64_58]], i32 2
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <4 x i64> [[TMP1]], <4 x i64> poison, <4 x i32> <i32 2, i32 2, i32 0, i32 1>
; CHECK-NEXT: [[TMP3:%.*]] = icmp ule <4 x i64> [[TMP1]], [[TMP2]]
; CHECK-NEXT: [[TMP4:%.*]] = icmp sle <4 x i64> [[TMP1]], [[TMP2]]
; CHECK-NEXT: [[TMP5:%.*]] = shufflevector <4 x i1> [[TMP3]], <4 x i1> [[TMP4]], <4 x i32> <i32 0, i32 1, i32 2, i32 7>
; CHECK-NEXT: ret i8 0
;
entry_1:
%val_i64_58 = call i64 @llvm.smax.i64(i64 0, i64 1)
%val_i1_89 = icmp ule i64 %val_i64_57, %val_i64_58
%val_i1_95 = icmp sle i64 0, undef
%val_i1_98 = icmp uge i64 %val_i64_58, %val_i64_58
%val_i1_99 = icmp ule i64 0, %val_i64_58
ret i8 0
}