[LLVM][IR] Use splat syntax when printing ConstantExpr based splats. (#116856)
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / X86 / multi-tracked-reduced-value.ll
blobe012cc60960b3caa0b7f3737f31673397c31bf1a
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2 ; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
4 define i8 @test() {
5 ; CHECK-LABEL: define i8 @test() {
6 ; CHECK-NEXT:  [[ENTRY:.*:]]
7 ; CHECK-NEXT:    [[TMP0:%.*]] = trunc i32 0 to i8
8 ; CHECK-NEXT:    [[TMP1:%.*]] = trunc i32 0 to i8
9 ; CHECK-NEXT:    [[TMP2:%.*]] = trunc i32 0 to i8
10 ; CHECK-NEXT:    [[TMP3:%.*]] = trunc i32 0 to i8
11 ; CHECK-NEXT:    [[TMP4:%.*]] = call i8 @llvm.vector.reduce.or.v8i8(<8 x i8> zeroinitializer)
12 ; CHECK-NEXT:    [[OP_RDX:%.*]] = or i8 [[TMP4]], [[TMP0]]
13 ; CHECK-NEXT:    [[OP_RDX1:%.*]] = or i8 [[OP_RDX]], [[TMP2]]
14 ; CHECK-NEXT:    [[OP_RDX2:%.*]] = or i8 [[OP_RDX1]], [[TMP0]]
15 ; CHECK-NEXT:    [[OP_RDX3:%.*]] = or i8 [[OP_RDX2]], [[TMP1]]
16 ; CHECK-NEXT:    [[OP_RDX4:%.*]] = or i8 [[OP_RDX3]], [[TMP3]]
17 ; CHECK-NEXT:    ret i8 [[OP_RDX4]]
19 entry:
20   %0 = trunc i32 0 to i8
21   %1 = add i8 %0, 0
22   %2 = add i8 %0, 0
23   %3 = add i8 %0, 0
24   %4 = add i8 %0, 0
25   %5 = trunc i32 0 to i8
26   %6 = or i8 %5, %0
27   %7 = or i8 %6, %2
28   %8 = or i8 %7, %3
29   %9 = or i8 %8, %0
30   %10 = or i8 %9, %4
31   %conv4 = or i8 %10, %1
32   %11 = trunc i32 0 to i8
33   %12 = add i8 %11, 0
34   %conv7 = or i8 %conv4, %12
35   %13 = add i8 %11, 0
36   %14 = add i8 %11, 0
37   %15 = add i8 %11, 0
38   %16 = trunc i32 0 to i8
39   %17 = or i8 %13, %16
40   %18 = or i8 %17, %14
41   %19 = or i8 %18, %11
42   %20 = or i8 %19, %15
43   %conv5 = or i8 %20, %conv7
44   %21 = trunc i32 0 to i8
45   %conv6 = or i8 %21, %conv5
46   ret i8 %conv6