Skip to content

Commit aba39c3

Browse files
authored
[System] Precommit of test for #112491 (#113704)
1 parent e47bf3d commit aba39c3

File tree

1 file changed

+128
-0
lines changed

1 file changed

+128
-0
lines changed
Lines changed: 128 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
; RUN: opt < %s -mtriple=s390x-unknown-linux -mcpu=z16 -S -passes=slp-vectorizer \
2+
; RUN: -pass-remarks-output=%t | FileCheck %s
3+
; RUN: cat %t | FileCheck -check-prefix=REMARK %s
4+
;
5+
; NB! This is a pre-commit version (for #112491) with current codegen and remarks.
6+
;
7+
; Test functions that (at least currently) only gets vectorized if the
8+
; insertion cost for an element load is counted as free.
9+
10+
; This function needs the free element load to be recognized in SLP
11+
; getGatherCost().
12+
define void @fun0(ptr nocapture %0, double %1) {
13+
; CHECK-LABEL: define void @fun0(
14+
; CHECK: fmul double
15+
; CHECK: call double @llvm.fmuladd.f64(
16+
; CHECK-NEXT: call double @llvm.fmuladd.f64(
17+
; CHECK-NEXT: call double @llvm.sqrt.f64(
18+
; CHECK: fmul double
19+
; CHECK: call double @llvm.fmuladd.f64(
20+
; CHECK-NEXT: call double @llvm.fmuladd.f64(
21+
; CHECK-NEXT: call double @llvm.sqrt.f64(
22+
;
23+
; REMARK-LABEL: Function: fun0
24+
; REMARK: Args:
25+
; REMARK-NEXT: - String: 'List vectorization was possible but not beneficial with cost '
26+
; REMARK-NEXT: - Cost: '0'
27+
28+
%3 = fmul double %1, 2.000000e+00
29+
%4 = tail call double @llvm.fmuladd.f64(double %3, double %3, double 0.000000e+00)
30+
%5 = tail call double @llvm.fmuladd.f64(double %3, double %3, double %4)
31+
%sqrt1 = tail call double @llvm.sqrt.f64(double %5)
32+
%6 = load double, ptr %0, align 8
33+
%7 = fmul double %6, 2.000000e+00
34+
%8 = tail call double @llvm.fmuladd.f64(double %7, double %7, double 0.000000e+00)
35+
%9 = tail call double @llvm.fmuladd.f64(double %7, double %7, double %8)
36+
%sqrt = tail call double @llvm.sqrt.f64(double %9)
37+
%10 = fadd double %sqrt1, %sqrt
38+
store double %10, ptr %0, align 8
39+
ret void
40+
}
41+
42+
; This function needs the element-load to be recognized in SystemZ
43+
; getVectorInstrCost().
44+
define void @fun1(double %0) {
45+
; CHECK-LABEL: define void @fun1(
46+
; CHECK: phi double
47+
; CHECK-NEXT: phi double
48+
; CHECK-NEXT: phi double
49+
; CHECK-NEXT: phi double
50+
; CHECK-NEXT: phi double
51+
; CHECK-NEXT: phi double
52+
; CHECK-NEXT: fsub double
53+
; CHECK-NEXT: fsub double
54+
; CHECK-NEXT: fmul double
55+
; CHECK-NEXT: fmul double
56+
; CHECK-NEXT: fsub double
57+
; CHECK-NEXT: fsub double
58+
; CHECK-NEXT: call double @llvm.fmuladd.f64(
59+
; CHECK-NEXT: call double @llvm.fmuladd.f64(
60+
; CHECK-NEXT: fsub double
61+
; CHECK-NEXT: fsub double
62+
; CHECK-NEXT: call double @llvm.fmuladd.f64(
63+
; CHECK-NEXT: call double @llvm.fmuladd.f64(
64+
; CHECK: fcmp olt double
65+
; CHECK-NEXT: fcmp olt double
66+
; CHECK-NEXT: or i1
67+
;
68+
; REMARK-LABEL: Function: fun1
69+
; REMARK: Args:
70+
; REMARK: - String: 'List vectorization was possible but not beneficial with cost '
71+
; REMARK-NEXT: - Cost: '0'
72+
73+
br label %2
74+
75+
2:
76+
%3 = phi double [ poison, %1 ], [ poison, %2 ]
77+
%4 = phi double [ undef, %1 ], [ poison, %2 ]
78+
%5 = phi double [ 0.000000e+00, %1 ], [ poison, %2 ]
79+
%6 = phi double [ 0.000000e+00, %1 ], [ poison, %2 ]
80+
%7 = phi double [ 0.000000e+00, %1 ], [ poison, %2 ]
81+
%8 = phi double [ 0.000000e+00, %1 ], [ %21, %2 ]
82+
%9 = fsub double 0.000000e+00, %8
83+
%10 = fsub double 0.000000e+00, %7
84+
%11 = fmul double %9, 0.000000e+00
85+
%12 = fmul double %10, 0.000000e+00
86+
%13 = fsub double 0.000000e+00, %6
87+
%14 = fsub double 0.000000e+00, %5
88+
%15 = tail call double @llvm.fmuladd.f64(double %13, double %13, double %11)
89+
%16 = tail call double @llvm.fmuladd.f64(double %14, double %14, double %12)
90+
%17 = fsub double 0.000000e+00, %4
91+
%18 = fsub double 0.000000e+00, %3
92+
%19 = tail call double @llvm.fmuladd.f64(double %17, double %17, double %15)
93+
%20 = tail call double @llvm.fmuladd.f64(double %18, double %18, double %16)
94+
%21 = load double, ptr null, align 8
95+
%22 = fcmp olt double %19, %0
96+
%23 = fcmp olt double %20, 0.000000e+00
97+
%24 = or i1 %23, %22
98+
br label %2
99+
}
100+
101+
declare double @llvm.fmuladd.f64(double, double, double)
102+
103+
; This should *not* be vectorized as the insertion into the vector isn't free,
104+
; which is recognized in SystemZTTImpl::getScalarizationOverhead().
105+
define void @fun2(ptr %0, ptr %Dst) {
106+
; CHECK-LABEL: define void @fun2(
107+
; CHECK: insertelement
108+
; CHECK: store <2 x i64>
109+
;
110+
; REMARK-LABEL: Function: fun2
111+
; REMARK: Args:
112+
; REMARK-NEXT: - String: 'Stores SLP vectorized with cost '
113+
; REMARK-NEXT: - Cost: '-1'
114+
115+
%3 = load i64, ptr %0, align 8
116+
%4 = icmp eq i64 %3, 0
117+
br i1 %4, label %5, label %6
118+
119+
5:
120+
ret void
121+
122+
6:
123+
%7 = getelementptr i8, ptr %Dst, i64 24
124+
store i64 %3, ptr %7, align 8
125+
%8 = getelementptr i8, ptr %Dst, i64 16
126+
store i64 0, ptr %8, align 8
127+
br label %5
128+
}

0 commit comments

Comments
 (0)