xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/multi-node-vectorized-insts.ll (revision 706e71076e0276747e7ae94e3f8a7f73a45e5b6e)
1*706e7107SElvina Yakubova; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
2*706e7107SElvina Yakubova; RUN: %if x86-registered-target %{ opt -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s %}
3*706e7107SElvina Yakubova; RUN: %if aarch64-registered-target %{ opt -passes=slp-vectorizer -S -mtriple=aarch64-unknown-linux-gnu < %s | FileCheck %s %}
4*706e7107SElvina Yakubova
5*706e7107SElvina Yakubovadefine void @test(double %0) {
6*706e7107SElvina Yakubova; CHECK-LABEL: define void @test(
7*706e7107SElvina Yakubova; CHECK-SAME: double [[TMP0:%.*]]) {
8*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[TMP0]], i32 0
9*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <2 x double> [[TMP2]], <2 x double> poison, <2 x i32> zeroinitializer
10*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[TMP4:%.*]]
11*706e7107SElvina Yakubova; CHECK:       4:
12*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP5:%.*]] = fsub <2 x double> zeroinitializer, [[TMP3]]
13*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP6:%.*]] = fsub <2 x double> zeroinitializer, [[TMP3]]
14*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[DOTBACKEDGE:%.*]]
15*706e7107SElvina Yakubova; CHECK:       .backedge:
16*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP7:%.*]] = fmul <2 x double> [[TMP5]], [[TMP6]]
17*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP8:%.*]] = fcmp olt <2 x double> [[TMP7]], zeroinitializer
18*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[TMP4]]
19*706e7107SElvina Yakubova;
20*706e7107SElvina Yakubova  br label %2
21*706e7107SElvina Yakubova
22*706e7107SElvina Yakubova2:
23*706e7107SElvina Yakubova  %3 = fsub double 0.000000e+00, %0
24*706e7107SElvina Yakubova  %4 = fsub double 0.000000e+00, %0
25*706e7107SElvina Yakubova  %5 = fsub double 0.000000e+00, %0
26*706e7107SElvina Yakubova  br label %.backedge
27*706e7107SElvina Yakubova
28*706e7107SElvina Yakubova.backedge:
29*706e7107SElvina Yakubova  %6 = fmul double %4, %5
30*706e7107SElvina Yakubova  %7 = fcmp olt double %6, 0.000000e+00
31*706e7107SElvina Yakubova  %8 = fmul double %5, %3
32*706e7107SElvina Yakubova  %9 = fcmp olt double %8, 0.000000e+00
33*706e7107SElvina Yakubova  br label %2
34*706e7107SElvina Yakubova}
35*706e7107SElvina Yakubova
36*706e7107SElvina Yakubovadefine void @test1(double %0, <4 x double> %v) {
37*706e7107SElvina Yakubova; CHECK-LABEL: define void @test1(
38*706e7107SElvina Yakubova; CHECK-SAME: double [[TMP0:%.*]], <4 x double> [[V:%.*]]) {
39*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP2:%.*]] = shufflevector <4 x double> [[V]], <4 x double> poison, <2 x i32> <i32 poison, i32 0>
40*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP3:%.*]] = insertelement <2 x double> [[TMP2]], double [[TMP0]], i32 0
41*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP4:%.*]] = shufflevector <2 x double> [[TMP3]], <2 x double> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 0>
42*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[TMP5:%.*]]
43*706e7107SElvina Yakubova; CHECK:       5:
44*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP6:%.*]] = fsub <4 x double> <double 1.000000e+00, double 2.000000e+00, double 3.000000e+00, double 4.000000e+00>, [[V]]
45*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP7:%.*]] = fsub <4 x double> <double 0.000000e+00, double 1.000000e+00, double 0.000000e+00, double 0.000000e+00>, [[TMP4]]
46*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[DOTBACKEDGE:%.*]]
47*706e7107SElvina Yakubova; CHECK:       .backedge:
48*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP8:%.*]] = fmul <4 x double> [[TMP7]], [[TMP6]]
49*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP9:%.*]] = fcmp olt <4 x double> [[TMP8]], zeroinitializer
50*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[TMP5]]
51*706e7107SElvina Yakubova;
52*706e7107SElvina Yakubova  %e0 = extractelement <4 x double> %v, i32 0
53*706e7107SElvina Yakubova  %e1 = extractelement <4 x double> %v, i32 1
54*706e7107SElvina Yakubova  %e2 = extractelement <4 x double> %v, i32 2
55*706e7107SElvina Yakubova  %e3 = extractelement <4 x double> %v, i32 3
56*706e7107SElvina Yakubova  br label %2
57*706e7107SElvina Yakubova
58*706e7107SElvina Yakubova2:
59*706e7107SElvina Yakubova  %m1 = fsub double 1.000000e+00, %e0
60*706e7107SElvina Yakubova  %m2 = fsub double 2.000000e+00, %e1
61*706e7107SElvina Yakubova  %m3 = fsub double 3.000000e+00, %e2
62*706e7107SElvina Yakubova  %m4 = fsub double 4.000000e+00, %e3
63*706e7107SElvina Yakubova  %3 = fsub double 0.000000e+00, %0
64*706e7107SElvina Yakubova  %4 = fsub double 0.000000e+00, %0
65*706e7107SElvina Yakubova  %5 = fsub double 0.000000e+00, %0
66*706e7107SElvina Yakubova  br label %.backedge
67*706e7107SElvina Yakubova
68*706e7107SElvina Yakubova.backedge:
69*706e7107SElvina Yakubova  %6 = fmul double %m1, %m2
70*706e7107SElvina Yakubova  %7 = fcmp olt double %6, 0.000000e+00
71*706e7107SElvina Yakubova  %8 = fmul double %3, %m1
72*706e7107SElvina Yakubova  %9 = fcmp olt double %8, 0.000000e+00
73*706e7107SElvina Yakubova  %10 = fmul double %4, %m3
74*706e7107SElvina Yakubova  %11 = fcmp olt double %10, 0.000000e+00
75*706e7107SElvina Yakubova  %12 = fmul double %5, %m4
76*706e7107SElvina Yakubova  %13 = fcmp olt double %12, 0.000000e+00
77*706e7107SElvina Yakubova  br label %2
78*706e7107SElvina Yakubova}
79*706e7107SElvina Yakubova
80*706e7107SElvina Yakubovadefine void @test2(double %0) {
81*706e7107SElvina Yakubova; CHECK-LABEL: define void @test2(
82*706e7107SElvina Yakubova; CHECK-SAME: double [[TMP0:%.*]]) {
83*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <2 x double> poison, double [[TMP0]], i32 0
84*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP3:%.*]] = shufflevector <2 x double> [[TMP2]], <2 x double> poison, <2 x i32> zeroinitializer
85*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[TMP4:%.*]]
86*706e7107SElvina Yakubova; CHECK:       4:
87*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP5:%.*]] = fsub <2 x double> <double 3.000000e+00, double 2.000000e+00>, [[TMP3]]
88*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP6:%.*]] = fsub <2 x double> <double 3.000000e+00, double 1.000000e+00>, [[TMP3]]
89*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[DOTBACKEDGE:%.*]]
90*706e7107SElvina Yakubova; CHECK:       .backedge:
91*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP7:%.*]] = fmul <2 x double> [[TMP5]], [[TMP6]]
92*706e7107SElvina Yakubova; CHECK-NEXT:    [[TMP8:%.*]] = fcmp olt <2 x double> [[TMP7]], zeroinitializer
93*706e7107SElvina Yakubova; CHECK-NEXT:    br label [[TMP4]]
94*706e7107SElvina Yakubova;
95*706e7107SElvina Yakubova  br label %2
96*706e7107SElvina Yakubova
97*706e7107SElvina Yakubova2:
98*706e7107SElvina Yakubova  %3 = fsub double 1.000000e+00, %0
99*706e7107SElvina Yakubova  %4 = fsub double 2.000000e+00, %0
100*706e7107SElvina Yakubova  %5 = fsub double 3.000000e+00, %0
101*706e7107SElvina Yakubova  br label %.backedge
102*706e7107SElvina Yakubova
103*706e7107SElvina Yakubova.backedge:
104*706e7107SElvina Yakubova  %6 = fmul double %4, %3
105*706e7107SElvina Yakubova  %7 = fcmp olt double %6, 0.000000e+00
106*706e7107SElvina Yakubova  %8 = fmul double %5, %5
107*706e7107SElvina Yakubova  %9 = fcmp olt double %8, 0.000000e+00
108*706e7107SElvina Yakubova  br label %2
109*706e7107SElvina Yakubova}
110*706e7107SElvina Yakubova
111