1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -slp-vectorizer -mattr=+sse  < %s | FileCheck %s --check-prefixes=CHECK,SSE
3; RUN: opt -S -slp-vectorizer -mattr=+avx512f < %s | FileCheck %s --check-prefixes=CHECK,AVX512
4
5target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6target triple = "x86_64-unknown-linux-gnu"
7
8; Function Attrs: norecurse nounwind readnone uwtable
9define zeroext i8 @foo(i32 %x, i32 %y, i32 %a, i32 %b) local_unnamed_addr #0 {
10; CHECK-LABEL: @foo(
11; CHECK-NEXT:  entry:
12; CHECK-NEXT:    [[CMP:%.*]] = icmp slt i32 [[X:%.*]], [[Y:%.*]]
13; CHECK-NEXT:    [[B_A:%.*]] = select i1 [[CMP]], i32 [[B:%.*]], i32 [[A:%.*]]
14; CHECK-NEXT:    [[RETVAL_0:%.*]] = trunc i32 [[B_A]] to i8
15; CHECK-NEXT:    ret i8 [[RETVAL_0]]
16;
17entry:
18  %cmp = icmp slt i32 %x, %y
19  %b.a = select i1 %cmp, i32 %b, i32 %a
20  %retval.0 = trunc i32 %b.a to i8
21  ret i8 %retval.0
22}
23
24define void @bar(i8* noalias nocapture readonly %a, i8* noalias nocapture readonly %b, i8* noalias nocapture readonly %c, i8* noalias nocapture readonly %d, i8* noalias nocapture %e, i32 %w) local_unnamed_addr #1 {
25; SSE-LABEL: @bar(
26; SSE-NEXT:  entry:
27; SSE-NEXT:    [[TMP0:%.*]] = insertelement <4 x i32> poison, i32 [[W:%.*]], i32 0
28; SSE-NEXT:    [[SHUFFLE:%.*]] = shufflevector <4 x i32> [[TMP0]], <4 x i32> poison, <4 x i32> zeroinitializer
29; SSE-NEXT:    [[TMP1:%.*]] = insertelement <4 x i32> poison, i32 [[W]], i32 0
30; SSE-NEXT:    [[SHUFFLE1:%.*]] = shufflevector <4 x i32> [[TMP1]], <4 x i32> poison, <4 x i32> zeroinitializer
31; SSE-NEXT:    [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[W]], i32 0
32; SSE-NEXT:    [[SHUFFLE2:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer
33; SSE-NEXT:    [[TMP3:%.*]] = insertelement <4 x i32> poison, i32 [[W]], i32 0
34; SSE-NEXT:    [[SHUFFLE3:%.*]] = shufflevector <4 x i32> [[TMP3]], <4 x i32> poison, <4 x i32> zeroinitializer
35; SSE-NEXT:    br label [[FOR_BODY:%.*]]
36; SSE:       for.body:
37; SSE-NEXT:    [[I_0356:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
38; SSE-NEXT:    [[A_ADDR_0355:%.*]] = phi i8* [ [[A:%.*]], [[ENTRY]] ], [ [[ADD_PTR:%.*]], [[FOR_BODY]] ]
39; SSE-NEXT:    [[E_ADDR_0354:%.*]] = phi i8* [ [[E:%.*]], [[ENTRY]] ], [ [[ADD_PTR192:%.*]], [[FOR_BODY]] ]
40; SSE-NEXT:    [[D_ADDR_0353:%.*]] = phi i8* [ [[D:%.*]], [[ENTRY]] ], [ [[ADD_PTR191:%.*]], [[FOR_BODY]] ]
41; SSE-NEXT:    [[C_ADDR_0352:%.*]] = phi i8* [ [[C:%.*]], [[ENTRY]] ], [ [[ADD_PTR190:%.*]], [[FOR_BODY]] ]
42; SSE-NEXT:    [[B_ADDR_0351:%.*]] = phi i8* [ [[B:%.*]], [[ENTRY]] ], [ [[ADD_PTR189:%.*]], [[FOR_BODY]] ]
43; SSE-NEXT:    [[TMP4:%.*]] = bitcast i8* [[C_ADDR_0352]] to <4 x i8>*
44; SSE-NEXT:    [[TMP5:%.*]] = load <4 x i8>, <4 x i8>* [[TMP4]], align 1
45; SSE-NEXT:    [[TMP6:%.*]] = bitcast i8* [[D_ADDR_0353]] to <4 x i8>*
46; SSE-NEXT:    [[TMP7:%.*]] = load <4 x i8>, <4 x i8>* [[TMP6]], align 1
47; SSE-NEXT:    [[TMP8:%.*]] = bitcast i8* [[A_ADDR_0355]] to <4 x i8>*
48; SSE-NEXT:    [[TMP9:%.*]] = load <4 x i8>, <4 x i8>* [[TMP8]], align 1
49; SSE-NEXT:    [[TMP10:%.*]] = bitcast i8* [[B_ADDR_0351]] to <4 x i8>*
50; SSE-NEXT:    [[TMP11:%.*]] = load <4 x i8>, <4 x i8>* [[TMP10]], align 1
51; SSE-NEXT:    [[TMP12:%.*]] = icmp ult <4 x i8> [[TMP5]], [[TMP7]]
52; SSE-NEXT:    [[TMP13:%.*]] = select <4 x i1> [[TMP12]], <4 x i8> [[TMP11]], <4 x i8> [[TMP9]]
53; SSE-NEXT:    [[TMP14:%.*]] = zext <4 x i8> [[TMP13]] to <4 x i32>
54; SSE-NEXT:    [[TMP15:%.*]] = mul <4 x i32> [[TMP14]], [[SHUFFLE]]
55; SSE-NEXT:    [[TMP16:%.*]] = trunc <4 x i32> [[TMP15]] to <4 x i8>
56; SSE-NEXT:    [[TMP17:%.*]] = bitcast i8* [[E_ADDR_0354]] to <4 x i8>*
57; SSE-NEXT:    store <4 x i8> [[TMP16]], <4 x i8>* [[TMP17]], align 1
58; SSE-NEXT:    [[ARRAYIDX45:%.*]] = getelementptr inbounds i8, i8* [[C_ADDR_0352]], i64 4
59; SSE-NEXT:    [[ARRAYIDX47:%.*]] = getelementptr inbounds i8, i8* [[D_ADDR_0353]], i64 4
60; SSE-NEXT:    [[ARRAYIDX49:%.*]] = getelementptr inbounds i8, i8* [[A_ADDR_0355]], i64 4
61; SSE-NEXT:    [[ARRAYIDX52:%.*]] = getelementptr inbounds i8, i8* [[B_ADDR_0351]], i64 4
62; SSE-NEXT:    [[ARRAYIDX56:%.*]] = getelementptr inbounds i8, i8* [[E_ADDR_0354]], i64 4
63; SSE-NEXT:    [[TMP18:%.*]] = bitcast i8* [[ARRAYIDX45]] to <4 x i8>*
64; SSE-NEXT:    [[TMP19:%.*]] = load <4 x i8>, <4 x i8>* [[TMP18]], align 1
65; SSE-NEXT:    [[TMP20:%.*]] = bitcast i8* [[ARRAYIDX47]] to <4 x i8>*
66; SSE-NEXT:    [[TMP21:%.*]] = load <4 x i8>, <4 x i8>* [[TMP20]], align 1
67; SSE-NEXT:    [[TMP22:%.*]] = bitcast i8* [[ARRAYIDX49]] to <4 x i8>*
68; SSE-NEXT:    [[TMP23:%.*]] = load <4 x i8>, <4 x i8>* [[TMP22]], align 1
69; SSE-NEXT:    [[TMP24:%.*]] = bitcast i8* [[ARRAYIDX52]] to <4 x i8>*
70; SSE-NEXT:    [[TMP25:%.*]] = load <4 x i8>, <4 x i8>* [[TMP24]], align 1
71; SSE-NEXT:    [[TMP26:%.*]] = icmp ult <4 x i8> [[TMP19]], [[TMP21]]
72; SSE-NEXT:    [[TMP27:%.*]] = select <4 x i1> [[TMP26]], <4 x i8> [[TMP25]], <4 x i8> [[TMP23]]
73; SSE-NEXT:    [[TMP28:%.*]] = zext <4 x i8> [[TMP27]] to <4 x i32>
74; SSE-NEXT:    [[TMP29:%.*]] = mul <4 x i32> [[TMP28]], [[SHUFFLE1]]
75; SSE-NEXT:    [[TMP30:%.*]] = trunc <4 x i32> [[TMP29]] to <4 x i8>
76; SSE-NEXT:    [[TMP31:%.*]] = bitcast i8* [[ARRAYIDX56]] to <4 x i8>*
77; SSE-NEXT:    store <4 x i8> [[TMP30]], <4 x i8>* [[TMP31]], align 1
78; SSE-NEXT:    [[ARRAYIDX93:%.*]] = getelementptr inbounds i8, i8* [[C_ADDR_0352]], i64 8
79; SSE-NEXT:    [[ARRAYIDX95:%.*]] = getelementptr inbounds i8, i8* [[D_ADDR_0353]], i64 8
80; SSE-NEXT:    [[ARRAYIDX97:%.*]] = getelementptr inbounds i8, i8* [[A_ADDR_0355]], i64 8
81; SSE-NEXT:    [[ARRAYIDX100:%.*]] = getelementptr inbounds i8, i8* [[B_ADDR_0351]], i64 8
82; SSE-NEXT:    [[ARRAYIDX104:%.*]] = getelementptr inbounds i8, i8* [[E_ADDR_0354]], i64 8
83; SSE-NEXT:    [[TMP32:%.*]] = bitcast i8* [[ARRAYIDX93]] to <4 x i8>*
84; SSE-NEXT:    [[TMP33:%.*]] = load <4 x i8>, <4 x i8>* [[TMP32]], align 1
85; SSE-NEXT:    [[TMP34:%.*]] = bitcast i8* [[ARRAYIDX95]] to <4 x i8>*
86; SSE-NEXT:    [[TMP35:%.*]] = load <4 x i8>, <4 x i8>* [[TMP34]], align 1
87; SSE-NEXT:    [[TMP36:%.*]] = bitcast i8* [[ARRAYIDX97]] to <4 x i8>*
88; SSE-NEXT:    [[TMP37:%.*]] = load <4 x i8>, <4 x i8>* [[TMP36]], align 1
89; SSE-NEXT:    [[TMP38:%.*]] = bitcast i8* [[ARRAYIDX100]] to <4 x i8>*
90; SSE-NEXT:    [[TMP39:%.*]] = load <4 x i8>, <4 x i8>* [[TMP38]], align 1
91; SSE-NEXT:    [[TMP40:%.*]] = icmp ult <4 x i8> [[TMP33]], [[TMP35]]
92; SSE-NEXT:    [[TMP41:%.*]] = select <4 x i1> [[TMP40]], <4 x i8> [[TMP39]], <4 x i8> [[TMP37]]
93; SSE-NEXT:    [[TMP42:%.*]] = zext <4 x i8> [[TMP41]] to <4 x i32>
94; SSE-NEXT:    [[TMP43:%.*]] = mul <4 x i32> [[TMP42]], [[SHUFFLE2]]
95; SSE-NEXT:    [[TMP44:%.*]] = trunc <4 x i32> [[TMP43]] to <4 x i8>
96; SSE-NEXT:    [[TMP45:%.*]] = bitcast i8* [[ARRAYIDX104]] to <4 x i8>*
97; SSE-NEXT:    store <4 x i8> [[TMP44]], <4 x i8>* [[TMP45]], align 1
98; SSE-NEXT:    [[ARRAYIDX141:%.*]] = getelementptr inbounds i8, i8* [[C_ADDR_0352]], i64 12
99; SSE-NEXT:    [[ARRAYIDX143:%.*]] = getelementptr inbounds i8, i8* [[D_ADDR_0353]], i64 12
100; SSE-NEXT:    [[ARRAYIDX145:%.*]] = getelementptr inbounds i8, i8* [[A_ADDR_0355]], i64 12
101; SSE-NEXT:    [[ARRAYIDX148:%.*]] = getelementptr inbounds i8, i8* [[B_ADDR_0351]], i64 12
102; SSE-NEXT:    [[ARRAYIDX152:%.*]] = getelementptr inbounds i8, i8* [[E_ADDR_0354]], i64 12
103; SSE-NEXT:    [[TMP46:%.*]] = bitcast i8* [[ARRAYIDX141]] to <4 x i8>*
104; SSE-NEXT:    [[TMP47:%.*]] = load <4 x i8>, <4 x i8>* [[TMP46]], align 1
105; SSE-NEXT:    [[TMP48:%.*]] = bitcast i8* [[ARRAYIDX143]] to <4 x i8>*
106; SSE-NEXT:    [[TMP49:%.*]] = load <4 x i8>, <4 x i8>* [[TMP48]], align 1
107; SSE-NEXT:    [[TMP50:%.*]] = bitcast i8* [[ARRAYIDX145]] to <4 x i8>*
108; SSE-NEXT:    [[TMP51:%.*]] = load <4 x i8>, <4 x i8>* [[TMP50]], align 1
109; SSE-NEXT:    [[TMP52:%.*]] = bitcast i8* [[ARRAYIDX148]] to <4 x i8>*
110; SSE-NEXT:    [[TMP53:%.*]] = load <4 x i8>, <4 x i8>* [[TMP52]], align 1
111; SSE-NEXT:    [[TMP54:%.*]] = icmp ult <4 x i8> [[TMP47]], [[TMP49]]
112; SSE-NEXT:    [[TMP55:%.*]] = select <4 x i1> [[TMP54]], <4 x i8> [[TMP53]], <4 x i8> [[TMP51]]
113; SSE-NEXT:    [[TMP56:%.*]] = zext <4 x i8> [[TMP55]] to <4 x i32>
114; SSE-NEXT:    [[TMP57:%.*]] = mul <4 x i32> [[TMP56]], [[SHUFFLE3]]
115; SSE-NEXT:    [[TMP58:%.*]] = trunc <4 x i32> [[TMP57]] to <4 x i8>
116; SSE-NEXT:    [[TMP59:%.*]] = bitcast i8* [[ARRAYIDX152]] to <4 x i8>*
117; SSE-NEXT:    store <4 x i8> [[TMP58]], <4 x i8>* [[TMP59]], align 1
118; SSE-NEXT:    [[INC]] = add nuw nsw i32 [[I_0356]], 1
119; SSE-NEXT:    [[ADD_PTR]] = getelementptr inbounds i8, i8* [[A_ADDR_0355]], i64 16
120; SSE-NEXT:    [[ADD_PTR189]] = getelementptr inbounds i8, i8* [[B_ADDR_0351]], i64 16
121; SSE-NEXT:    [[ADD_PTR190]] = getelementptr inbounds i8, i8* [[C_ADDR_0352]], i64 16
122; SSE-NEXT:    [[ADD_PTR191]] = getelementptr inbounds i8, i8* [[D_ADDR_0353]], i64 16
123; SSE-NEXT:    [[ADD_PTR192]] = getelementptr inbounds i8, i8* [[E_ADDR_0354]], i64 16
124; SSE-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 8
125; SSE-NEXT:    br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
126; SSE:       for.end:
127; SSE-NEXT:    ret void
128;
129; AVX512-LABEL: @bar(
130; AVX512-NEXT:  entry:
131; AVX512-NEXT:    [[TMP0:%.*]] = insertelement <16 x i32> poison, i32 [[W:%.*]], i32 0
132; AVX512-NEXT:    [[SHUFFLE:%.*]] = shufflevector <16 x i32> [[TMP0]], <16 x i32> poison, <16 x i32> zeroinitializer
133; AVX512-NEXT:    br label [[FOR_BODY:%.*]]
134; AVX512:       for.body:
135; AVX512-NEXT:    [[I_0356:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]
136; AVX512-NEXT:    [[A_ADDR_0355:%.*]] = phi i8* [ [[A:%.*]], [[ENTRY]] ], [ [[ADD_PTR:%.*]], [[FOR_BODY]] ]
137; AVX512-NEXT:    [[E_ADDR_0354:%.*]] = phi i8* [ [[E:%.*]], [[ENTRY]] ], [ [[ADD_PTR192:%.*]], [[FOR_BODY]] ]
138; AVX512-NEXT:    [[D_ADDR_0353:%.*]] = phi i8* [ [[D:%.*]], [[ENTRY]] ], [ [[ADD_PTR191:%.*]], [[FOR_BODY]] ]
139; AVX512-NEXT:    [[C_ADDR_0352:%.*]] = phi i8* [ [[C:%.*]], [[ENTRY]] ], [ [[ADD_PTR190:%.*]], [[FOR_BODY]] ]
140; AVX512-NEXT:    [[B_ADDR_0351:%.*]] = phi i8* [ [[B:%.*]], [[ENTRY]] ], [ [[ADD_PTR189:%.*]], [[FOR_BODY]] ]
141; AVX512-NEXT:    [[TMP1:%.*]] = bitcast i8* [[C_ADDR_0352]] to <16 x i8>*
142; AVX512-NEXT:    [[TMP2:%.*]] = load <16 x i8>, <16 x i8>* [[TMP1]], align 1
143; AVX512-NEXT:    [[TMP3:%.*]] = bitcast i8* [[D_ADDR_0353]] to <16 x i8>*
144; AVX512-NEXT:    [[TMP4:%.*]] = load <16 x i8>, <16 x i8>* [[TMP3]], align 1
145; AVX512-NEXT:    [[TMP5:%.*]] = bitcast i8* [[A_ADDR_0355]] to <16 x i8>*
146; AVX512-NEXT:    [[TMP6:%.*]] = load <16 x i8>, <16 x i8>* [[TMP5]], align 1
147; AVX512-NEXT:    [[TMP7:%.*]] = bitcast i8* [[B_ADDR_0351]] to <16 x i8>*
148; AVX512-NEXT:    [[TMP8:%.*]] = load <16 x i8>, <16 x i8>* [[TMP7]], align 1
149; AVX512-NEXT:    [[TMP9:%.*]] = icmp ult <16 x i8> [[TMP2]], [[TMP4]]
150; AVX512-NEXT:    [[TMP10:%.*]] = select <16 x i1> [[TMP9]], <16 x i8> [[TMP8]], <16 x i8> [[TMP6]]
151; AVX512-NEXT:    [[TMP11:%.*]] = zext <16 x i8> [[TMP10]] to <16 x i32>
152; AVX512-NEXT:    [[TMP12:%.*]] = mul <16 x i32> [[TMP11]], [[SHUFFLE]]
153; AVX512-NEXT:    [[TMP13:%.*]] = trunc <16 x i32> [[TMP12]] to <16 x i8>
154; AVX512-NEXT:    [[TMP14:%.*]] = bitcast i8* [[E_ADDR_0354]] to <16 x i8>*
155; AVX512-NEXT:    store <16 x i8> [[TMP13]], <16 x i8>* [[TMP14]], align 1
156; AVX512-NEXT:    [[INC]] = add nuw nsw i32 [[I_0356]], 1
157; AVX512-NEXT:    [[ADD_PTR]] = getelementptr inbounds i8, i8* [[A_ADDR_0355]], i64 16
158; AVX512-NEXT:    [[ADD_PTR189]] = getelementptr inbounds i8, i8* [[B_ADDR_0351]], i64 16
159; AVX512-NEXT:    [[ADD_PTR190]] = getelementptr inbounds i8, i8* [[C_ADDR_0352]], i64 16
160; AVX512-NEXT:    [[ADD_PTR191]] = getelementptr inbounds i8, i8* [[D_ADDR_0353]], i64 16
161; AVX512-NEXT:    [[ADD_PTR192]] = getelementptr inbounds i8, i8* [[E_ADDR_0354]], i64 16
162; AVX512-NEXT:    [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 8
163; AVX512-NEXT:    br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]
164; AVX512:       for.end:
165; AVX512-NEXT:    ret void
166;
167entry:
168  br label %for.body
169
170for.body:                                         ; preds = %for.body, %entry
171  %i.0356 = phi i32 [ 0, %entry ], [ %inc, %for.body ]
172  %a.addr.0355 = phi i8* [ %a, %entry ], [ %add.ptr, %for.body ]
173  %e.addr.0354 = phi i8* [ %e, %entry ], [ %add.ptr192, %for.body ]
174  %d.addr.0353 = phi i8* [ %d, %entry ], [ %add.ptr191, %for.body ]
175  %c.addr.0352 = phi i8* [ %c, %entry ], [ %add.ptr190, %for.body ]
176  %b.addr.0351 = phi i8* [ %b, %entry ], [ %add.ptr189, %for.body ]
177  %0 = load i8, i8* %c.addr.0352, align 1
178  %1 = load i8, i8* %d.addr.0353, align 1
179  %2 = load i8, i8* %a.addr.0355, align 1
180  %3 = load i8, i8* %b.addr.0351, align 1
181  %cmp.i = icmp ult i8 %0, %1
182  %b.a.i.v.v = select i1 %cmp.i, i8 %3, i8 %2
183  %b.a.i.v = zext i8 %b.a.i.v.v to i32
184  %b.a.i = mul i32 %b.a.i.v, %w
185  %retval.0.i = trunc i32 %b.a.i to i8
186  store i8 %retval.0.i, i8* %e.addr.0354, align 1
187  %arrayidx9 = getelementptr inbounds i8, i8* %c.addr.0352, i64 1
188  %4 = load i8, i8* %arrayidx9, align 1
189  %arrayidx11 = getelementptr inbounds i8, i8* %d.addr.0353, i64 1
190  %5 = load i8, i8* %arrayidx11, align 1
191  %arrayidx13 = getelementptr inbounds i8, i8* %a.addr.0355, i64 1
192  %6 = load i8, i8* %arrayidx13, align 1
193  %arrayidx16 = getelementptr inbounds i8, i8* %b.addr.0351, i64 1
194  %7 = load i8, i8* %arrayidx16, align 1
195  %cmp.i348 = icmp ult i8 %4, %5
196  %b.a.i349.v.v = select i1 %cmp.i348, i8 %7, i8 %6
197  %b.a.i349.v = zext i8 %b.a.i349.v.v to i32
198  %b.a.i349 = mul i32 %b.a.i349.v, %w
199  %retval.0.i350 = trunc i32 %b.a.i349 to i8
200  %arrayidx20 = getelementptr inbounds i8, i8* %e.addr.0354, i64 1
201  store i8 %retval.0.i350, i8* %arrayidx20, align 1
202  %arrayidx21 = getelementptr inbounds i8, i8* %c.addr.0352, i64 2
203  %8 = load i8, i8* %arrayidx21, align 1
204  %arrayidx23 = getelementptr inbounds i8, i8* %d.addr.0353, i64 2
205  %9 = load i8, i8* %arrayidx23, align 1
206  %arrayidx25 = getelementptr inbounds i8, i8* %a.addr.0355, i64 2
207  %10 = load i8, i8* %arrayidx25, align 1
208  %arrayidx28 = getelementptr inbounds i8, i8* %b.addr.0351, i64 2
209  %11 = load i8, i8* %arrayidx28, align 1
210  %cmp.i345 = icmp ult i8 %8, %9
211  %b.a.i346.v.v = select i1 %cmp.i345, i8 %11, i8 %10
212  %b.a.i346.v = zext i8 %b.a.i346.v.v to i32
213  %b.a.i346 = mul i32 %b.a.i346.v, %w
214  %retval.0.i347 = trunc i32 %b.a.i346 to i8
215  %arrayidx32 = getelementptr inbounds i8, i8* %e.addr.0354, i64 2
216  store i8 %retval.0.i347, i8* %arrayidx32, align 1
217  %arrayidx33 = getelementptr inbounds i8, i8* %c.addr.0352, i64 3
218  %12 = load i8, i8* %arrayidx33, align 1
219  %arrayidx35 = getelementptr inbounds i8, i8* %d.addr.0353, i64 3
220  %13 = load i8, i8* %arrayidx35, align 1
221  %arrayidx37 = getelementptr inbounds i8, i8* %a.addr.0355, i64 3
222  %14 = load i8, i8* %arrayidx37, align 1
223  %arrayidx40 = getelementptr inbounds i8, i8* %b.addr.0351, i64 3
224  %15 = load i8, i8* %arrayidx40, align 1
225  %cmp.i342 = icmp ult i8 %12, %13
226  %b.a.i343.v.v = select i1 %cmp.i342, i8 %15, i8 %14
227  %b.a.i343.v = zext i8 %b.a.i343.v.v to i32
228  %b.a.i343 = mul i32 %b.a.i343.v, %w
229  %retval.0.i344 = trunc i32 %b.a.i343 to i8
230  %arrayidx44 = getelementptr inbounds i8, i8* %e.addr.0354, i64 3
231  store i8 %retval.0.i344, i8* %arrayidx44, align 1
232  %arrayidx45 = getelementptr inbounds i8, i8* %c.addr.0352, i64 4
233  %16 = load i8, i8* %arrayidx45, align 1
234  %arrayidx47 = getelementptr inbounds i8, i8* %d.addr.0353, i64 4
235  %17 = load i8, i8* %arrayidx47, align 1
236  %arrayidx49 = getelementptr inbounds i8, i8* %a.addr.0355, i64 4
237  %18 = load i8, i8* %arrayidx49, align 1
238  %arrayidx52 = getelementptr inbounds i8, i8* %b.addr.0351, i64 4
239  %19 = load i8, i8* %arrayidx52, align 1
240  %cmp.i339 = icmp ult i8 %16, %17
241  %b.a.i340.v.v = select i1 %cmp.i339, i8 %19, i8 %18
242  %b.a.i340.v = zext i8 %b.a.i340.v.v to i32
243  %b.a.i340 = mul i32 %b.a.i340.v, %w
244  %retval.0.i341 = trunc i32 %b.a.i340 to i8
245  %arrayidx56 = getelementptr inbounds i8, i8* %e.addr.0354, i64 4
246  store i8 %retval.0.i341, i8* %arrayidx56, align 1
247  %arrayidx57 = getelementptr inbounds i8, i8* %c.addr.0352, i64 5
248  %20 = load i8, i8* %arrayidx57, align 1
249  %arrayidx59 = getelementptr inbounds i8, i8* %d.addr.0353, i64 5
250  %21 = load i8, i8* %arrayidx59, align 1
251  %arrayidx61 = getelementptr inbounds i8, i8* %a.addr.0355, i64 5
252  %22 = load i8, i8* %arrayidx61, align 1
253  %arrayidx64 = getelementptr inbounds i8, i8* %b.addr.0351, i64 5
254  %23 = load i8, i8* %arrayidx64, align 1
255  %cmp.i336 = icmp ult i8 %20, %21
256  %b.a.i337.v.v = select i1 %cmp.i336, i8 %23, i8 %22
257  %b.a.i337.v = zext i8 %b.a.i337.v.v to i32
258  %b.a.i337 = mul i32 %b.a.i337.v, %w
259  %retval.0.i338 = trunc i32 %b.a.i337 to i8
260  %arrayidx68 = getelementptr inbounds i8, i8* %e.addr.0354, i64 5
261  store i8 %retval.0.i338, i8* %arrayidx68, align 1
262  %arrayidx69 = getelementptr inbounds i8, i8* %c.addr.0352, i64 6
263  %24 = load i8, i8* %arrayidx69, align 1
264  %arrayidx71 = getelementptr inbounds i8, i8* %d.addr.0353, i64 6
265  %25 = load i8, i8* %arrayidx71, align 1
266  %arrayidx73 = getelementptr inbounds i8, i8* %a.addr.0355, i64 6
267  %26 = load i8, i8* %arrayidx73, align 1
268  %arrayidx76 = getelementptr inbounds i8, i8* %b.addr.0351, i64 6
269  %27 = load i8, i8* %arrayidx76, align 1
270  %cmp.i333 = icmp ult i8 %24, %25
271  %b.a.i334.v.v = select i1 %cmp.i333, i8 %27, i8 %26
272  %b.a.i334.v = zext i8 %b.a.i334.v.v to i32
273  %b.a.i334 = mul i32 %b.a.i334.v, %w
274  %retval.0.i335 = trunc i32 %b.a.i334 to i8
275  %arrayidx80 = getelementptr inbounds i8, i8* %e.addr.0354, i64 6
276  store i8 %retval.0.i335, i8* %arrayidx80, align 1
277  %arrayidx81 = getelementptr inbounds i8, i8* %c.addr.0352, i64 7
278  %28 = load i8, i8* %arrayidx81, align 1
279  %arrayidx83 = getelementptr inbounds i8, i8* %d.addr.0353, i64 7
280  %29 = load i8, i8* %arrayidx83, align 1
281  %arrayidx85 = getelementptr inbounds i8, i8* %a.addr.0355, i64 7
282  %30 = load i8, i8* %arrayidx85, align 1
283  %arrayidx88 = getelementptr inbounds i8, i8* %b.addr.0351, i64 7
284  %31 = load i8, i8* %arrayidx88, align 1
285  %cmp.i330 = icmp ult i8 %28, %29
286  %b.a.i331.v.v = select i1 %cmp.i330, i8 %31, i8 %30
287  %b.a.i331.v = zext i8 %b.a.i331.v.v to i32
288  %b.a.i331 = mul i32 %b.a.i331.v, %w
289  %retval.0.i332 = trunc i32 %b.a.i331 to i8
290  %arrayidx92 = getelementptr inbounds i8, i8* %e.addr.0354, i64 7
291  store i8 %retval.0.i332, i8* %arrayidx92, align 1
292  %arrayidx93 = getelementptr inbounds i8, i8* %c.addr.0352, i64 8
293  %32 = load i8, i8* %arrayidx93, align 1
294  %arrayidx95 = getelementptr inbounds i8, i8* %d.addr.0353, i64 8
295  %33 = load i8, i8* %arrayidx95, align 1
296  %arrayidx97 = getelementptr inbounds i8, i8* %a.addr.0355, i64 8
297  %34 = load i8, i8* %arrayidx97, align 1
298  %arrayidx100 = getelementptr inbounds i8, i8* %b.addr.0351, i64 8
299  %35 = load i8, i8* %arrayidx100, align 1
300  %cmp.i327 = icmp ult i8 %32, %33
301  %b.a.i328.v.v = select i1 %cmp.i327, i8 %35, i8 %34
302  %b.a.i328.v = zext i8 %b.a.i328.v.v to i32
303  %b.a.i328 = mul i32 %b.a.i328.v, %w
304  %retval.0.i329 = trunc i32 %b.a.i328 to i8
305  %arrayidx104 = getelementptr inbounds i8, i8* %e.addr.0354, i64 8
306  store i8 %retval.0.i329, i8* %arrayidx104, align 1
307  %arrayidx105 = getelementptr inbounds i8, i8* %c.addr.0352, i64 9
308  %36 = load i8, i8* %arrayidx105, align 1
309  %arrayidx107 = getelementptr inbounds i8, i8* %d.addr.0353, i64 9
310  %37 = load i8, i8* %arrayidx107, align 1
311  %arrayidx109 = getelementptr inbounds i8, i8* %a.addr.0355, i64 9
312  %38 = load i8, i8* %arrayidx109, align 1
313  %arrayidx112 = getelementptr inbounds i8, i8* %b.addr.0351, i64 9
314  %39 = load i8, i8* %arrayidx112, align 1
315  %cmp.i324 = icmp ult i8 %36, %37
316  %b.a.i325.v.v = select i1 %cmp.i324, i8 %39, i8 %38
317  %b.a.i325.v = zext i8 %b.a.i325.v.v to i32
318  %b.a.i325 = mul i32 %b.a.i325.v, %w
319  %retval.0.i326 = trunc i32 %b.a.i325 to i8
320  %arrayidx116 = getelementptr inbounds i8, i8* %e.addr.0354, i64 9
321  store i8 %retval.0.i326, i8* %arrayidx116, align 1
322  %arrayidx117 = getelementptr inbounds i8, i8* %c.addr.0352, i64 10
323  %40 = load i8, i8* %arrayidx117, align 1
324  %arrayidx119 = getelementptr inbounds i8, i8* %d.addr.0353, i64 10
325  %41 = load i8, i8* %arrayidx119, align 1
326  %arrayidx121 = getelementptr inbounds i8, i8* %a.addr.0355, i64 10
327  %42 = load i8, i8* %arrayidx121, align 1
328  %arrayidx124 = getelementptr inbounds i8, i8* %b.addr.0351, i64 10
329  %43 = load i8, i8* %arrayidx124, align 1
330  %cmp.i321 = icmp ult i8 %40, %41
331  %b.a.i322.v.v = select i1 %cmp.i321, i8 %43, i8 %42
332  %b.a.i322.v = zext i8 %b.a.i322.v.v to i32
333  %b.a.i322 = mul i32 %b.a.i322.v, %w
334  %retval.0.i323 = trunc i32 %b.a.i322 to i8
335  %arrayidx128 = getelementptr inbounds i8, i8* %e.addr.0354, i64 10
336  store i8 %retval.0.i323, i8* %arrayidx128, align 1
337  %arrayidx129 = getelementptr inbounds i8, i8* %c.addr.0352, i64 11
338  %44 = load i8, i8* %arrayidx129, align 1
339  %arrayidx131 = getelementptr inbounds i8, i8* %d.addr.0353, i64 11
340  %45 = load i8, i8* %arrayidx131, align 1
341  %arrayidx133 = getelementptr inbounds i8, i8* %a.addr.0355, i64 11
342  %46 = load i8, i8* %arrayidx133, align 1
343  %arrayidx136 = getelementptr inbounds i8, i8* %b.addr.0351, i64 11
344  %47 = load i8, i8* %arrayidx136, align 1
345  %cmp.i318 = icmp ult i8 %44, %45
346  %b.a.i319.v.v = select i1 %cmp.i318, i8 %47, i8 %46
347  %b.a.i319.v = zext i8 %b.a.i319.v.v to i32
348  %b.a.i319 = mul i32 %b.a.i319.v, %w
349  %retval.0.i320 = trunc i32 %b.a.i319 to i8
350  %arrayidx140 = getelementptr inbounds i8, i8* %e.addr.0354, i64 11
351  store i8 %retval.0.i320, i8* %arrayidx140, align 1
352  %arrayidx141 = getelementptr inbounds i8, i8* %c.addr.0352, i64 12
353  %48 = load i8, i8* %arrayidx141, align 1
354  %arrayidx143 = getelementptr inbounds i8, i8* %d.addr.0353, i64 12
355  %49 = load i8, i8* %arrayidx143, align 1
356  %arrayidx145 = getelementptr inbounds i8, i8* %a.addr.0355, i64 12
357  %50 = load i8, i8* %arrayidx145, align 1
358  %arrayidx148 = getelementptr inbounds i8, i8* %b.addr.0351, i64 12
359  %51 = load i8, i8* %arrayidx148, align 1
360  %cmp.i315 = icmp ult i8 %48, %49
361  %b.a.i316.v.v = select i1 %cmp.i315, i8 %51, i8 %50
362  %b.a.i316.v = zext i8 %b.a.i316.v.v to i32
363  %b.a.i316 = mul i32 %b.a.i316.v, %w
364  %retval.0.i317 = trunc i32 %b.a.i316 to i8
365  %arrayidx152 = getelementptr inbounds i8, i8* %e.addr.0354, i64 12
366  store i8 %retval.0.i317, i8* %arrayidx152, align 1
367  %arrayidx153 = getelementptr inbounds i8, i8* %c.addr.0352, i64 13
368  %52 = load i8, i8* %arrayidx153, align 1
369  %arrayidx155 = getelementptr inbounds i8, i8* %d.addr.0353, i64 13
370  %53 = load i8, i8* %arrayidx155, align 1
371  %arrayidx157 = getelementptr inbounds i8, i8* %a.addr.0355, i64 13
372  %54 = load i8, i8* %arrayidx157, align 1
373  %arrayidx160 = getelementptr inbounds i8, i8* %b.addr.0351, i64 13
374  %55 = load i8, i8* %arrayidx160, align 1
375  %cmp.i312 = icmp ult i8 %52, %53
376  %b.a.i313.v.v = select i1 %cmp.i312, i8 %55, i8 %54
377  %b.a.i313.v = zext i8 %b.a.i313.v.v to i32
378  %b.a.i313 = mul i32 %b.a.i313.v, %w
379  %retval.0.i314 = trunc i32 %b.a.i313 to i8
380  %arrayidx164 = getelementptr inbounds i8, i8* %e.addr.0354, i64 13
381  store i8 %retval.0.i314, i8* %arrayidx164, align 1
382  %arrayidx165 = getelementptr inbounds i8, i8* %c.addr.0352, i64 14
383  %56 = load i8, i8* %arrayidx165, align 1
384  %arrayidx167 = getelementptr inbounds i8, i8* %d.addr.0353, i64 14
385  %57 = load i8, i8* %arrayidx167, align 1
386  %arrayidx169 = getelementptr inbounds i8, i8* %a.addr.0355, i64 14
387  %58 = load i8, i8* %arrayidx169, align 1
388  %arrayidx172 = getelementptr inbounds i8, i8* %b.addr.0351, i64 14
389  %59 = load i8, i8* %arrayidx172, align 1
390  %cmp.i309 = icmp ult i8 %56, %57
391  %b.a.i310.v.v = select i1 %cmp.i309, i8 %59, i8 %58
392  %b.a.i310.v = zext i8 %b.a.i310.v.v to i32
393  %b.a.i310 = mul i32 %b.a.i310.v, %w
394  %retval.0.i311 = trunc i32 %b.a.i310 to i8
395  %arrayidx176 = getelementptr inbounds i8, i8* %e.addr.0354, i64 14
396  store i8 %retval.0.i311, i8* %arrayidx176, align 1
397  %arrayidx177 = getelementptr inbounds i8, i8* %c.addr.0352, i64 15
398  %60 = load i8, i8* %arrayidx177, align 1
399  %arrayidx179 = getelementptr inbounds i8, i8* %d.addr.0353, i64 15
400  %61 = load i8, i8* %arrayidx179, align 1
401  %arrayidx181 = getelementptr inbounds i8, i8* %a.addr.0355, i64 15
402  %62 = load i8, i8* %arrayidx181, align 1
403  %arrayidx184 = getelementptr inbounds i8, i8* %b.addr.0351, i64 15
404  %63 = load i8, i8* %arrayidx184, align 1
405  %cmp.i306 = icmp ult i8 %60, %61
406  %b.a.i307.v.v = select i1 %cmp.i306, i8 %63, i8 %62
407  %b.a.i307.v = zext i8 %b.a.i307.v.v to i32
408  %b.a.i307 = mul i32 %b.a.i307.v, %w
409  %retval.0.i308 = trunc i32 %b.a.i307 to i8
410  %arrayidx188 = getelementptr inbounds i8, i8* %e.addr.0354, i64 15
411  store i8 %retval.0.i308, i8* %arrayidx188, align 1
412  %inc = add nuw nsw i32 %i.0356, 1
413  %add.ptr = getelementptr inbounds i8, i8* %a.addr.0355, i64 16
414  %add.ptr189 = getelementptr inbounds i8, i8* %b.addr.0351, i64 16
415  %add.ptr190 = getelementptr inbounds i8, i8* %c.addr.0352, i64 16
416  %add.ptr191 = getelementptr inbounds i8, i8* %d.addr.0353, i64 16
417  %add.ptr192 = getelementptr inbounds i8, i8* %e.addr.0354, i64 16
418  %exitcond = icmp eq i32 %inc, 8
419  br i1 %exitcond, label %for.end, label %for.body
420
421for.end:                                          ; preds = %for.body
422  ret void
423}
424
425@ib = local_unnamed_addr global [64 x i32] [i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0, i32 1, i32 1, i32 0, i32 0, i32 1, i32 0, i32 1, i32 0], align 16
426@ia = common local_unnamed_addr global [64 x i32] zeroinitializer, align 16
427
428define i32 @foo1() local_unnamed_addr #0 {
429; SSE-LABEL: @foo1(
430; SSE-NEXT:  entry:
431; SSE-NEXT:    [[TMP0:%.*]] = load <4 x i32>, <4 x i32>* bitcast ([64 x i32]* @ib to <4 x i32>*), align 16
432; SSE-NEXT:    [[TMP1:%.*]] = xor <4 x i32> [[TMP0]], <i32 -1, i32 -1, i32 -1, i32 -1>
433; SSE-NEXT:    store <4 x i32> [[TMP1]], <4 x i32>* bitcast ([64 x i32]* @ia to <4 x i32>*), align 16
434; SSE-NEXT:    [[TMP2:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 4) to <4 x i32>*), align 16
435; SSE-NEXT:    [[TMP3:%.*]] = xor <4 x i32> [[TMP2]], <i32 -1, i32 -1, i32 -1, i32 -1>
436; SSE-NEXT:    store <4 x i32> [[TMP3]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 4) to <4 x i32>*), align 16
437; SSE-NEXT:    [[TMP4:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 8) to <4 x i32>*), align 16
438; SSE-NEXT:    [[TMP5:%.*]] = xor <4 x i32> [[TMP4]], <i32 -1, i32 -1, i32 -1, i32 -1>
439; SSE-NEXT:    store <4 x i32> [[TMP5]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 8) to <4 x i32>*), align 16
440; SSE-NEXT:    [[TMP6:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 12) to <4 x i32>*), align 16
441; SSE-NEXT:    [[TMP7:%.*]] = xor <4 x i32> [[TMP6]], <i32 -1, i32 -1, i32 -1, i32 -1>
442; SSE-NEXT:    store <4 x i32> [[TMP7]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 12) to <4 x i32>*), align 16
443; SSE-NEXT:    [[TMP8:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 16) to <4 x i32>*), align 16
444; SSE-NEXT:    [[TMP9:%.*]] = xor <4 x i32> [[TMP8]], <i32 -1, i32 -1, i32 -1, i32 -1>
445; SSE-NEXT:    store <4 x i32> [[TMP9]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 16) to <4 x i32>*), align 16
446; SSE-NEXT:    [[TMP10:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 20) to <4 x i32>*), align 16
447; SSE-NEXT:    [[TMP11:%.*]] = xor <4 x i32> [[TMP10]], <i32 -1, i32 -1, i32 -1, i32 -1>
448; SSE-NEXT:    store <4 x i32> [[TMP11]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 20) to <4 x i32>*), align 16
449; SSE-NEXT:    [[TMP12:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 24) to <4 x i32>*), align 16
450; SSE-NEXT:    [[TMP13:%.*]] = xor <4 x i32> [[TMP12]], <i32 -1, i32 -1, i32 -1, i32 -1>
451; SSE-NEXT:    store <4 x i32> [[TMP13]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 24) to <4 x i32>*), align 16
452; SSE-NEXT:    [[TMP14:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 28) to <4 x i32>*), align 16
453; SSE-NEXT:    [[TMP15:%.*]] = xor <4 x i32> [[TMP14]], <i32 -1, i32 -1, i32 -1, i32 -1>
454; SSE-NEXT:    store <4 x i32> [[TMP15]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 28) to <4 x i32>*), align 16
455; SSE-NEXT:    [[TMP16:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 32) to <4 x i32>*), align 16
456; SSE-NEXT:    [[TMP17:%.*]] = xor <4 x i32> [[TMP16]], <i32 -1, i32 -1, i32 -1, i32 -1>
457; SSE-NEXT:    store <4 x i32> [[TMP17]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 32) to <4 x i32>*), align 16
458; SSE-NEXT:    [[TMP18:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 36) to <4 x i32>*), align 16
459; SSE-NEXT:    [[TMP19:%.*]] = xor <4 x i32> [[TMP18]], <i32 -1, i32 -1, i32 -1, i32 -1>
460; SSE-NEXT:    store <4 x i32> [[TMP19]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 36) to <4 x i32>*), align 16
461; SSE-NEXT:    [[TMP20:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 40) to <4 x i32>*), align 16
462; SSE-NEXT:    [[TMP21:%.*]] = xor <4 x i32> [[TMP20]], <i32 -1, i32 -1, i32 -1, i32 -1>
463; SSE-NEXT:    store <4 x i32> [[TMP21]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 40) to <4 x i32>*), align 16
464; SSE-NEXT:    [[TMP22:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 44) to <4 x i32>*), align 16
465; SSE-NEXT:    [[TMP23:%.*]] = xor <4 x i32> [[TMP22]], <i32 -1, i32 -1, i32 -1, i32 -1>
466; SSE-NEXT:    store <4 x i32> [[TMP23]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 44) to <4 x i32>*), align 16
467; SSE-NEXT:    [[TMP24:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 48) to <4 x i32>*), align 16
468; SSE-NEXT:    [[TMP25:%.*]] = xor <4 x i32> [[TMP24]], <i32 -1, i32 -1, i32 -1, i32 -1>
469; SSE-NEXT:    store <4 x i32> [[TMP25]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 48) to <4 x i32>*), align 16
470; SSE-NEXT:    [[TMP26:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 52) to <4 x i32>*), align 16
471; SSE-NEXT:    [[TMP27:%.*]] = xor <4 x i32> [[TMP26]], <i32 -1, i32 -1, i32 -1, i32 -1>
472; SSE-NEXT:    store <4 x i32> [[TMP27]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 52) to <4 x i32>*), align 16
473; SSE-NEXT:    [[TMP28:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 56) to <4 x i32>*), align 16
474; SSE-NEXT:    [[TMP29:%.*]] = xor <4 x i32> [[TMP28]], <i32 -1, i32 -1, i32 -1, i32 -1>
475; SSE-NEXT:    store <4 x i32> [[TMP29]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 56) to <4 x i32>*), align 16
476; SSE-NEXT:    [[TMP30:%.*]] = load <4 x i32>, <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 60) to <4 x i32>*), align 16
477; SSE-NEXT:    [[TMP31:%.*]] = xor <4 x i32> [[TMP30]], <i32 -1, i32 -1, i32 -1, i32 -1>
478; SSE-NEXT:    store <4 x i32> [[TMP31]], <4 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 60) to <4 x i32>*), align 16
479; SSE-NEXT:    br label [[FOR_BODY5:%.*]]
480; SSE:       for.cond3:
481; SSE-NEXT:    [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV:%.*]], 1
482; SSE-NEXT:    [[CMP4:%.*]] = icmp ult i64 [[INDVARS_IV]], 63
483; SSE-NEXT:    br i1 [[CMP4]], label [[FOR_BODY5]], label [[FOR_END14:%.*]]
484; SSE:       for.body5:
485; SSE-NEXT:    [[INDVARS_IV]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT]], [[FOR_COND3:%.*]] ]
486; SSE-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds [64 x i32], [64 x i32]* @ia, i64 0, i64 [[INDVARS_IV]]
487; SSE-NEXT:    [[TMP32:%.*]] = load i32, i32* [[ARRAYIDX7]], align 4
488; SSE-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds [64 x i32], [64 x i32]* @ib, i64 0, i64 [[INDVARS_IV]]
489; SSE-NEXT:    [[TMP33:%.*]] = load i32, i32* [[ARRAYIDX9]], align 4
490; SSE-NEXT:    [[NEG10:%.*]] = xor i32 [[TMP33]], -1
491; SSE-NEXT:    [[CMP11:%.*]] = icmp eq i32 [[TMP32]], [[NEG10]]
492; SSE-NEXT:    br i1 [[CMP11]], label [[FOR_COND3]], label [[IF_THEN:%.*]]
493; SSE:       if.then:
494; SSE-NEXT:    tail call void @abort()
495; SSE-NEXT:    unreachable
496; SSE:       for.end14:
497; SSE-NEXT:    ret i32 0
498;
499; AVX512-LABEL: @foo1(
500; AVX512-NEXT:  entry:
501; AVX512-NEXT:    [[TMP0:%.*]] = load <16 x i32>, <16 x i32>* bitcast ([64 x i32]* @ib to <16 x i32>*), align 16
502; AVX512-NEXT:    [[TMP1:%.*]] = xor <16 x i32> [[TMP0]], <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
503; AVX512-NEXT:    store <16 x i32> [[TMP1]], <16 x i32>* bitcast ([64 x i32]* @ia to <16 x i32>*), align 16
504; AVX512-NEXT:    [[TMP2:%.*]] = load <16 x i32>, <16 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 16) to <16 x i32>*), align 16
505; AVX512-NEXT:    [[TMP3:%.*]] = xor <16 x i32> [[TMP2]], <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
506; AVX512-NEXT:    store <16 x i32> [[TMP3]], <16 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 16) to <16 x i32>*), align 16
507; AVX512-NEXT:    [[TMP4:%.*]] = load <16 x i32>, <16 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 32) to <16 x i32>*), align 16
508; AVX512-NEXT:    [[TMP5:%.*]] = xor <16 x i32> [[TMP4]], <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
509; AVX512-NEXT:    store <16 x i32> [[TMP5]], <16 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 32) to <16 x i32>*), align 16
510; AVX512-NEXT:    [[TMP6:%.*]] = load <16 x i32>, <16 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 48) to <16 x i32>*), align 16
511; AVX512-NEXT:    [[TMP7:%.*]] = xor <16 x i32> [[TMP6]], <i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1, i32 -1>
512; AVX512-NEXT:    store <16 x i32> [[TMP7]], <16 x i32>* bitcast (i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 48) to <16 x i32>*), align 16
513; AVX512-NEXT:    br label [[FOR_BODY5:%.*]]
514; AVX512:       for.cond3:
515; AVX512-NEXT:    [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV:%.*]], 1
516; AVX512-NEXT:    [[CMP4:%.*]] = icmp ult i64 [[INDVARS_IV]], 63
517; AVX512-NEXT:    br i1 [[CMP4]], label [[FOR_BODY5]], label [[FOR_END14:%.*]]
518; AVX512:       for.body5:
519; AVX512-NEXT:    [[INDVARS_IV]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT]], [[FOR_COND3:%.*]] ]
520; AVX512-NEXT:    [[ARRAYIDX7:%.*]] = getelementptr inbounds [64 x i32], [64 x i32]* @ia, i64 0, i64 [[INDVARS_IV]]
521; AVX512-NEXT:    [[TMP8:%.*]] = load i32, i32* [[ARRAYIDX7]], align 4
522; AVX512-NEXT:    [[ARRAYIDX9:%.*]] = getelementptr inbounds [64 x i32], [64 x i32]* @ib, i64 0, i64 [[INDVARS_IV]]
523; AVX512-NEXT:    [[TMP9:%.*]] = load i32, i32* [[ARRAYIDX9]], align 4
524; AVX512-NEXT:    [[NEG10:%.*]] = xor i32 [[TMP9]], -1
525; AVX512-NEXT:    [[CMP11:%.*]] = icmp eq i32 [[TMP8]], [[NEG10]]
526; AVX512-NEXT:    br i1 [[CMP11]], label [[FOR_COND3]], label [[IF_THEN:%.*]]
527; AVX512:       if.then:
528; AVX512-NEXT:    tail call void @abort()
529; AVX512-NEXT:    unreachable
530; AVX512:       for.end14:
531; AVX512-NEXT:    ret i32 0
532;
533entry:
534  %0 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 0), align 16
535  %neg = xor i32 %0, -1
536  store i32 %neg, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 0), align 16
537  %1 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 1), align 4
538  %neg.1 = xor i32 %1, -1
539  store i32 %neg.1, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 1), align 4
540  %2 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 2), align 8
541  %neg.2 = xor i32 %2, -1
542  store i32 %neg.2, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 2), align 8
543  %3 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 3), align 4
544  %neg.3 = xor i32 %3, -1
545  store i32 %neg.3, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 3), align 4
546  %4 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 4), align 16
547  %neg.4 = xor i32 %4, -1
548  store i32 %neg.4, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 4), align 16
549  %5 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 5), align 4
550  %neg.5 = xor i32 %5, -1
551  store i32 %neg.5, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 5), align 4
552  %6 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 6), align 8
553  %neg.6 = xor i32 %6, -1
554  store i32 %neg.6, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 6), align 8
555  %7 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 7), align 4
556  %neg.7 = xor i32 %7, -1
557  store i32 %neg.7, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 7), align 4
558  %8 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 8), align 16
559  %neg.8 = xor i32 %8, -1
560  store i32 %neg.8, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 8), align 16
561  %9 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 9), align 4
562  %neg.9 = xor i32 %9, -1
563  store i32 %neg.9, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 9), align 4
564  %10 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 10), align 8
565  %neg.10 = xor i32 %10, -1
566  store i32 %neg.10, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 10), align 8
567  %11 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 11), align 4
568  %neg.11 = xor i32 %11, -1
569  store i32 %neg.11, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 11), align 4
570  %12 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 12), align 16
571  %neg.12 = xor i32 %12, -1
572  store i32 %neg.12, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 12), align 16
573  %13 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 13), align 4
574  %neg.13 = xor i32 %13, -1
575  store i32 %neg.13, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 13), align 4
576  %14 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 14), align 8
577  %neg.14 = xor i32 %14, -1
578  store i32 %neg.14, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 14), align 8
579  %15 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 15), align 4
580  %neg.15 = xor i32 %15, -1
581  store i32 %neg.15, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 15), align 4
582  %16 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 16), align 16
583  %neg.16 = xor i32 %16, -1
584  store i32 %neg.16, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 16), align 16
585  %17 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 17), align 4
586  %neg.17 = xor i32 %17, -1
587  store i32 %neg.17, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 17), align 4
588  %18 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 18), align 8
589  %neg.18 = xor i32 %18, -1
590  store i32 %neg.18, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 18), align 8
591  %19 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 19), align 4
592  %neg.19 = xor i32 %19, -1
593  store i32 %neg.19, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 19), align 4
594  %20 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 20), align 16
595  %neg.20 = xor i32 %20, -1
596  store i32 %neg.20, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 20), align 16
597  %21 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 21), align 4
598  %neg.21 = xor i32 %21, -1
599  store i32 %neg.21, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 21), align 4
600  %22 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 22), align 8
601  %neg.22 = xor i32 %22, -1
602  store i32 %neg.22, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 22), align 8
603  %23 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 23), align 4
604  %neg.23 = xor i32 %23, -1
605  store i32 %neg.23, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 23), align 4
606  %24 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 24), align 16
607  %neg.24 = xor i32 %24, -1
608  store i32 %neg.24, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 24), align 16
609  %25 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 25), align 4
610  %neg.25 = xor i32 %25, -1
611  store i32 %neg.25, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 25), align 4
612  %26 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 26), align 8
613  %neg.26 = xor i32 %26, -1
614  store i32 %neg.26, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 26), align 8
615  %27 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 27), align 4
616  %neg.27 = xor i32 %27, -1
617  store i32 %neg.27, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 27), align 4
618  %28 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 28), align 16
619  %neg.28 = xor i32 %28, -1
620  store i32 %neg.28, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 28), align 16
621  %29 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 29), align 4
622  %neg.29 = xor i32 %29, -1
623  store i32 %neg.29, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 29), align 4
624  %30 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 30), align 8
625  %neg.30 = xor i32 %30, -1
626  store i32 %neg.30, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 30), align 8
627  %31 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 31), align 4
628  %neg.31 = xor i32 %31, -1
629  store i32 %neg.31, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 31), align 4
630  %32 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 32), align 16
631  %neg.32 = xor i32 %32, -1
632  store i32 %neg.32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 32), align 16
633  %33 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 33), align 4
634  %neg.33 = xor i32 %33, -1
635  store i32 %neg.33, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 33), align 4
636  %34 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 34), align 8
637  %neg.34 = xor i32 %34, -1
638  store i32 %neg.34, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 34), align 8
639  %35 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 35), align 4
640  %neg.35 = xor i32 %35, -1
641  store i32 %neg.35, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 35), align 4
642  %36 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 36), align 16
643  %neg.36 = xor i32 %36, -1
644  store i32 %neg.36, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 36), align 16
645  %37 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 37), align 4
646  %neg.37 = xor i32 %37, -1
647  store i32 %neg.37, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 37), align 4
648  %38 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 38), align 8
649  %neg.38 = xor i32 %38, -1
650  store i32 %neg.38, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 38), align 8
651  %39 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 39), align 4
652  %neg.39 = xor i32 %39, -1
653  store i32 %neg.39, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 39), align 4
654  %40 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 40), align 16
655  %neg.40 = xor i32 %40, -1
656  store i32 %neg.40, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 40), align 16
657  %41 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 41), align 4
658  %neg.41 = xor i32 %41, -1
659  store i32 %neg.41, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 41), align 4
660  %42 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 42), align 8
661  %neg.42 = xor i32 %42, -1
662  store i32 %neg.42, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 42), align 8
663  %43 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 43), align 4
664  %neg.43 = xor i32 %43, -1
665  store i32 %neg.43, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 43), align 4
666  %44 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 44), align 16
667  %neg.44 = xor i32 %44, -1
668  store i32 %neg.44, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 44), align 16
669  %45 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 45), align 4
670  %neg.45 = xor i32 %45, -1
671  store i32 %neg.45, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 45), align 4
672  %46 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 46), align 8
673  %neg.46 = xor i32 %46, -1
674  store i32 %neg.46, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 46), align 8
675  %47 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 47), align 4
676  %neg.47 = xor i32 %47, -1
677  store i32 %neg.47, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 47), align 4
678  %48 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 48), align 16
679  %neg.48 = xor i32 %48, -1
680  store i32 %neg.48, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 48), align 16
681  %49 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 49), align 4
682  %neg.49 = xor i32 %49, -1
683  store i32 %neg.49, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 49), align 4
684  %50 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 50), align 8
685  %neg.50 = xor i32 %50, -1
686  store i32 %neg.50, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 50), align 8
687  %51 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 51), align 4
688  %neg.51 = xor i32 %51, -1
689  store i32 %neg.51, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 51), align 4
690  %52 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 52), align 16
691  %neg.52 = xor i32 %52, -1
692  store i32 %neg.52, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 52), align 16
693  %53 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 53), align 4
694  %neg.53 = xor i32 %53, -1
695  store i32 %neg.53, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 53), align 4
696  %54 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 54), align 8
697  %neg.54 = xor i32 %54, -1
698  store i32 %neg.54, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 54), align 8
699  %55 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 55), align 4
700  %neg.55 = xor i32 %55, -1
701  store i32 %neg.55, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 55), align 4
702  %56 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 56), align 16
703  %neg.56 = xor i32 %56, -1
704  store i32 %neg.56, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 56), align 16
705  %57 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 57), align 4
706  %neg.57 = xor i32 %57, -1
707  store i32 %neg.57, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 57), align 4
708  %58 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 58), align 8
709  %neg.58 = xor i32 %58, -1
710  store i32 %neg.58, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 58), align 8
711  %59 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 59), align 4
712  %neg.59 = xor i32 %59, -1
713  store i32 %neg.59, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 59), align 4
714  %60 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 60), align 16
715  %neg.60 = xor i32 %60, -1
716  store i32 %neg.60, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 60), align 16
717  %61 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 61), align 4
718  %neg.61 = xor i32 %61, -1
719  store i32 %neg.61, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 61), align 4
720  %62 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 62), align 8
721  %neg.62 = xor i32 %62, -1
722  store i32 %neg.62, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 62), align 8
723  %63 = load i32, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ib, i64 0, i64 63), align 4
724  %neg.63 = xor i32 %63, -1
725  store i32 %neg.63, i32* getelementptr inbounds ([64 x i32], [64 x i32]* @ia, i64 0, i64 63), align 4
726  br label %for.body5
727
728for.cond3:                                        ; preds = %for.body5
729  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
730  %cmp4 = icmp ult i64 %indvars.iv, 63
731  br i1 %cmp4, label %for.body5, label %for.end14
732
733for.body5:                                        ; preds = %entry, %for.cond3
734  %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.cond3 ]
735  %arrayidx7 = getelementptr inbounds [64 x i32], [64 x i32]* @ia, i64 0, i64 %indvars.iv
736  %64 = load i32, i32* %arrayidx7, align 4
737  %arrayidx9 = getelementptr inbounds [64 x i32], [64 x i32]* @ib, i64 0, i64 %indvars.iv
738  %65 = load i32, i32* %arrayidx9, align 4
739  %neg10 = xor i32 %65, -1
740  %cmp11 = icmp eq i32 %64, %neg10
741  br i1 %cmp11, label %for.cond3, label %if.then
742
743if.then:                                          ; preds = %for.body5
744  tail call void @abort() #2
745  unreachable
746
747for.end14:                                        ; preds = %for.cond3
748  ret i32 0
749}
750
751declare void @abort() #2
752