Files
clang-p2996/llvm/test/Transforms/SLPVectorizer/X86/split-node-last-inst-vectorized.ll
Alexey Bataev aaaa2a325b [SLP]Support vectorization of previously vectorized scalars in split nodes
Patch removes the restriction for the revectorization of the previously
vectorized scalars in split nodes, and moves the cost profitability
check to avoid regressions.

Reviewers: hiraditya, RKSimon

Reviewed By: RKSimon

Pull Request: https://github.com/llvm/llvm-project/pull/134286
2025-04-10 12:06:38 -04:00

99 lines
4.0 KiB
LLVM

; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
define void @test(ptr %0, <8 x i8> %1) {
; CHECK-LABEL: define void @test(
; CHECK-SAME: ptr [[TMP0:%.*]], <8 x i8> [[TMP1:%.*]]) {
; CHECK-NEXT: [[TMP3:%.*]] = load i8, ptr [[TMP0]], align 2
; CHECK-NEXT: [[TMP4:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13436
; CHECK-NEXT: [[TMP8:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13444
; CHECK-NEXT: [[TMP6:%.*]] = load i8, ptr [[TMP8]], align 4
; CHECK-NEXT: [[TMP11:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13544
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[TMP0]], i64 13536
; CHECK-NEXT: [[TMP7:%.*]] = load <8 x i8>, ptr [[TMP4]], align 4
; CHECK-NEXT: [[TMP12:%.*]] = insertelement <8 x i8> poison, i8 [[TMP6]], i32 0
; CHECK-NEXT: [[TMP9:%.*]] = insertelement <8 x i8> [[TMP12]], i8 [[TMP3]], i32 1
; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <8 x i8> [[TMP9]], <8 x i8> poison, <8 x i32> <i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1>
; CHECK-NEXT: [[TMP13:%.*]] = or <8 x i8> [[TMP10]], [[TMP7]]
; CHECK-NEXT: store <8 x i8> [[TMP13]], ptr [[TMP11]], align 4
; CHECK-NEXT: [[TMP14:%.*]] = shufflevector <8 x i8> [[TMP1]], <8 x i8> poison, <8 x i32> <i32 0, i32 0, i32 2, i32 3, i32 4, i32 5, i32 0, i32 7>
; CHECK-NEXT: [[TMP15:%.*]] = or <8 x i8> [[TMP7]], [[TMP14]]
; CHECK-NEXT: store <8 x i8> [[TMP15]], ptr [[TMP5]], align 4
; CHECK-NEXT: ret void
;
%3 = load i8, ptr %0, align 2
%4 = getelementptr i8, ptr %0, i64 13442
%5 = load i8, ptr %4, align 2
%6 = or i8 %5, %3
%7 = getelementptr i8, ptr %0, i64 13550
store i8 %6, ptr %7, align 2
%8 = extractelement <8 x i8> %1, i64 0
%9 = or i8 %5, %8
%10 = getelementptr i8, ptr %0, i64 13542
store i8 %9, ptr %10, align 2
%11 = getelementptr i8, ptr %0, i64 13438
%12 = load i8, ptr %11, align 2
%13 = or i8 %12, %3
%14 = getelementptr i8, ptr %0, i64 13546
store i8 %13, ptr %14, align 2
%15 = extractelement <8 x i8> %1, i64 2
%16 = or i8 %12, %15
%17 = getelementptr i8, ptr %0, i64 13538
store i8 %16, ptr %17, align 2
%18 = getelementptr i8, ptr %0, i64 13440
%19 = load i8, ptr %18, align 4
%20 = or i8 %19, %3
%21 = getelementptr i8, ptr %0, i64 13548
store i8 %20, ptr %21, align 4
%22 = extractelement <8 x i8> %1, i64 4
%23 = or i8 %19, %22
%24 = getelementptr i8, ptr %0, i64 13540
store i8 %23, ptr %24, align 4
%25 = getelementptr i8, ptr %0, i64 13436
%26 = load i8, ptr %25, align 4
%27 = getelementptr i8, ptr %0, i64 13444
%28 = load i8, ptr %27, align 4
%29 = or i8 %28, %26
%30 = getelementptr i8, ptr %0, i64 13544
store i8 %29, ptr %30, align 4
%31 = or i8 %26, %8
%32 = getelementptr i8, ptr %0, i64 13536
store i8 %31, ptr %32, align 4
%33 = getelementptr i8, ptr %0, i64 13443
%34 = load i8, ptr %33, align 1
%35 = or i8 %34, %3
%36 = getelementptr i8, ptr %0, i64 13551
store i8 %35, ptr %36, align 1
%37 = extractelement <8 x i8> %1, i64 7
%38 = or i8 %34, %37
%39 = getelementptr i8, ptr %0, i64 13543
store i8 %38, ptr %39, align 1
%40 = getelementptr i8, ptr %0, i64 13439
%41 = load i8, ptr %40, align 1
%42 = or i8 %41, %3
%43 = getelementptr i8, ptr %0, i64 13547
store i8 %42, ptr %43, align 1
%44 = extractelement <8 x i8> %1, i64 3
%45 = or i8 %41, %44
%46 = getelementptr i8, ptr %0, i64 13539
store i8 %45, ptr %46, align 1
%47 = getelementptr i8, ptr %0, i64 13441
%48 = load i8, ptr %47, align 1
%49 = or i8 %48, %3
%50 = getelementptr i8, ptr %0, i64 13549
store i8 %49, ptr %50, align 1
%51 = extractelement <8 x i8> %1, i64 5
%52 = or i8 %48, %51
%53 = getelementptr i8, ptr %0, i64 13541
store i8 %52, ptr %53, align 1
%54 = getelementptr i8, ptr %0, i64 13437
%55 = load i8, ptr %54, align 1
%56 = or i8 %55, %3
%57 = getelementptr i8, ptr %0, i64 13545
store i8 %56, ptr %57, align 1
%58 = or i8 %55, %8
%59 = getelementptr i8, ptr %0, i64 13537
store i8 %58, ptr %59, align 1
ret void
}