xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/X86/many_stores.ll (revision e894c3d1a9ac50f5e91a7ab9e28cab74b6e349f2)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 3
2; RUN: opt -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux < %s | FileCheck %s
3
4define i32 @test(ptr %p) {
5; CHECK-LABEL: define i32 @test
6; CHECK-SAME: (ptr [[P:%.*]]) {
7; CHECK-NEXT:  entry:
8; CHECK-NEXT:    [[IDX4:%.*]] = getelementptr i32, ptr [[P]], i64 8
9; CHECK-NEXT:    store i32 0, ptr [[IDX4]], align 4
10; CHECK-NEXT:    [[IDX5:%.*]] = getelementptr i32, ptr [[P]], i64 10
11; CHECK-NEXT:    store i32 0, ptr [[IDX5]], align 4
12; CHECK-NEXT:    [[IDX6:%.*]] = getelementptr i32, ptr [[P]], i64 12
13; CHECK-NEXT:    store i32 0, ptr [[IDX6]], align 4
14; CHECK-NEXT:    [[IDX7:%.*]] = getelementptr i32, ptr [[P]], i64 14
15; CHECK-NEXT:    store i32 0, ptr [[IDX7]], align 4
16; CHECK-NEXT:    [[IDX8:%.*]] = getelementptr i32, ptr [[P]], i64 16
17; CHECK-NEXT:    store i32 0, ptr [[IDX8]], align 4
18; CHECK-NEXT:    [[IDX9:%.*]] = getelementptr i32, ptr [[P]], i64 18
19; CHECK-NEXT:    store i32 0, ptr [[IDX9]], align 4
20; CHECK-NEXT:    [[IDX10:%.*]] = getelementptr i32, ptr [[P]], i64 20
21; CHECK-NEXT:    store i32 0, ptr [[IDX10]], align 4
22; CHECK-NEXT:    [[IDX11:%.*]] = getelementptr i32, ptr [[P]], i64 22
23; CHECK-NEXT:    store i32 0, ptr [[IDX11]], align 4
24; CHECK-NEXT:    [[IDX12:%.*]] = getelementptr i32, ptr [[P]], i64 24
25; CHECK-NEXT:    store i32 0, ptr [[IDX12]], align 4
26; CHECK-NEXT:    [[IDX13:%.*]] = getelementptr i32, ptr [[P]], i64 26
27; CHECK-NEXT:    store i32 0, ptr [[IDX13]], align 4
28; CHECK-NEXT:    [[IDX14:%.*]] = getelementptr i32, ptr [[P]], i64 28
29; CHECK-NEXT:    store i32 0, ptr [[IDX14]], align 4
30; CHECK-NEXT:    [[IDX15:%.*]] = getelementptr i32, ptr [[P]], i64 30
31; CHECK-NEXT:    store i32 0, ptr [[IDX15]], align 4
32; CHECK-NEXT:    [[IDX16:%.*]] = getelementptr i32, ptr [[P]], i64 32
33; CHECK-NEXT:    store i32 0, ptr [[IDX16]], align 4
34; CHECK-NEXT:    [[IDX18:%.*]] = getelementptr i32, ptr [[P]], i64 36
35; CHECK-NEXT:    store i32 0, ptr [[IDX18]], align 4
36; CHECK-NEXT:    [[IDX19:%.*]] = getelementptr i32, ptr [[P]], i64 38
37; CHECK-NEXT:    store i32 0, ptr [[IDX19]], align 4
38; CHECK-NEXT:    [[IDX20:%.*]] = getelementptr i32, ptr [[P]], i64 40
39; CHECK-NEXT:    store i32 0, ptr [[IDX20]], align 4
40; CHECK-NEXT:    [[IDX21:%.*]] = getelementptr i32, ptr [[P]], i64 42
41; CHECK-NEXT:    store i32 0, ptr [[IDX21]], align 4
42; CHECK-NEXT:    [[IDX22:%.*]] = getelementptr i32, ptr [[P]], i64 44
43; CHECK-NEXT:    store i32 0, ptr [[IDX22]], align 4
44; CHECK-NEXT:    [[IDX23:%.*]] = getelementptr i32, ptr [[P]], i64 46
45; CHECK-NEXT:    store i32 0, ptr [[IDX23]], align 4
46; CHECK-NEXT:    [[IDX24:%.*]] = getelementptr i32, ptr [[P]], i64 48
47; CHECK-NEXT:    store i32 0, ptr [[IDX24]], align 4
48; CHECK-NEXT:    [[IDX25:%.*]] = getelementptr i32, ptr [[P]], i64 50
49; CHECK-NEXT:    store i32 0, ptr [[IDX25]], align 4
50; CHECK-NEXT:    [[IDX26:%.*]] = getelementptr i32, ptr [[P]], i64 52
51; CHECK-NEXT:    store i32 0, ptr [[IDX26]], align 4
52; CHECK-NEXT:    [[IDX27:%.*]] = getelementptr i32, ptr [[P]], i64 54
53; CHECK-NEXT:    store i32 0, ptr [[IDX27]], align 4
54; CHECK-NEXT:    [[IDX28:%.*]] = getelementptr i32, ptr [[P]], i64 56
55; CHECK-NEXT:    store i32 0, ptr [[IDX28]], align 4
56; CHECK-NEXT:    [[IDX29:%.*]] = getelementptr i32, ptr [[P]], i64 58
57; CHECK-NEXT:    store i32 0, ptr [[IDX29]], align 4
58; CHECK-NEXT:    [[IDX30:%.*]] = getelementptr i32, ptr [[P]], i64 60
59; CHECK-NEXT:    store i32 0, ptr [[IDX30]], align 4
60; CHECK-NEXT:    [[IDX31:%.*]] = getelementptr i32, ptr [[P]], i64 62
61; CHECK-NEXT:    store i32 0, ptr [[IDX31]], align 4
62; CHECK-NEXT:    [[IDX32:%.*]] = getelementptr i32, ptr [[P]], i64 64
63; CHECK-NEXT:    store i32 0, ptr [[IDX32]], align 4
64; CHECK-NEXT:    [[IDX33:%.*]] = getelementptr i32, ptr [[P]], i64 66
65; CHECK-NEXT:    store i32 0, ptr [[IDX33]], align 4
66; CHECK-NEXT:    store i32 0, ptr [[P]], align 4
67; CHECK-NEXT:    [[IDX0:%.*]] = getelementptr i32, ptr [[P]], i64 3
68; CHECK-NEXT:    store <4 x i32> zeroinitializer, ptr [[IDX0]], align 4
69; CHECK-NEXT:    ret i32 0
70;
71entry:
72  %idx2 = getelementptr i32, ptr %p, i64 4
73  store i32 0, ptr %idx2, align 4
74  %idx3 = getelementptr i32, ptr %p, i64 6
75  store i32 0, ptr %idx3, align 4
76  %idx4 = getelementptr i32, ptr %p, i64 8
77  store i32 0, ptr %idx4, align 4
78  %idx5 = getelementptr i32, ptr %p, i64 10
79  store i32 0, ptr %idx5, align 4
80  %idx6 = getelementptr i32, ptr %p, i64 12
81  store i32 0, ptr %idx6, align 4
82  %idx7 = getelementptr i32, ptr %p, i64 14
83  store i32 0, ptr %idx7, align 4
84  %idx8 = getelementptr i32, ptr %p, i64 16
85  store i32 0, ptr %idx8, align 4
86  %idx9 = getelementptr i32, ptr %p, i64 18
87  store i32 0, ptr %idx9, align 4
88  %idx10 = getelementptr i32, ptr %p, i64 20
89  store i32 0, ptr %idx10, align 4
90  %idx11 = getelementptr i32, ptr %p, i64 22
91  store i32 0, ptr %idx11, align 4
92  %idx12 = getelementptr i32, ptr %p, i64 24
93  store i32 0, ptr %idx12, align 4
94  %idx13 = getelementptr i32, ptr %p, i64 26
95  store i32 0, ptr %idx13, align 4
96  %idx14 = getelementptr i32, ptr %p, i64 28
97  store i32 0, ptr %idx14, align 4
98  %idx15 = getelementptr i32, ptr %p, i64 30
99  store i32 0, ptr %idx15, align 4
100  %idx16 = getelementptr i32, ptr %p, i64 32
101  store i32 0, ptr %idx16, align 4
102  %idx18 = getelementptr i32, ptr %p, i64 36
103  store i32 0, ptr %idx18, align 4
104  %idx19 = getelementptr i32, ptr %p, i64 38
105  store i32 0, ptr %idx19, align 4
106  %idx20 = getelementptr i32, ptr %p, i64 40
107  store i32 0, ptr %idx20, align 4
108  %idx21 = getelementptr i32, ptr %p, i64 42
109  store i32 0, ptr %idx21, align 4
110  %idx22 = getelementptr i32, ptr %p, i64 44
111  store i32 0, ptr %idx22, align 4
112  %idx23 = getelementptr i32, ptr %p, i64 46
113  store i32 0, ptr %idx23, align 4
114  %idx24 = getelementptr i32, ptr %p, i64 48
115  store i32 0, ptr %idx24, align 4
116  %idx25 = getelementptr i32, ptr %p, i64 50
117  store i32 0, ptr %idx25, align 4
118  %idx26 = getelementptr i32, ptr %p, i64 52
119  store i32 0, ptr %idx26, align 4
120  %idx27 = getelementptr i32, ptr %p, i64 54
121  store i32 0, ptr %idx27, align 4
122  %idx28 = getelementptr i32, ptr %p, i64 56
123  store i32 0, ptr %idx28, align 4
124  %idx29 = getelementptr i32, ptr %p, i64 58
125  store i32 0, ptr %idx29, align 4
126  %idx30 = getelementptr i32, ptr %p, i64 60
127  store i32 0, ptr %idx30, align 4
128  %idx31 = getelementptr i32, ptr %p, i64 62
129  store i32 0, ptr %idx31, align 4
130  %idx32 = getelementptr i32, ptr %p, i64 64
131  store i32 0, ptr %idx32, align 4
132  %idx33 = getelementptr i32, ptr %p, i64 66
133  store i32 0, ptr %idx33, align 4
134  store i32 0, ptr %p, align 4
135  %idx0 = getelementptr i32, ptr %p, i64 3
136  store i32 0, ptr %idx0, align 4
137  %idx1 = getelementptr i32, ptr %p, i64 5
138  store i32 0, ptr %idx1, align 4
139  ret i32 0
140}
141