[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / Transforms / PhaseOrdering / X86 / pr50555.ll
blob18d1c6426855064cfdff3e68abb4e118b4550f35
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -O3 -S -mtriple=x86_64-- | FileCheck %s --check-prefixes=SSE
3 ; RUN: opt < %s -O3 -S -mtriple=x86_64-- -mattr=avx | FileCheck %s --check-prefixes=AVX
5 define void @trunc_through_one_add(ptr noalias %0, ptr noalias readonly %1) {
6 ; SSE-LABEL: @trunc_through_one_add(
7 ; SSE-NEXT:    [[TMP3:%.*]] = load <8 x i8>, ptr [[TMP1:%.*]], align 1
8 ; SSE-NEXT:    [[TMP4:%.*]] = zext <8 x i8> [[TMP3]] to <8 x i16>
9 ; SSE-NEXT:    [[TMP5:%.*]] = lshr <8 x i16> [[TMP4]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
10 ; SSE-NEXT:    [[TMP6:%.*]] = add nuw nsw <8 x i16> [[TMP5]], [[TMP4]]
11 ; SSE-NEXT:    [[TMP7:%.*]] = lshr <8 x i16> [[TMP6]], <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
12 ; SSE-NEXT:    store <8 x i16> [[TMP7]], ptr [[TMP0:%.*]], align 2
13 ; SSE-NEXT:    [[TMP8:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 8
14 ; SSE-NEXT:    [[TMP9:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i64 8
15 ; SSE-NEXT:    [[TMP10:%.*]] = load <8 x i8>, ptr [[TMP8]], align 1
16 ; SSE-NEXT:    [[TMP11:%.*]] = zext <8 x i8> [[TMP10]] to <8 x i16>
17 ; SSE-NEXT:    [[TMP12:%.*]] = lshr <8 x i16> [[TMP11]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
18 ; SSE-NEXT:    [[TMP13:%.*]] = add nuw nsw <8 x i16> [[TMP12]], [[TMP11]]
19 ; SSE-NEXT:    [[TMP14:%.*]] = lshr <8 x i16> [[TMP13]], <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
20 ; SSE-NEXT:    store <8 x i16> [[TMP14]], ptr [[TMP9]], align 2
21 ; SSE-NEXT:    ret void
23 ; AVX-LABEL: @trunc_through_one_add(
24 ; AVX-NEXT:    [[TMP3:%.*]] = load <16 x i8>, ptr [[TMP1:%.*]], align 1
25 ; AVX-NEXT:    [[TMP4:%.*]] = zext <16 x i8> [[TMP3]] to <16 x i16>
26 ; AVX-NEXT:    [[TMP5:%.*]] = lshr <16 x i16> [[TMP4]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
27 ; AVX-NEXT:    [[TMP6:%.*]] = add nuw nsw <16 x i16> [[TMP5]], [[TMP4]]
28 ; AVX-NEXT:    [[TMP7:%.*]] = lshr <16 x i16> [[TMP6]], <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
29 ; AVX-NEXT:    store <16 x i16> [[TMP7]], ptr [[TMP0:%.*]], align 2
30 ; AVX-NEXT:    ret void
32   %3 = load i8, ptr %1, align 1
33   %4 = zext i8 %3 to i32
34   %5 = lshr i32 %4, 1
35   %6 = add nuw nsw i32 %5, %4
36   %7 = lshr i32 %6, 2
37   %8 = trunc i32 %7 to i16
38   store i16 %8, ptr %0, align 2
39   %9 = getelementptr inbounds i8, ptr %1, i64 1
40   %10 = load i8, ptr %9, align 1
41   %11 = zext i8 %10 to i32
42   %12 = lshr i32 %11, 1
43   %13 = add nuw nsw i32 %12, %11
44   %14 = lshr i32 %13, 2
45   %15 = trunc i32 %14 to i16
46   %16 = getelementptr inbounds i16, ptr %0, i64 1
47   store i16 %15, ptr %16, align 2
48   %17 = getelementptr inbounds i8, ptr %1, i64 2
49   %18 = load i8, ptr %17, align 1
50   %19 = zext i8 %18 to i32
51   %20 = lshr i32 %19, 1
52   %21 = add nuw nsw i32 %20, %19
53   %22 = lshr i32 %21, 2
54   %23 = trunc i32 %22 to i16
55   %24 = getelementptr inbounds i16, ptr %0, i64 2
56   store i16 %23, ptr %24, align 2
57   %25 = getelementptr inbounds i8, ptr %1, i64 3
58   %26 = load i8, ptr %25, align 1
59   %27 = zext i8 %26 to i32
60   %28 = lshr i32 %27, 1
61   %29 = add nuw nsw i32 %28, %27
62   %30 = lshr i32 %29, 2
63   %31 = trunc i32 %30 to i16
64   %32 = getelementptr inbounds i16, ptr %0, i64 3
65   store i16 %31, ptr %32, align 2
66   %33 = getelementptr inbounds i8, ptr %1, i64 4
67   %34 = load i8, ptr %33, align 1
68   %35 = zext i8 %34 to i32
69   %36 = lshr i32 %35, 1
70   %37 = add nuw nsw i32 %36, %35
71   %38 = lshr i32 %37, 2
72   %39 = trunc i32 %38 to i16
73   %40 = getelementptr inbounds i16, ptr %0, i64 4
74   store i16 %39, ptr %40, align 2
75   %41 = getelementptr inbounds i8, ptr %1, i64 5
76   %42 = load i8, ptr %41, align 1
77   %43 = zext i8 %42 to i32
78   %44 = lshr i32 %43, 1
79   %45 = add nuw nsw i32 %44, %43
80   %46 = lshr i32 %45, 2
81   %47 = trunc i32 %46 to i16
82   %48 = getelementptr inbounds i16, ptr %0, i64 5
83   store i16 %47, ptr %48, align 2
84   %49 = getelementptr inbounds i8, ptr %1, i64 6
85   %50 = load i8, ptr %49, align 1
86   %51 = zext i8 %50 to i32
87   %52 = lshr i32 %51, 1
88   %53 = add nuw nsw i32 %52, %51
89   %54 = lshr i32 %53, 2
90   %55 = trunc i32 %54 to i16
91   %56 = getelementptr inbounds i16, ptr %0, i64 6
92   store i16 %55, ptr %56, align 2
93   %57 = getelementptr inbounds i8, ptr %1, i64 7
94   %58 = load i8, ptr %57, align 1
95   %59 = zext i8 %58 to i32
96   %60 = lshr i32 %59, 1
97   %61 = add nuw nsw i32 %60, %59
98   %62 = lshr i32 %61, 2
99   %63 = trunc i32 %62 to i16
100   %64 = getelementptr inbounds i16, ptr %0, i64 7
101   store i16 %63, ptr %64, align 2
102   %65 = getelementptr inbounds i8, ptr %1, i64 8
103   %66 = load i8, ptr %65, align 1
104   %67 = zext i8 %66 to i32
105   %68 = lshr i32 %67, 1
106   %69 = add nuw nsw i32 %68, %67
107   %70 = lshr i32 %69, 2
108   %71 = trunc i32 %70 to i16
109   %72 = getelementptr inbounds i16, ptr %0, i64 8
110   store i16 %71, ptr %72, align 2
111   %73 = getelementptr inbounds i8, ptr %1, i64 9
112   %74 = load i8, ptr %73, align 1
113   %75 = zext i8 %74 to i32
114   %76 = lshr i32 %75, 1
115   %77 = add nuw nsw i32 %76, %75
116   %78 = lshr i32 %77, 2
117   %79 = trunc i32 %78 to i16
118   %80 = getelementptr inbounds i16, ptr %0, i64 9
119   store i16 %79, ptr %80, align 2
120   %81 = getelementptr inbounds i8, ptr %1, i64 10
121   %82 = load i8, ptr %81, align 1
122   %83 = zext i8 %82 to i32
123   %84 = lshr i32 %83, 1
124   %85 = add nuw nsw i32 %84, %83
125   %86 = lshr i32 %85, 2
126   %87 = trunc i32 %86 to i16
127   %88 = getelementptr inbounds i16, ptr %0, i64 10
128   store i16 %87, ptr %88, align 2
129   %89 = getelementptr inbounds i8, ptr %1, i64 11
130   %90 = load i8, ptr %89, align 1
131   %91 = zext i8 %90 to i32
132   %92 = lshr i32 %91, 1
133   %93 = add nuw nsw i32 %92, %91
134   %94 = lshr i32 %93, 2
135   %95 = trunc i32 %94 to i16
136   %96 = getelementptr inbounds i16, ptr %0, i64 11
137   store i16 %95, ptr %96, align 2
138   %97 = getelementptr inbounds i8, ptr %1, i64 12
139   %98 = load i8, ptr %97, align 1
140   %99 = zext i8 %98 to i32
141   %100 = lshr i32 %99, 1
142   %101 = add nuw nsw i32 %100, %99
143   %102 = lshr i32 %101, 2
144   %103 = trunc i32 %102 to i16
145   %104 = getelementptr inbounds i16, ptr %0, i64 12
146   store i16 %103, ptr %104, align 2
147   %105 = getelementptr inbounds i8, ptr %1, i64 13
148   %106 = load i8, ptr %105, align 1
149   %107 = zext i8 %106 to i32
150   %108 = lshr i32 %107, 1
151   %109 = add nuw nsw i32 %108, %107
152   %110 = lshr i32 %109, 2
153   %111 = trunc i32 %110 to i16
154   %112 = getelementptr inbounds i16, ptr %0, i64 13
155   store i16 %111, ptr %112, align 2
156   %113 = getelementptr inbounds i8, ptr %1, i64 14
157   %114 = load i8, ptr %113, align 1
158   %115 = zext i8 %114 to i32
159   %116 = lshr i32 %115, 1
160   %117 = add nuw nsw i32 %116, %115
161   %118 = lshr i32 %117, 2
162   %119 = trunc i32 %118 to i16
163   %120 = getelementptr inbounds i16, ptr %0, i64 14
164   store i16 %119, ptr %120, align 2
165   %121 = getelementptr inbounds i8, ptr %1, i64 15
166   %122 = load i8, ptr %121, align 1
167   %123 = zext i8 %122 to i32
168   %124 = lshr i32 %123, 1
169   %125 = add nuw nsw i32 %124, %123
170   %126 = lshr i32 %125, 2
171   %127 = trunc i32 %126 to i16
172   %128 = getelementptr inbounds i16, ptr %0, i64 15
173   store i16 %127, ptr %128, align 2
174   ret void
177 define void @trunc_through_two_adds(ptr noalias %0, ptr noalias readonly %1, ptr noalias readonly %2) {
178 ; SSE-LABEL: @trunc_through_two_adds(
179 ; SSE-NEXT:    [[TMP4:%.*]] = load <8 x i8>, ptr [[TMP1:%.*]], align 1
180 ; SSE-NEXT:    [[TMP5:%.*]] = zext <8 x i8> [[TMP4]] to <8 x i16>
181 ; SSE-NEXT:    [[TMP6:%.*]] = load <8 x i8>, ptr [[TMP2:%.*]], align 1
182 ; SSE-NEXT:    [[TMP7:%.*]] = zext <8 x i8> [[TMP6]] to <8 x i16>
183 ; SSE-NEXT:    [[TMP8:%.*]] = add nuw nsw <8 x i16> [[TMP7]], [[TMP5]]
184 ; SSE-NEXT:    [[TMP9:%.*]] = lshr <8 x i16> [[TMP8]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
185 ; SSE-NEXT:    [[TMP10:%.*]] = add nuw nsw <8 x i16> [[TMP9]], [[TMP8]]
186 ; SSE-NEXT:    [[TMP11:%.*]] = lshr <8 x i16> [[TMP10]], <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
187 ; SSE-NEXT:    store <8 x i16> [[TMP11]], ptr [[TMP0:%.*]], align 2
188 ; SSE-NEXT:    [[TMP12:%.*]] = getelementptr inbounds i8, ptr [[TMP1]], i64 8
189 ; SSE-NEXT:    [[TMP13:%.*]] = getelementptr inbounds i8, ptr [[TMP2]], i64 8
190 ; SSE-NEXT:    [[TMP14:%.*]] = getelementptr inbounds i16, ptr [[TMP0]], i64 8
191 ; SSE-NEXT:    [[TMP15:%.*]] = load <8 x i8>, ptr [[TMP12]], align 1
192 ; SSE-NEXT:    [[TMP16:%.*]] = zext <8 x i8> [[TMP15]] to <8 x i16>
193 ; SSE-NEXT:    [[TMP17:%.*]] = load <8 x i8>, ptr [[TMP13]], align 1
194 ; SSE-NEXT:    [[TMP18:%.*]] = zext <8 x i8> [[TMP17]] to <8 x i16>
195 ; SSE-NEXT:    [[TMP19:%.*]] = add nuw nsw <8 x i16> [[TMP18]], [[TMP16]]
196 ; SSE-NEXT:    [[TMP20:%.*]] = lshr <8 x i16> [[TMP19]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
197 ; SSE-NEXT:    [[TMP21:%.*]] = add nuw nsw <8 x i16> [[TMP20]], [[TMP19]]
198 ; SSE-NEXT:    [[TMP22:%.*]] = lshr <8 x i16> [[TMP21]], <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
199 ; SSE-NEXT:    store <8 x i16> [[TMP22]], ptr [[TMP14]], align 2
200 ; SSE-NEXT:    ret void
202 ; AVX-LABEL: @trunc_through_two_adds(
203 ; AVX-NEXT:    [[TMP4:%.*]] = load <16 x i8>, ptr [[TMP1:%.*]], align 1
204 ; AVX-NEXT:    [[TMP5:%.*]] = zext <16 x i8> [[TMP4]] to <16 x i16>
205 ; AVX-NEXT:    [[TMP6:%.*]] = load <16 x i8>, ptr [[TMP2:%.*]], align 1
206 ; AVX-NEXT:    [[TMP7:%.*]] = zext <16 x i8> [[TMP6]] to <16 x i16>
207 ; AVX-NEXT:    [[TMP8:%.*]] = add nuw nsw <16 x i16> [[TMP7]], [[TMP5]]
208 ; AVX-NEXT:    [[TMP9:%.*]] = lshr <16 x i16> [[TMP8]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1>
209 ; AVX-NEXT:    [[TMP10:%.*]] = add nuw nsw <16 x i16> [[TMP9]], [[TMP8]]
210 ; AVX-NEXT:    [[TMP11:%.*]] = lshr <16 x i16> [[TMP10]], <i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2, i16 2>
211 ; AVX-NEXT:    store <16 x i16> [[TMP11]], ptr [[TMP0:%.*]], align 2
212 ; AVX-NEXT:    ret void
214   %4 = load i8, ptr %1, align 1
215   %5 = zext i8 %4 to i32
216   %6 = load i8, ptr %2, align 1
217   %7 = zext i8 %6 to i32
218   %8 = add nuw nsw i32 %7, %5
219   %9 = lshr i32 %8, 1
220   %10 = add nuw nsw i32 %9, %8
221   %11 = lshr i32 %10, 2
222   %12 = trunc i32 %11 to i16
223   store i16 %12, ptr %0, align 2
224   %13 = getelementptr inbounds i8, ptr %1, i64 1
225   %14 = load i8, ptr %13, align 1
226   %15 = zext i8 %14 to i32
227   %16 = getelementptr inbounds i8, ptr %2, i64 1
228   %17 = load i8, ptr %16, align 1
229   %18 = zext i8 %17 to i32
230   %19 = add nuw nsw i32 %18, %15
231   %20 = lshr i32 %19, 1
232   %21 = add nuw nsw i32 %20, %19
233   %22 = lshr i32 %21, 2
234   %23 = trunc i32 %22 to i16
235   %24 = getelementptr inbounds i16, ptr %0, i64 1
236   store i16 %23, ptr %24, align 2
237   %25 = getelementptr inbounds i8, ptr %1, i64 2
238   %26 = load i8, ptr %25, align 1
239   %27 = zext i8 %26 to i32
240   %28 = getelementptr inbounds i8, ptr %2, i64 2
241   %29 = load i8, ptr %28, align 1
242   %30 = zext i8 %29 to i32
243   %31 = add nuw nsw i32 %30, %27
244   %32 = lshr i32 %31, 1
245   %33 = add nuw nsw i32 %32, %31
246   %34 = lshr i32 %33, 2
247   %35 = trunc i32 %34 to i16
248   %36 = getelementptr inbounds i16, ptr %0, i64 2
249   store i16 %35, ptr %36, align 2
250   %37 = getelementptr inbounds i8, ptr %1, i64 3
251   %38 = load i8, ptr %37, align 1
252   %39 = zext i8 %38 to i32
253   %40 = getelementptr inbounds i8, ptr %2, i64 3
254   %41 = load i8, ptr %40, align 1
255   %42 = zext i8 %41 to i32
256   %43 = add nuw nsw i32 %42, %39
257   %44 = lshr i32 %43, 1
258   %45 = add nuw nsw i32 %44, %43
259   %46 = lshr i32 %45, 2
260   %47 = trunc i32 %46 to i16
261   %48 = getelementptr inbounds i16, ptr %0, i64 3
262   store i16 %47, ptr %48, align 2
263   %49 = getelementptr inbounds i8, ptr %1, i64 4
264   %50 = load i8, ptr %49, align 1
265   %51 = zext i8 %50 to i32
266   %52 = getelementptr inbounds i8, ptr %2, i64 4
267   %53 = load i8, ptr %52, align 1
268   %54 = zext i8 %53 to i32
269   %55 = add nuw nsw i32 %54, %51
270   %56 = lshr i32 %55, 1
271   %57 = add nuw nsw i32 %56, %55
272   %58 = lshr i32 %57, 2
273   %59 = trunc i32 %58 to i16
274   %60 = getelementptr inbounds i16, ptr %0, i64 4
275   store i16 %59, ptr %60, align 2
276   %61 = getelementptr inbounds i8, ptr %1, i64 5
277   %62 = load i8, ptr %61, align 1
278   %63 = zext i8 %62 to i32
279   %64 = getelementptr inbounds i8, ptr %2, i64 5
280   %65 = load i8, ptr %64, align 1
281   %66 = zext i8 %65 to i32
282   %67 = add nuw nsw i32 %66, %63
283   %68 = lshr i32 %67, 1
284   %69 = add nuw nsw i32 %68, %67
285   %70 = lshr i32 %69, 2
286   %71 = trunc i32 %70 to i16
287   %72 = getelementptr inbounds i16, ptr %0, i64 5
288   store i16 %71, ptr %72, align 2
289   %73 = getelementptr inbounds i8, ptr %1, i64 6
290   %74 = load i8, ptr %73, align 1
291   %75 = zext i8 %74 to i32
292   %76 = getelementptr inbounds i8, ptr %2, i64 6
293   %77 = load i8, ptr %76, align 1
294   %78 = zext i8 %77 to i32
295   %79 = add nuw nsw i32 %78, %75
296   %80 = lshr i32 %79, 1
297   %81 = add nuw nsw i32 %80, %79
298   %82 = lshr i32 %81, 2
299   %83 = trunc i32 %82 to i16
300   %84 = getelementptr inbounds i16, ptr %0, i64 6
301   store i16 %83, ptr %84, align 2
302   %85 = getelementptr inbounds i8, ptr %1, i64 7
303   %86 = load i8, ptr %85, align 1
304   %87 = zext i8 %86 to i32
305   %88 = getelementptr inbounds i8, ptr %2, i64 7
306   %89 = load i8, ptr %88, align 1
307   %90 = zext i8 %89 to i32
308   %91 = add nuw nsw i32 %90, %87
309   %92 = lshr i32 %91, 1
310   %93 = add nuw nsw i32 %92, %91
311   %94 = lshr i32 %93, 2
312   %95 = trunc i32 %94 to i16
313   %96 = getelementptr inbounds i16, ptr %0, i64 7
314   store i16 %95, ptr %96, align 2
315   %97 = getelementptr inbounds i8, ptr %1, i64 8
316   %98 = load i8, ptr %97, align 1
317   %99 = zext i8 %98 to i32
318   %100 = getelementptr inbounds i8, ptr %2, i64 8
319   %101 = load i8, ptr %100, align 1
320   %102 = zext i8 %101 to i32
321   %103 = add nuw nsw i32 %102, %99
322   %104 = lshr i32 %103, 1
323   %105 = add nuw nsw i32 %104, %103
324   %106 = lshr i32 %105, 2
325   %107 = trunc i32 %106 to i16
326   %108 = getelementptr inbounds i16, ptr %0, i64 8
327   store i16 %107, ptr %108, align 2
328   %109 = getelementptr inbounds i8, ptr %1, i64 9
329   %110 = load i8, ptr %109, align 1
330   %111 = zext i8 %110 to i32
331   %112 = getelementptr inbounds i8, ptr %2, i64 9
332   %113 = load i8, ptr %112, align 1
333   %114 = zext i8 %113 to i32
334   %115 = add nuw nsw i32 %114, %111
335   %116 = lshr i32 %115, 1
336   %117 = add nuw nsw i32 %116, %115
337   %118 = lshr i32 %117, 2
338   %119 = trunc i32 %118 to i16
339   %120 = getelementptr inbounds i16, ptr %0, i64 9
340   store i16 %119, ptr %120, align 2
341   %121 = getelementptr inbounds i8, ptr %1, i64 10
342   %122 = load i8, ptr %121, align 1
343   %123 = zext i8 %122 to i32
344   %124 = getelementptr inbounds i8, ptr %2, i64 10
345   %125 = load i8, ptr %124, align 1
346   %126 = zext i8 %125 to i32
347   %127 = add nuw nsw i32 %126, %123
348   %128 = lshr i32 %127, 1
349   %129 = add nuw nsw i32 %128, %127
350   %130 = lshr i32 %129, 2
351   %131 = trunc i32 %130 to i16
352   %132 = getelementptr inbounds i16, ptr %0, i64 10
353   store i16 %131, ptr %132, align 2
354   %133 = getelementptr inbounds i8, ptr %1, i64 11
355   %134 = load i8, ptr %133, align 1
356   %135 = zext i8 %134 to i32
357   %136 = getelementptr inbounds i8, ptr %2, i64 11
358   %137 = load i8, ptr %136, align 1
359   %138 = zext i8 %137 to i32
360   %139 = add nuw nsw i32 %138, %135
361   %140 = lshr i32 %139, 1
362   %141 = add nuw nsw i32 %140, %139
363   %142 = lshr i32 %141, 2
364   %143 = trunc i32 %142 to i16
365   %144 = getelementptr inbounds i16, ptr %0, i64 11
366   store i16 %143, ptr %144, align 2
367   %145 = getelementptr inbounds i8, ptr %1, i64 12
368   %146 = load i8, ptr %145, align 1
369   %147 = zext i8 %146 to i32
370   %148 = getelementptr inbounds i8, ptr %2, i64 12
371   %149 = load i8, ptr %148, align 1
372   %150 = zext i8 %149 to i32
373   %151 = add nuw nsw i32 %150, %147
374   %152 = lshr i32 %151, 1
375   %153 = add nuw nsw i32 %152, %151
376   %154 = lshr i32 %153, 2
377   %155 = trunc i32 %154 to i16
378   %156 = getelementptr inbounds i16, ptr %0, i64 12
379   store i16 %155, ptr %156, align 2
380   %157 = getelementptr inbounds i8, ptr %1, i64 13
381   %158 = load i8, ptr %157, align 1
382   %159 = zext i8 %158 to i32
383   %160 = getelementptr inbounds i8, ptr %2, i64 13
384   %161 = load i8, ptr %160, align 1
385   %162 = zext i8 %161 to i32
386   %163 = add nuw nsw i32 %162, %159
387   %164 = lshr i32 %163, 1
388   %165 = add nuw nsw i32 %164, %163
389   %166 = lshr i32 %165, 2
390   %167 = trunc i32 %166 to i16
391   %168 = getelementptr inbounds i16, ptr %0, i64 13
392   store i16 %167, ptr %168, align 2
393   %169 = getelementptr inbounds i8, ptr %1, i64 14
394   %170 = load i8, ptr %169, align 1
395   %171 = zext i8 %170 to i32
396   %172 = getelementptr inbounds i8, ptr %2, i64 14
397   %173 = load i8, ptr %172, align 1
398   %174 = zext i8 %173 to i32
399   %175 = add nuw nsw i32 %174, %171
400   %176 = lshr i32 %175, 1
401   %177 = add nuw nsw i32 %176, %175
402   %178 = lshr i32 %177, 2
403   %179 = trunc i32 %178 to i16
404   %180 = getelementptr inbounds i16, ptr %0, i64 14
405   store i16 %179, ptr %180, align 2
406   %181 = getelementptr inbounds i8, ptr %1, i64 15
407   %182 = load i8, ptr %181, align 1
408   %183 = zext i8 %182 to i32
409   %184 = getelementptr inbounds i8, ptr %2, i64 15
410   %185 = load i8, ptr %184, align 1
411   %186 = zext i8 %185 to i32
412   %187 = add nuw nsw i32 %186, %183
413   %188 = lshr i32 %187, 1
414   %189 = add nuw nsw i32 %188, %187
415   %190 = lshr i32 %189, 2
416   %191 = trunc i32 %190 to i16
417   %192 = getelementptr inbounds i16, ptr %0, i64 15
418   store i16 %191, ptr %192, align 2
419   ret void