Skip to content

Commit 66e18b8

Browse files
committed
[SLP][NFC]Add a test with single op inst, used in many nodes, NFC.
1 parent a059afa commit 66e18b8

File tree

1 file changed

+123
-0
lines changed

1 file changed

+123
-0
lines changed
Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
2+
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu -mcpu=icelake-server -slp-threshold=-37 < %s | FileCheck %s
3+
4+
declare double @llvm.fmuladd.f64(double, double, double)
5+
6+
define void @test(ptr %this, ptr %0, double %1) {
7+
; CHECK-LABEL: define void @test(
8+
; CHECK-SAME: ptr [[THIS:%.*]], ptr [[TMP0:%.*]], double [[TMP1:%.*]]) #[[ATTR1:[0-9]+]] {
9+
; CHECK-NEXT: [[IF_ELSE:.*:]]
10+
; CHECK-NEXT: [[TMP2:%.*]] = load double, ptr [[TMP0]], align 8
11+
; CHECK-NEXT: [[ARRAYIDX_I1464:%.*]] = getelementptr i8, ptr [[TMP0]], i64 8
12+
; CHECK-NEXT: [[TMP3:%.*]] = load double, ptr [[ARRAYIDX_I1464]], align 8
13+
; CHECK-NEXT: [[TMP4:%.*]] = load double, ptr [[THIS]], align 8
14+
; CHECK-NEXT: [[DIV251:%.*]] = fmul double [[TMP1]], 0.000000e+00
15+
; CHECK-NEXT: [[MUL257:%.*]] = fmul double [[TMP4]], 0.000000e+00
16+
; CHECK-NEXT: [[MUL305:%.*]] = fmul double [[TMP4]], 0.000000e+00
17+
; CHECK-NEXT: [[TMP5:%.*]] = fneg double [[TMP2]]
18+
; CHECK-NEXT: [[NEG356:%.*]] = fmul double [[TMP1]], [[TMP5]]
19+
; CHECK-NEXT: [[TMP6:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG356]], double 0.000000e+00, double 0.000000e+00)
20+
; CHECK-NEXT: [[TMP7:%.*]] = load ptr, ptr [[THIS]], align 8
21+
; CHECK-NEXT: [[TMP8:%.*]] = fneg double [[TMP3]]
22+
; CHECK-NEXT: [[NEG380:%.*]] = fmul double [[TMP1]], [[TMP8]]
23+
; CHECK-NEXT: [[TMP9:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG380]], double 0.000000e+00, double [[MUL257]])
24+
; CHECK-NEXT: [[FNEG381:%.*]] = fneg double [[TMP9]]
25+
; CHECK-NEXT: [[TMP10:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG380]], double 0.000000e+00, double 0.000000e+00)
26+
; CHECK-NEXT: [[TMP11:%.*]] = insertelement <2 x double> poison, double [[DIV251]], i32 0
27+
; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <2 x double> [[TMP11]], <2 x double> poison, <2 x i32> zeroinitializer
28+
; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x double> poison, double [[FNEG381]], i32 0
29+
; CHECK-NEXT: [[TMP14:%.*]] = insertelement <2 x double> [[TMP13]], double [[TMP10]], i32 1
30+
; CHECK-NEXT: [[TMP15:%.*]] = fmul <2 x double> [[TMP12]], [[TMP14]]
31+
; CHECK-NEXT: [[NEG417:%.*]] = fneg double [[MUL257]]
32+
; CHECK-NEXT: [[TMP16:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG417]], double 0.000000e+00, double 0.000000e+00)
33+
; CHECK-NEXT: [[FNEG418:%.*]] = fneg double [[TMP16]]
34+
; CHECK-NEXT: [[MUL419:%.*]] = fmul double [[DIV251]], [[FNEG418]]
35+
; CHECK-NEXT: [[NEG436:%.*]] = fmul double [[TMP1]], [[TMP5]]
36+
; CHECK-NEXT: [[TMP17:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG436]], double 0.000000e+00, double 0.000000e+00)
37+
; CHECK-NEXT: [[FNEG437:%.*]] = fneg double [[TMP17]]
38+
; CHECK-NEXT: [[TMP18:%.*]] = fneg double [[TMP4]]
39+
; CHECK-NEXT: [[NEG455:%.*]] = fmul double [[TMP1]], [[TMP18]]
40+
; CHECK-NEXT: [[TMP19:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG455]], double 0.000000e+00, double [[MUL305]])
41+
; CHECK-NEXT: [[TMP20:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG455]], double 0.000000e+00, double 0.000000e+00)
42+
; CHECK-NEXT: [[FNEG474:%.*]] = fneg double [[TMP20]]
43+
; CHECK-NEXT: [[NEG492:%.*]] = fneg double [[MUL305]]
44+
; CHECK-NEXT: [[TMP21:%.*]] = tail call double @llvm.fmuladd.f64(double [[NEG492]], double 0.000000e+00, double 0.000000e+00)
45+
; CHECK-NEXT: [[TMP22:%.*]] = insertelement <4 x double> poison, double [[DIV251]], i32 0
46+
; CHECK-NEXT: [[TMP23:%.*]] = shufflevector <4 x double> [[TMP22]], <4 x double> poison, <4 x i32> zeroinitializer
47+
; CHECK-NEXT: [[TMP24:%.*]] = insertelement <4 x double> poison, double [[FNEG437]], i32 0
48+
; CHECK-NEXT: [[TMP25:%.*]] = insertelement <4 x double> [[TMP24]], double [[TMP19]], i32 1
49+
; CHECK-NEXT: [[TMP26:%.*]] = insertelement <4 x double> [[TMP25]], double [[FNEG474]], i32 2
50+
; CHECK-NEXT: [[TMP27:%.*]] = insertelement <4 x double> [[TMP26]], double [[TMP21]], i32 3
51+
; CHECK-NEXT: [[TMP28:%.*]] = fmul <4 x double> [[TMP23]], [[TMP27]]
52+
; CHECK-NEXT: [[TMP29:%.*]] = insertelement <8 x double> poison, double [[TMP6]], i32 0
53+
; CHECK-NEXT: [[TMP30:%.*]] = shufflevector <2 x double> [[TMP15]], <2 x double> poison, <8 x i32> <i32 0, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
54+
; CHECK-NEXT: [[TMP31:%.*]] = shufflevector <8 x double> [[TMP29]], <8 x double> [[TMP30]], <8 x i32> <i32 0, i32 8, i32 9, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
55+
; CHECK-NEXT: [[TMP32:%.*]] = insertelement <8 x double> [[TMP31]], double [[MUL419]], i32 3
56+
; CHECK-NEXT: [[TMP33:%.*]] = shufflevector <4 x double> [[TMP28]], <4 x double> poison, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison>
57+
; CHECK-NEXT: [[TMP34:%.*]] = shufflevector <8 x double> [[TMP32]], <8 x double> [[TMP33]], <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 8, i32 9, i32 10, i32 11>
58+
; CHECK-NEXT: [[TMP35:%.*]] = fptrunc <8 x double> [[TMP34]] to <8 x float>
59+
; CHECK-NEXT: store <8 x float> [[TMP35]], ptr [[TMP7]], align 4
60+
; CHECK-NEXT: ret void
61+
;
62+
if.else:
63+
%2 = load double, ptr %0, align 8
64+
%arrayidx.i1464 = getelementptr i8, ptr %0, i64 8
65+
%3 = load double, ptr %arrayidx.i1464, align 8
66+
%4 = load double, ptr %this, align 8
67+
%div251 = fmul double %1, 0.000000e+00
68+
%mul257 = fmul double %4, 0.000000e+00
69+
%mul305 = fmul double %4, 0.000000e+00
70+
%5 = fneg double %2
71+
%neg356 = fmul double %1, %5
72+
%6 = tail call double @llvm.fmuladd.f64(double %neg356, double 0.000000e+00, double 0.000000e+00)
73+
%conv358 = fptrunc double %6 to float
74+
%7 = load ptr, ptr %this, align 8
75+
store float %conv358, ptr %7, align 4
76+
%8 = fneg double %3
77+
%neg380 = fmul double %1, %8
78+
%9 = tail call double @llvm.fmuladd.f64(double %neg380, double 0.000000e+00, double %mul257)
79+
%fneg381 = fneg double %9
80+
%mul382 = fmul double %div251, %fneg381
81+
%conv383 = fptrunc double %mul382 to float
82+
%arrayidx.i2136 = getelementptr i8, ptr %7, i64 4
83+
store float %conv383, ptr %arrayidx.i2136, align 4
84+
%10 = tail call double @llvm.fmuladd.f64(double %neg380, double 0.000000e+00, double 0.000000e+00)
85+
%mul400 = fmul double %10, %div251
86+
%conv401 = fptrunc double %mul400 to float
87+
%arrayidx.i2178 = getelementptr i8, ptr %7, i64 8
88+
store float %conv401, ptr %arrayidx.i2178, align 4
89+
%neg417 = fneg double %mul257
90+
%11 = tail call double @llvm.fmuladd.f64(double %neg417, double 0.000000e+00, double 0.000000e+00)
91+
%fneg418 = fneg double %11
92+
%mul419 = fmul double %div251, %fneg418
93+
%conv420 = fptrunc double %mul419 to float
94+
%arrayidx.i2220 = getelementptr i8, ptr %7, i64 12
95+
store float %conv420, ptr %arrayidx.i2220, align 4
96+
%neg436 = fmul double %1, %5
97+
%12 = tail call double @llvm.fmuladd.f64(double %neg436, double 0.000000e+00, double 0.000000e+00)
98+
%fneg437 = fneg double %12
99+
%mul438 = fmul double %div251, %fneg437
100+
%conv439 = fptrunc double %mul438 to float
101+
%arrayidx.i2262 = getelementptr i8, ptr %7, i64 16
102+
store float %conv439, ptr %arrayidx.i2262, align 4
103+
%13 = fneg double %4
104+
%neg455 = fmul double %1, %13
105+
%14 = tail call double @llvm.fmuladd.f64(double %neg455, double 0.000000e+00, double %mul305)
106+
%mul456 = fmul double %14, %div251
107+
%conv457 = fptrunc double %mul456 to float
108+
%arrayidx.i2304 = getelementptr i8, ptr %7, i64 20
109+
store float %conv457, ptr %arrayidx.i2304, align 4
110+
%15 = tail call double @llvm.fmuladd.f64(double %neg455, double 0.000000e+00, double 0.000000e+00)
111+
%fneg474 = fneg double %15
112+
%mul475 = fmul double %div251, %fneg474
113+
%conv476 = fptrunc double %mul475 to float
114+
%arrayidx.i2346 = getelementptr i8, ptr %7, i64 24
115+
store float %conv476, ptr %arrayidx.i2346, align 4
116+
%neg492 = fneg double %mul305
117+
%16 = tail call double @llvm.fmuladd.f64(double %neg492, double 0.000000e+00, double 0.000000e+00)
118+
%mul493 = fmul double %16, %div251
119+
%conv494 = fptrunc double %mul493 to float
120+
%arrayidx.i2388 = getelementptr i8, ptr %7, i64 28
121+
store float %conv494, ptr %arrayidx.i2388, align 4
122+
ret void
123+
}

0 commit comments

Comments
 (0)