xref: /llvm-project/llvm/test/Transforms/PGOProfile/ppc-prevent-mma-types.ll (revision 9ff36df5a4a7d52c51e950522870bb64912688d2)
1; RUN: opt --vec-extabi=true -passes='default<O3>' -mcpu=pwr10 \
2; RUN:   -pgo-kind=pgo-instr-gen-pipeline -mtriple=powerpc-ibm-aix -S < %s | \
3; RUN: FileCheck %s
4; RUN: opt -passes='default<O3>' -mcpu=pwr10 -pgo-kind=pgo-instr-gen-pipeline \
5; RUN:   -mtriple=powerpc64le-unknown-linux-gnu -S < %s | FileCheck %s
6
7; When running this test case under opt + PGO, the SLPVectorizer previously had
8; an opportunity to produce wide vector types (such as <256 x i1>) within the
9; IR as it deemed these wide vector types to be cheap enough to produce.
10; Having this test ensures that the optimizer no longer generates wide vectors
11; within the IR.
12
13%0 = type <{ double }>
14%1 = type <{ ptr, i8, i8, i8, i8, i32, i32, i32, [1 x i32], [1 x i32], [1 x i32], [24 x i8] }>
15declare ptr @__malloc()
16; CHECK-NOT: <256 x i1>
17; CHECK-NOT: <512 x i1>
18define dso_local void @test(ptr %arg, ptr %arg1, ptr %arg2, ptr %arg3, ptr %arg4) {
19  %i = alloca ptr, align 4
20  store ptr %arg, ptr %i, align 4
21  %i7 = alloca ptr, align 4
22  store ptr %arg1, ptr %i7, align 4
23  %i9 = alloca ptr, align 4
24  store ptr %arg2, ptr %i9, align 4
25  %i10 = alloca ptr, align 4
26  store ptr %arg3, ptr %i10, align 4
27  %i11 = alloca ptr, align 4
28  store ptr %arg4, ptr %i11, align 4
29  %i14 = alloca %1, align 4
30  %i15 = alloca i32, align 4
31  %i16 = alloca i32, align 4
32  %i17 = alloca i32, align 4
33  %i18 = alloca i32, align 4
34  %i20 = alloca i32, align 4
35  %i21 = alloca i32, align 4
36  %i22 = alloca i32, align 4
37  %i23 = alloca i32, align 4
38  %i25 = alloca double, align 8
39  %i26 = load ptr, ptr %i9, align 4
40  %i27 = load i32, ptr %i26, align 4
41  %i28 = select i1 false, i32 0, i32 %i27
42  store i32 %i28, ptr %i15, align 4
43  %i29 = load ptr, ptr %i7, align 4
44  %i30 = load i32, ptr %i29, align 4
45  %i31 = select i1 false, i32 0, i32 %i30
46  store i32 %i31, ptr %i16, align 4
47  %i32 = load i32, ptr %i15, align 4
48  %i33 = mul i32 8, %i32
49  store i32 %i33, ptr %i17, align 4
50  %i34 = load i32, ptr %i17, align 4
51  %i35 = load i32, ptr %i16, align 4
52  %i36 = mul i32 %i34, %i35
53  store i32 %i36, ptr %i18, align 4
54  %i37 = load ptr, ptr %i9, align 4
55  %i38 = load i32, ptr %i37, align 4
56  %i39 = select i1 false, i32 0, i32 %i38
57  store i32 %i39, ptr %i22, align 4
58  %i40 = load ptr, ptr %i10, align 4
59  %i41 = load i32, ptr %i40, align 4
60  %i42 = select i1 false, i32 0, i32 %i41
61  store i32 %i42, ptr %i23, align 4
62  %i43 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10
63  %i45 = getelementptr i8, ptr %i43, i32 -12
64  %i46 = getelementptr inbounds i8, ptr %i45, i32 12
65  %i48 = load i32, ptr %i23, align 4
66  %i49 = select i1 false, i32 0, i32 %i48
67  %i50 = load i32, ptr %i22, align 4
68  %i51 = select i1 false, i32 0, i32 %i50
69  %i52 = mul i32 %i51, 8
70  %i53 = mul i32 %i49, %i52
71  store i32 %i53, ptr %i46, align 4
72  %i54 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10
73  %i56 = getelementptr i8, ptr %i54, i32 -12
74  %i57 = getelementptr inbounds i8, ptr %i56, i32 36
75  store i32 8, ptr %i57, align 4
76  %i61 = call ptr @__malloc()
77  store ptr %i61, ptr %i14, align 4
78  br label %bb63
79bb63:                                             ; preds = %bb66, %bb
80  %i64 = load ptr, ptr %i11, align 4
81  %i65 = load i32, ptr %i64, align 4
82  br label %bb66
83bb66:                                             ; preds = %bb165, %bb63
84  %i67 = load i32, ptr %i21, align 4
85  %i68 = icmp sle i32 %i67, %i65
86  br i1 %i68, label %bb69, label %bb63
87bb69:                                             ; preds = %bb66
88  store i32 1, ptr %i20, align 4
89  br label %bb70
90bb70:                                             ; preds = %bb163, %bb69
91  %i71 = load i32, ptr %i20, align 4
92  %i72 = icmp sle i32 %i71, 11
93  br i1 %i72, label %bb73, label %bb165
94bb73:                                             ; preds = %bb70
95  %i74 = load i32, ptr %i21, align 4
96  %i76 = mul i32 %i74, 8
97  %i77 = getelementptr inbounds i8, ptr null, i32 %i76
98  %i79 = load double, ptr %i77, align 8
99  %i80 = fcmp fast olt double %i79, 0.000000e+00
100  %i81 = zext i1 %i80 to i32
101  %i82 = trunc i32 %i81 to i1
102  br i1 %i82, label %bb83, label %bb102
103bb83:                                             ; preds = %bb73
104  %i85 = load ptr, ptr %i14, align 4
105  %i88 = load i32, ptr %i20, align 4
106  %i89 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10
107  %i91 = load i32, ptr %i89, align 4
108  %i92 = mul i32 %i88, %i91
109  %i93 = getelementptr inbounds i8, ptr %i85, i32 %i92
110  %i95 = load i32, ptr %i21, align 4
111  %i96 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10
112  %i97 = getelementptr inbounds [1 x i32], ptr %i96, i32 0, i32 6
113  %i98 = load i32, ptr %i97, align 4
114  %i99 = mul i32 %i95, %i98
115  %i100 = getelementptr inbounds i8, ptr %i93, i32 %i99
116  store double 0.000000e+00, ptr %i100, align 8
117  br label %bb163
118bb102:                                            ; preds = %bb73
119  %i103 = getelementptr i8, ptr null, i32 -8
120  %i104 = getelementptr inbounds i8, ptr %i103, i32 undef
121  %i106 = load double, ptr %i104, align 8
122  %i107 = load ptr, ptr %i, align 4
123  %i109 = getelementptr i8, ptr %i107, i32 -8
124  %i110 = getelementptr inbounds i8, ptr %i109, i32 undef
125  %i112 = load double, ptr %i110, align 8
126  %i113 = fmul fast double %i106, %i112
127  %i114 = fcmp fast ogt double 0.000000e+00, %i113
128  %i115 = zext i1 %i114 to i32
129  %i116 = trunc i32 %i115 to i1
130  br i1 %i116, label %bb117, label %bb136
131bb117:                                            ; preds = %bb102
132  %i119 = load ptr, ptr %i14, align 4
133  %i122 = load i32, ptr %i20, align 4
134  %i123 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10
135  %i125 = load i32, ptr %i123, align 4
136  %i126 = mul i32 %i122, %i125
137  %i127 = getelementptr inbounds i8, ptr %i119, i32 %i126
138  %i129 = load i32, ptr %i21, align 4
139  %i130 = getelementptr inbounds %1, ptr %i14, i32 0, i32 10
140  %i131 = getelementptr inbounds [1 x i32], ptr %i130, i32 0, i32 6
141  %i132 = load i32, ptr %i131, align 4
142  %i133 = mul i32 %i129, %i132
143  %i134 = getelementptr inbounds i8, ptr %i127, i32 %i133
144  store double 0.000000e+00, ptr %i134, align 8
145  br label %bb163
146bb136:                                            ; preds = %bb102
147  %i137 = load double, ptr null, align 8
148  %i138 = load double, ptr null, align 8
149  %i139 = fmul fast double %i137, %i138
150  %i140 = fsub fast double 0.000000e+00, %i139
151  store double %i140, ptr %i25, align 8
152  %i141 = load i32, ptr %i21, align 4
153  %i143 = getelementptr inbounds [1 x i32], ptr null, i32 0, i32 6
154  %i144 = load i32, ptr %i143, align 4
155  %i145 = mul i32 %i141, %i144
156  %i146 = getelementptr inbounds i8, ptr null, i32 %i145
157  %i148 = load i32, ptr %i20, align 4
158  %i149 = load i32, ptr %i18, align 4
159  %i151 = mul i32 %i148, %i149
160  %i152 = getelementptr i8, ptr null, i32 %i151
161  %i156 = load double, ptr %i152, align 8
162  %i157 = load double, ptr %i25, align 8
163  %i158 = fmul fast double %i156, %i157
164  %i159 = fadd fast double 0.000000e+00, %i158
165  %i160 = load double, ptr %i25, align 8
166  %i161 = fadd fast double 0.000000e+00, %i160
167  %i162 = fdiv fast double %i159, %i161
168  store double %i162, ptr %i146, align 8
169  br label %bb163
170bb163:                                            ; preds = %bb136, %bb117, %bb83
171  %i164 = add nsw i32 %i71, 1
172  store i32 %i164, ptr %i20, align 4
173  br label %bb70
174bb165:                                            ; preds = %bb70
175  %i166 = add nsw i32 %i67, 1
176  store i32 %i166, ptr %i21, align 4
177  br label %bb66
178}
179