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
99 lines
4.0 KiB
LLVM
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
|
|
}
|