Skip to content

Commit 9955d84

Browse files
committed
[SLP][NFC]Add a test with the incorrect shuffled elements of buildvector
1 parent bf34884 commit 9955d84

File tree

1 file changed

+182
-0
lines changed

1 file changed

+182
-0
lines changed
Lines changed: 182 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,182 @@
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-grtev4-linux-gnu < %s | FileCheck %s
3+
4+
define ptr @test(ptr %0, ptr %args_gep) {
5+
; CHECK-LABEL: define ptr @test(
6+
; CHECK-SAME: ptr [[TMP0:%.*]], ptr [[ARGS_GEP:%.*]]) {
7+
; CHECK-NEXT: [[BB:.*:]]
8+
; CHECK-NEXT: [[ARG1:%.*]] = load ptr, ptr [[ARGS_GEP]], align 8
9+
; CHECK-NEXT: [[ARG26:%.*]] = load ptr, ptr [[TMP0]], align 8
10+
; CHECK-NEXT: [[TMP1:%.*]] = load <2 x i32>, ptr [[ARG1]], align 32
11+
; CHECK-NEXT: [[TMP2:%.*]] = shufflevector <2 x i32> [[TMP1]], <2 x i32> poison, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 0, i32 0, i32 0, i32 0>
12+
; CHECK-NEXT: [[TMP3:%.*]] = icmp eq <16 x i32> [[TMP2]], zeroinitializer
13+
; CHECK-NEXT: [[TMP4:%.*]] = zext <16 x i1> [[TMP3]] to <16 x i8>
14+
; CHECK-NEXT: store <16 x i8> [[TMP4]], ptr [[ARG26]], align 32
15+
; CHECK-NEXT: [[TMP5:%.*]] = getelementptr i8, ptr [[ARG26]], i64 17
16+
; CHECK-NEXT: [[TMP6:%.*]] = getelementptr i8, ptr [[ARG1]], i64 8
17+
; CHECK-NEXT: [[TMP7:%.*]] = getelementptr i8, ptr [[ARG1]], i64 12
18+
; CHECK-NEXT: [[TMP8:%.*]] = load i32, ptr [[TMP7]], align 4, !noalias [[META0:![0-9]+]]
19+
; CHECK-NEXT: [[TMP9:%.*]] = load <2 x i32>, ptr [[TMP6]], align 8, !noalias [[META0]]
20+
; CHECK-NEXT: [[TMP10:%.*]] = shufflevector <2 x i32> [[TMP1]], <2 x i32> poison, <4 x i32> <i32 0, i32 1, i32 poison, i32 poison>
21+
; CHECK-NEXT: [[TMP11:%.*]] = shufflevector <2 x i32> [[TMP9]], <2 x i32> poison, <16 x i32> poison
22+
; CHECK-NEXT: [[TMP12:%.*]] = shufflevector <4 x i32> [[TMP10]], <4 x i32> poison, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
23+
; CHECK-NEXT: [[TMP13:%.*]] = shufflevector <2 x i32> [[TMP1]], <2 x i32> [[TMP9]], <16 x i32> <i32 0, i32 1, i32 1, i32 1, i32 1, i32 1, i32 1, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
24+
; CHECK-NEXT: [[TMP14:%.*]] = icmp eq <16 x i32> [[TMP13]], zeroinitializer
25+
; CHECK-NEXT: [[TMP15:%.*]] = zext <16 x i1> [[TMP14]] to <16 x i8>
26+
; CHECK-NEXT: store <16 x i8> [[TMP15]], ptr [[TMP5]], align 1
27+
; CHECK-NEXT: [[TMP16:%.*]] = icmp eq i32 [[TMP8]], 0
28+
; CHECK-NEXT: [[TMP17:%.*]] = zext i1 [[TMP16]] to i8
29+
; CHECK-NEXT: store i8 [[TMP17]], ptr [[TMP0]], align 1
30+
; CHECK-NEXT: ret ptr null
31+
;
32+
bb:
33+
%arg1 = load ptr, ptr %args_gep, align 8
34+
%arg26 = load ptr, ptr %0, align 8
35+
%1 = load i32, ptr %arg1, align 32
36+
%2 = icmp eq i32 %1, 0
37+
%3 = zext i1 %2 to i8
38+
store i8 %3, ptr %arg26, align 32, !alias.scope !0
39+
%4 = icmp eq i32 %1, 0
40+
%5 = zext i1 %4 to i8
41+
%6 = getelementptr i8, ptr %arg26, i64 1
42+
store i8 %5, ptr %6, align 1, !alias.scope !0
43+
%7 = icmp eq i32 %1, 0
44+
%8 = zext i1 %7 to i8
45+
%9 = getelementptr i8, ptr %arg26, i64 2
46+
store i8 %8, ptr %9, align 2, !alias.scope !0
47+
%10 = icmp eq i32 %1, 0
48+
%11 = zext i1 %10 to i8
49+
%12 = getelementptr i8, ptr %arg26, i64 3
50+
store i8 %11, ptr %12, align 1, !alias.scope !0
51+
%13 = icmp eq i32 %1, 0
52+
%14 = zext i1 %13 to i8
53+
%15 = getelementptr i8, ptr %arg26, i64 4
54+
store i8 %14, ptr %15, align 4, !alias.scope !0
55+
%16 = icmp eq i32 %1, 0
56+
%17 = zext i1 %16 to i8
57+
%18 = getelementptr i8, ptr %arg26, i64 5
58+
store i8 %17, ptr %18, align 1, !alias.scope !0
59+
%19 = getelementptr i8, ptr %arg1, i64 4
60+
%20 = load i32, ptr %19, align 4, !noalias !0
61+
%21 = icmp eq i32 %20, 0
62+
%22 = zext i1 %21 to i8
63+
%23 = getelementptr i8, ptr %arg26, i64 6
64+
store i8 %22, ptr %23, align 2
65+
%24 = icmp eq i32 %20, 0
66+
%25 = zext i1 %24 to i8
67+
%26 = getelementptr i8, ptr %arg26, i64 7
68+
store i8 %25, ptr %26, align 1
69+
%27 = icmp eq i32 %20, 0
70+
%28 = zext i1 %27 to i8
71+
%29 = getelementptr i8, ptr %arg26, i64 8
72+
store i8 %28, ptr %29, align 8
73+
%30 = icmp eq i32 %20, 0
74+
%31 = zext i1 %30 to i8
75+
%32 = getelementptr i8, ptr %arg26, i64 9
76+
store i8 %31, ptr %32, align 1
77+
%33 = icmp eq i32 %20, 0
78+
%34 = zext i1 %33 to i8
79+
%35 = getelementptr i8, ptr %arg26, i64 10
80+
store i8 %34, ptr %35, align 2
81+
%36 = icmp eq i32 %20, 0
82+
%37 = zext i1 %36 to i8
83+
%38 = getelementptr i8, ptr %arg26, i64 11
84+
store i8 %37, ptr %38, align 1
85+
%39 = icmp eq i32 %1, 0
86+
%40 = zext i1 %39 to i8
87+
%41 = getelementptr i8, ptr %arg26, i64 12
88+
store i8 %40, ptr %41, align 4
89+
%42 = icmp eq i32 %1, 0
90+
%43 = zext i1 %42 to i8
91+
%44 = getelementptr i8, ptr %arg26, i64 13
92+
store i8 %43, ptr %44, align 1
93+
%45 = icmp eq i32 %1, 0
94+
%46 = zext i1 %45 to i8
95+
%47 = getelementptr i8, ptr %arg26, i64 14
96+
store i8 %46, ptr %47, align 2
97+
%48 = icmp eq i32 %1, 0
98+
%49 = zext i1 %48 to i8
99+
%50 = getelementptr i8, ptr %arg26, i64 15
100+
store i8 %49, ptr %50, align 1
101+
%51 = icmp eq i32 %1, 0
102+
%52 = zext i1 %51 to i8
103+
%53 = getelementptr i8, ptr %arg26, i64 17
104+
store i8 %52, ptr %53, align 1, !alias.scope !0
105+
%54 = icmp eq i32 %20, 0
106+
%55 = zext i1 %54 to i8
107+
%56 = getelementptr i8, ptr %arg26, i64 18
108+
store i8 %55, ptr %56, align 2, !alias.scope !0
109+
%57 = icmp eq i32 %20, 0
110+
%58 = zext i1 %57 to i8
111+
%59 = getelementptr i8, ptr %arg26, i64 19
112+
store i8 %58, ptr %59, align 1, !alias.scope !0
113+
%60 = icmp eq i32 %20, 0
114+
%61 = zext i1 %60 to i8
115+
%62 = getelementptr i8, ptr %arg26, i64 20
116+
store i8 %61, ptr %62, align 4, !alias.scope !0
117+
%63 = icmp eq i32 %20, 0
118+
%64 = zext i1 %63 to i8
119+
%65 = getelementptr i8, ptr %arg26, i64 21
120+
store i8 %64, ptr %65, align 1, !alias.scope !0
121+
%66 = icmp eq i32 %20, 0
122+
%67 = zext i1 %66 to i8
123+
%68 = getelementptr i8, ptr %arg26, i64 22
124+
store i8 %67, ptr %68, align 2, !alias.scope !0
125+
%69 = icmp eq i32 %20, 0
126+
%70 = zext i1 %69 to i8
127+
%71 = getelementptr i8, ptr %arg26, i64 23
128+
store i8 %70, ptr %71, align 1, !alias.scope !0
129+
%72 = getelementptr i8, ptr %arg1, i64 8
130+
%73 = load i32, ptr %72, align 8, !noalias !0
131+
%74 = icmp eq i32 %73, 0
132+
%75 = zext i1 %74 to i8
133+
%76 = getelementptr i8, ptr %arg26, i64 24
134+
store i8 %75, ptr %76, align 8, !alias.scope !0
135+
%77 = icmp eq i32 %73, 0
136+
%78 = zext i1 %77 to i8
137+
%79 = getelementptr i8, ptr %arg26, i64 25
138+
store i8 %78, ptr %79, align 1, !alias.scope !0
139+
%80 = icmp eq i32 %73, 0
140+
%81 = zext i1 %80 to i8
141+
%82 = getelementptr i8, ptr %arg26, i64 26
142+
store i8 %81, ptr %82, align 2, !alias.scope !0
143+
%83 = icmp eq i32 %73, 0
144+
%84 = zext i1 %83 to i8
145+
%85 = getelementptr i8, ptr %arg26, i64 27
146+
store i8 %84, ptr %85, align 1, !alias.scope !0
147+
%86 = icmp eq i32 %73, 0
148+
%87 = zext i1 %86 to i8
149+
%88 = getelementptr i8, ptr %arg26, i64 28
150+
store i8 %87, ptr %88, align 4, !alias.scope !0
151+
%89 = icmp eq i32 %73, 0
152+
%90 = zext i1 %89 to i8
153+
%91 = getelementptr i8, ptr %arg26, i64 29
154+
store i8 %90, ptr %91, align 1, !alias.scope !0
155+
%92 = getelementptr i8, ptr %arg1, i64 12
156+
%93 = load i32, ptr %92, align 4, !noalias !0
157+
%94 = icmp eq i32 %93, 0
158+
%95 = zext i1 %94 to i8
159+
%96 = getelementptr i8, ptr %arg26, i64 30
160+
store i8 %95, ptr %96, align 2
161+
%97 = icmp eq i32 %93, 0
162+
%98 = zext i1 %97 to i8
163+
%99 = getelementptr i8, ptr %arg26, i64 31
164+
store i8 %98, ptr %99, align 1
165+
%100 = icmp eq i32 %93, 0
166+
%101 = zext i1 %100 to i8
167+
%102 = getelementptr i8, ptr %arg26, i64 32
168+
store i8 %101, ptr %102, align 32
169+
%103 = icmp eq i32 %93, 0
170+
%104 = zext i1 %103 to i8
171+
store i8 %104, ptr %0, align 1
172+
ret ptr null
173+
}
174+
175+
!0 = !{!1}
176+
!1 = !{!"result slice: {}", !2}
177+
!2 = !{!"fn AA domain"}
178+
;.
179+
; CHECK: [[META0]] = !{[[META1:![0-9]+]]}
180+
; CHECK: [[META1]] = !{!"result slice: {}", [[META2:![0-9]+]]}
181+
; CHECK: [[META2]] = !{!"fn AA domain"}
182+
;.

0 commit comments

Comments
 (0)