Skip to content

Commit e971feb

Browse files
[SLP][NFC]Add an extra test for gathered splats, NFC
Reviewers: Pull Request: llvm/llvm-project#219805
1 parent d30aede commit e971feb

1 file changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5
2+
; RUN: opt -passes=slp-vectorizer -S -mtriple=riscv64 --mattr=+v,+zvl256b -slp-threshold=-7 < %s | FileCheck %s
3+
4+
define void @splat_trim(ptr %A, ptr %C, ptr %D, ptr %F, ptr %S, ptr %E, ptr %B) {
5+
; CHECK-LABEL: define void @splat_trim(
6+
; CHECK-SAME: ptr [[A:%.*]], ptr [[C:%.*]], ptr [[D:%.*]], ptr [[F:%.*]], ptr [[S:%.*]], ptr [[E:%.*]], ptr [[B:%.*]]) #[[ATTR0:[0-9]+]] {
7+
; CHECK-NEXT: [[ENTRY:.*:]]
8+
; CHECK-NEXT: [[A0:%.*]] = load i64, ptr [[A]], align 8
9+
; CHECK-NEXT: [[B0:%.*]] = load i64, ptr [[B]], align 8
10+
; CHECK-NEXT: [[C0:%.*]] = load i64, ptr [[C]], align 8
11+
; CHECK-NEXT: [[D0:%.*]] = load i64, ptr [[D]], align 8
12+
; CHECK-NEXT: [[E0:%.*]] = load i64, ptr [[E]], align 8
13+
; CHECK-NEXT: [[F0:%.*]] = load i64, ptr [[F]], align 8
14+
; CHECK-NEXT: [[TMP0:%.*]] = insertelement <2 x i64> poison, i64 [[A0]], i64 0
15+
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i64> [[TMP0]], i64 [[B0]], i64 1
16+
; CHECK-NEXT: [[TMP2:%.*]] = add <2 x i64> splat (i64 1), [[TMP1]]
17+
; CHECK-NEXT: [[TMP7:%.*]] = extractelement <2 x i64> [[TMP2]], i64 1
18+
; CHECK-NEXT: [[TMP8:%.*]] = extractelement <2 x i64> [[TMP2]], i64 0
19+
; CHECK-NEXT: [[TMP4:%.*]] = insertelement <2 x i64> poison, i64 [[E0]], i64 0
20+
; CHECK-NEXT: [[TMP5:%.*]] = insertelement <2 x i64> [[TMP4]], i64 [[B0]], i64 1
21+
; CHECK-NEXT: [[TMP6:%.*]] = add <2 x i64> splat (i64 1), [[TMP5]]
22+
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <2 x i64> [[TMP6]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 0, i32 0>
23+
; CHECK-NEXT: [[AS2:%.*]] = add i64 [[TMP8]], [[TMP7]]
24+
; CHECK-NEXT: [[AS3:%.*]] = sub i64 [[TMP8]], [[TMP7]]
25+
; CHECK-NEXT: [[SH2:%.*]] = lshr i64 [[AS2]], [[E0]]
26+
; CHECK-NEXT: [[SH3:%.*]] = shl i64 [[AS3]], [[F0]]
27+
; CHECK-NEXT: [[AS13:%.*]] = sub i64 [[SH2]], [[E0]]
28+
; CHECK-NEXT: [[AS12:%.*]] = add i64 [[SH3]], [[F0]]
29+
; CHECK-NEXT: [[TMP23:%.*]] = insertelement <2 x i64> poison, i64 [[TMP8]], i64 0
30+
; CHECK-NEXT: [[TMP9:%.*]] = shufflevector <2 x i64> [[TMP23]], <2 x i64> poison, <2 x i32> zeroinitializer
31+
; CHECK-NEXT: [[TMP24:%.*]] = insertelement <2 x i64> poison, i64 [[TMP7]], i64 0
32+
; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x i64> [[TMP24]], <2 x i64> poison, <2 x i32> zeroinitializer
33+
; CHECK-NEXT: [[TMP11:%.*]] = add <2 x i64> [[TMP9]], [[TMP10]]
34+
; CHECK-NEXT: [[TMP12:%.*]] = insertelement <2 x i64> poison, i64 [[C0]], i64 0
35+
; CHECK-NEXT: [[TMP13:%.*]] = insertelement <2 x i64> [[TMP12]], i64 [[D0]], i64 1
36+
; CHECK-NEXT: [[TMP14:%.*]] = shl <2 x i64> [[TMP11]], [[TMP13]]
37+
; CHECK-NEXT: [[TMP15:%.*]] = lshr <2 x i64> [[TMP11]], [[TMP13]]
38+
; CHECK-NEXT: [[TMP16:%.*]] = shufflevector <2 x i64> [[TMP14]], <2 x i64> [[TMP15]], <2 x i32> <i32 0, i32 3>
39+
; CHECK-NEXT: [[TMP17:%.*]] = add <2 x i64> [[TMP16]], [[TMP13]]
40+
; CHECK-NEXT: [[TMP18:%.*]] = shufflevector <2 x i64> [[TMP17]], <2 x i64> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
41+
; CHECK-NEXT: [[TMP19:%.*]] = insertelement <4 x i64> [[TMP18]], i64 [[AS12]], i64 2
42+
; CHECK-NEXT: [[TMP20:%.*]] = insertelement <4 x i64> [[TMP19]], i64 [[AS13]], i64 3
43+
; CHECK-NEXT: [[TMP21:%.*]] = add <4 x i64> [[TMP20]], splat (i64 1)
44+
; CHECK-NEXT: [[TMP22:%.*]] = add <4 x i64> [[TMP21]], [[TMP3]]
45+
; CHECK-NEXT: store <4 x i64> [[TMP22]], ptr [[S]], align 8
46+
; CHECK-NEXT: ret void
47+
;
48+
entry:
49+
%A0 = load i64, ptr %A, align 8
50+
%B0 = load i64, ptr %B, align 8
51+
%C0 = load i64, ptr %C, align 8
52+
%D0 = load i64, ptr %D, align 8
53+
%E0 = load i64, ptr %E, align 8
54+
%F0 = load i64, ptr %F, align 8
55+
56+
%v1 = add i64 1, %A0
57+
%v2 = add i64 1, %B0
58+
%v3 = add i64 1, %E0
59+
60+
%AS0 = add i64 %v1, %v2
61+
%AS1 = add i64 %v1, %v2
62+
%AS2 = add i64 %v1, %v2
63+
%AS3 = sub i64 %v1, %v2
64+
65+
%Sh0 = shl i64 %AS0, %C0
66+
%Sh1 = lshr i64 %AS1, %D0
67+
%Sh2 = lshr i64 %AS2, %E0
68+
%Sh3 = shl i64 %AS3, %F0
69+
70+
%AS10 = add i64 %Sh0, %C0
71+
%AS11 = add i64 %Sh1, %D0
72+
%AS12 = add i64 %Sh3, %F0
73+
%AS13 = sub i64 %Sh2, %E0
74+
75+
%AS20 = add i64 %AS10, 1
76+
%AS21 = add i64 %AS11, 1
77+
%AS22 = add i64 %AS12, 1
78+
%AS23 = add i64 %AS13, 1
79+
80+
%Add0 = add i64 %AS20, %v3
81+
%Add1 = add i64 %AS21, %v2
82+
%Add2 = add i64 %AS22, %v3
83+
%Add3 = add i64 %AS23, %v3
84+
85+
%idxS1 = getelementptr inbounds i64, ptr %S, i64 1
86+
%idxS2 = getelementptr inbounds i64, ptr %S, i64 2
87+
%idxS3 = getelementptr inbounds i64, ptr %S, i64 3
88+
89+
store i64 %Add0, ptr %S, align 8
90+
store i64 %Add1, ptr %idxS1, align 8
91+
store i64 %Add2, ptr %idxS2, align 8
92+
store i64 %Add3, ptr %idxS3, align 8
93+
ret void
94+
}

0 commit comments

Comments
 (0)