643 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=slp-vectorizer -mattr=+sse < %s | FileCheck %s --check-prefixes=CHECK,SSE3; RUN: opt -S -passes=slp-vectorizer -mattr=+avx512f < %s | FileCheck %s --check-prefixes=CHECK,AVX5124 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 uwtable9define 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 i815; CHECK-NEXT: ret i8 [[RETVAL_0]]16;17entry:18 %cmp = icmp slt i32 %x, %y19 %b.a = select i1 %cmp, i32 %b, i32 %a20 %retval.0 = trunc i32 %b.a to i821 ret i8 %retval.022}23 24define void @bar(ptr noalias nocapture readonly %a, ptr noalias nocapture readonly %b, ptr noalias nocapture readonly %c, ptr noalias nocapture readonly %d, ptr noalias nocapture %e, i32 %w) local_unnamed_addr #1 {25; CHECK-LABEL: @bar(26; CHECK-NEXT: entry:27; CHECK-NEXT: [[TMP0:%.*]] = insertelement <16 x i32> poison, i32 [[W:%.*]], i32 028; CHECK-NEXT: [[SHUFFLE:%.*]] = shufflevector <16 x i32> [[TMP0]], <16 x i32> poison, <16 x i32> zeroinitializer29; CHECK-NEXT: br label [[FOR_BODY:%.*]]30; CHECK: for.body:31; CHECK-NEXT: [[I_0356:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC:%.*]], [[FOR_BODY]] ]32; CHECK-NEXT: [[A_ADDR_0355:%.*]] = phi ptr [ [[A:%.*]], [[ENTRY]] ], [ [[ADD_PTR:%.*]], [[FOR_BODY]] ]33; CHECK-NEXT: [[E_ADDR_0354:%.*]] = phi ptr [ [[E:%.*]], [[ENTRY]] ], [ [[ADD_PTR192:%.*]], [[FOR_BODY]] ]34; CHECK-NEXT: [[D_ADDR_0353:%.*]] = phi ptr [ [[D:%.*]], [[ENTRY]] ], [ [[ADD_PTR191:%.*]], [[FOR_BODY]] ]35; CHECK-NEXT: [[C_ADDR_0352:%.*]] = phi ptr [ [[C:%.*]], [[ENTRY]] ], [ [[ADD_PTR190:%.*]], [[FOR_BODY]] ]36; CHECK-NEXT: [[B_ADDR_0351:%.*]] = phi ptr [ [[B:%.*]], [[ENTRY]] ], [ [[ADD_PTR189:%.*]], [[FOR_BODY]] ]37; CHECK-NEXT: [[TMP2:%.*]] = load <16 x i8>, ptr [[C_ADDR_0352]], align 138; CHECK-NEXT: [[TMP4:%.*]] = load <16 x i8>, ptr [[D_ADDR_0353]], align 139; CHECK-NEXT: [[TMP6:%.*]] = load <16 x i8>, ptr [[A_ADDR_0355]], align 140; CHECK-NEXT: [[TMP8:%.*]] = load <16 x i8>, ptr [[B_ADDR_0351]], align 141; CHECK-NEXT: [[TMP9:%.*]] = icmp ult <16 x i8> [[TMP2]], [[TMP4]]42; CHECK-NEXT: [[TMP10:%.*]] = select <16 x i1> [[TMP9]], <16 x i8> [[TMP8]], <16 x i8> [[TMP6]]43; CHECK-NEXT: [[TMP11:%.*]] = zext <16 x i8> [[TMP10]] to <16 x i32>44; CHECK-NEXT: [[TMP12:%.*]] = mul <16 x i32> [[TMP11]], [[SHUFFLE]]45; CHECK-NEXT: [[TMP13:%.*]] = trunc <16 x i32> [[TMP12]] to <16 x i8>46; CHECK-NEXT: store <16 x i8> [[TMP13]], ptr [[E_ADDR_0354]], align 147; CHECK-NEXT: [[INC]] = add nuw nsw i32 [[I_0356]], 148; CHECK-NEXT: [[ADD_PTR]] = getelementptr inbounds i8, ptr [[A_ADDR_0355]], i64 1649; CHECK-NEXT: [[ADD_PTR189]] = getelementptr inbounds i8, ptr [[B_ADDR_0351]], i64 1650; CHECK-NEXT: [[ADD_PTR190]] = getelementptr inbounds i8, ptr [[C_ADDR_0352]], i64 1651; CHECK-NEXT: [[ADD_PTR191]] = getelementptr inbounds i8, ptr [[D_ADDR_0353]], i64 1652; CHECK-NEXT: [[ADD_PTR192]] = getelementptr inbounds i8, ptr [[E_ADDR_0354]], i64 1653; CHECK-NEXT: [[EXITCOND:%.*]] = icmp eq i32 [[INC]], 854; CHECK-NEXT: br i1 [[EXITCOND]], label [[FOR_END:%.*]], label [[FOR_BODY]]55; CHECK: for.end:56; CHECK-NEXT: ret void57;58entry:59 br label %for.body60 61for.body: ; preds = %for.body, %entry62 %i.0356 = phi i32 [ 0, %entry ], [ %inc, %for.body ]63 %a.addr.0355 = phi ptr [ %a, %entry ], [ %add.ptr, %for.body ]64 %e.addr.0354 = phi ptr [ %e, %entry ], [ %add.ptr192, %for.body ]65 %d.addr.0353 = phi ptr [ %d, %entry ], [ %add.ptr191, %for.body ]66 %c.addr.0352 = phi ptr [ %c, %entry ], [ %add.ptr190, %for.body ]67 %b.addr.0351 = phi ptr [ %b, %entry ], [ %add.ptr189, %for.body ]68 %0 = load i8, ptr %c.addr.0352, align 169 %1 = load i8, ptr %d.addr.0353, align 170 %2 = load i8, ptr %a.addr.0355, align 171 %3 = load i8, ptr %b.addr.0351, align 172 %cmp.i = icmp ult i8 %0, %173 %b.a.i.v.v = select i1 %cmp.i, i8 %3, i8 %274 %b.a.i.v = zext i8 %b.a.i.v.v to i3275 %b.a.i = mul i32 %b.a.i.v, %w76 %retval.0.i = trunc i32 %b.a.i to i877 store i8 %retval.0.i, ptr %e.addr.0354, align 178 %arrayidx9 = getelementptr inbounds i8, ptr %c.addr.0352, i64 179 %4 = load i8, ptr %arrayidx9, align 180 %arrayidx11 = getelementptr inbounds i8, ptr %d.addr.0353, i64 181 %5 = load i8, ptr %arrayidx11, align 182 %arrayidx13 = getelementptr inbounds i8, ptr %a.addr.0355, i64 183 %6 = load i8, ptr %arrayidx13, align 184 %arrayidx16 = getelementptr inbounds i8, ptr %b.addr.0351, i64 185 %7 = load i8, ptr %arrayidx16, align 186 %cmp.i348 = icmp ult i8 %4, %587 %b.a.i349.v.v = select i1 %cmp.i348, i8 %7, i8 %688 %b.a.i349.v = zext i8 %b.a.i349.v.v to i3289 %b.a.i349 = mul i32 %b.a.i349.v, %w90 %retval.0.i350 = trunc i32 %b.a.i349 to i891 %arrayidx20 = getelementptr inbounds i8, ptr %e.addr.0354, i64 192 store i8 %retval.0.i350, ptr %arrayidx20, align 193 %arrayidx21 = getelementptr inbounds i8, ptr %c.addr.0352, i64 294 %8 = load i8, ptr %arrayidx21, align 195 %arrayidx23 = getelementptr inbounds i8, ptr %d.addr.0353, i64 296 %9 = load i8, ptr %arrayidx23, align 197 %arrayidx25 = getelementptr inbounds i8, ptr %a.addr.0355, i64 298 %10 = load i8, ptr %arrayidx25, align 199 %arrayidx28 = getelementptr inbounds i8, ptr %b.addr.0351, i64 2100 %11 = load i8, ptr %arrayidx28, align 1101 %cmp.i345 = icmp ult i8 %8, %9102 %b.a.i346.v.v = select i1 %cmp.i345, i8 %11, i8 %10103 %b.a.i346.v = zext i8 %b.a.i346.v.v to i32104 %b.a.i346 = mul i32 %b.a.i346.v, %w105 %retval.0.i347 = trunc i32 %b.a.i346 to i8106 %arrayidx32 = getelementptr inbounds i8, ptr %e.addr.0354, i64 2107 store i8 %retval.0.i347, ptr %arrayidx32, align 1108 %arrayidx33 = getelementptr inbounds i8, ptr %c.addr.0352, i64 3109 %12 = load i8, ptr %arrayidx33, align 1110 %arrayidx35 = getelementptr inbounds i8, ptr %d.addr.0353, i64 3111 %13 = load i8, ptr %arrayidx35, align 1112 %arrayidx37 = getelementptr inbounds i8, ptr %a.addr.0355, i64 3113 %14 = load i8, ptr %arrayidx37, align 1114 %arrayidx40 = getelementptr inbounds i8, ptr %b.addr.0351, i64 3115 %15 = load i8, ptr %arrayidx40, align 1116 %cmp.i342 = icmp ult i8 %12, %13117 %b.a.i343.v.v = select i1 %cmp.i342, i8 %15, i8 %14118 %b.a.i343.v = zext i8 %b.a.i343.v.v to i32119 %b.a.i343 = mul i32 %b.a.i343.v, %w120 %retval.0.i344 = trunc i32 %b.a.i343 to i8121 %arrayidx44 = getelementptr inbounds i8, ptr %e.addr.0354, i64 3122 store i8 %retval.0.i344, ptr %arrayidx44, align 1123 %arrayidx45 = getelementptr inbounds i8, ptr %c.addr.0352, i64 4124 %16 = load i8, ptr %arrayidx45, align 1125 %arrayidx47 = getelementptr inbounds i8, ptr %d.addr.0353, i64 4126 %17 = load i8, ptr %arrayidx47, align 1127 %arrayidx49 = getelementptr inbounds i8, ptr %a.addr.0355, i64 4128 %18 = load i8, ptr %arrayidx49, align 1129 %arrayidx52 = getelementptr inbounds i8, ptr %b.addr.0351, i64 4130 %19 = load i8, ptr %arrayidx52, align 1131 %cmp.i339 = icmp ult i8 %16, %17132 %b.a.i340.v.v = select i1 %cmp.i339, i8 %19, i8 %18133 %b.a.i340.v = zext i8 %b.a.i340.v.v to i32134 %b.a.i340 = mul i32 %b.a.i340.v, %w135 %retval.0.i341 = trunc i32 %b.a.i340 to i8136 %arrayidx56 = getelementptr inbounds i8, ptr %e.addr.0354, i64 4137 store i8 %retval.0.i341, ptr %arrayidx56, align 1138 %arrayidx57 = getelementptr inbounds i8, ptr %c.addr.0352, i64 5139 %20 = load i8, ptr %arrayidx57, align 1140 %arrayidx59 = getelementptr inbounds i8, ptr %d.addr.0353, i64 5141 %21 = load i8, ptr %arrayidx59, align 1142 %arrayidx61 = getelementptr inbounds i8, ptr %a.addr.0355, i64 5143 %22 = load i8, ptr %arrayidx61, align 1144 %arrayidx64 = getelementptr inbounds i8, ptr %b.addr.0351, i64 5145 %23 = load i8, ptr %arrayidx64, align 1146 %cmp.i336 = icmp ult i8 %20, %21147 %b.a.i337.v.v = select i1 %cmp.i336, i8 %23, i8 %22148 %b.a.i337.v = zext i8 %b.a.i337.v.v to i32149 %b.a.i337 = mul i32 %b.a.i337.v, %w150 %retval.0.i338 = trunc i32 %b.a.i337 to i8151 %arrayidx68 = getelementptr inbounds i8, ptr %e.addr.0354, i64 5152 store i8 %retval.0.i338, ptr %arrayidx68, align 1153 %arrayidx69 = getelementptr inbounds i8, ptr %c.addr.0352, i64 6154 %24 = load i8, ptr %arrayidx69, align 1155 %arrayidx71 = getelementptr inbounds i8, ptr %d.addr.0353, i64 6156 %25 = load i8, ptr %arrayidx71, align 1157 %arrayidx73 = getelementptr inbounds i8, ptr %a.addr.0355, i64 6158 %26 = load i8, ptr %arrayidx73, align 1159 %arrayidx76 = getelementptr inbounds i8, ptr %b.addr.0351, i64 6160 %27 = load i8, ptr %arrayidx76, align 1161 %cmp.i333 = icmp ult i8 %24, %25162 %b.a.i334.v.v = select i1 %cmp.i333, i8 %27, i8 %26163 %b.a.i334.v = zext i8 %b.a.i334.v.v to i32164 %b.a.i334 = mul i32 %b.a.i334.v, %w165 %retval.0.i335 = trunc i32 %b.a.i334 to i8166 %arrayidx80 = getelementptr inbounds i8, ptr %e.addr.0354, i64 6167 store i8 %retval.0.i335, ptr %arrayidx80, align 1168 %arrayidx81 = getelementptr inbounds i8, ptr %c.addr.0352, i64 7169 %28 = load i8, ptr %arrayidx81, align 1170 %arrayidx83 = getelementptr inbounds i8, ptr %d.addr.0353, i64 7171 %29 = load i8, ptr %arrayidx83, align 1172 %arrayidx85 = getelementptr inbounds i8, ptr %a.addr.0355, i64 7173 %30 = load i8, ptr %arrayidx85, align 1174 %arrayidx88 = getelementptr inbounds i8, ptr %b.addr.0351, i64 7175 %31 = load i8, ptr %arrayidx88, align 1176 %cmp.i330 = icmp ult i8 %28, %29177 %b.a.i331.v.v = select i1 %cmp.i330, i8 %31, i8 %30178 %b.a.i331.v = zext i8 %b.a.i331.v.v to i32179 %b.a.i331 = mul i32 %b.a.i331.v, %w180 %retval.0.i332 = trunc i32 %b.a.i331 to i8181 %arrayidx92 = getelementptr inbounds i8, ptr %e.addr.0354, i64 7182 store i8 %retval.0.i332, ptr %arrayidx92, align 1183 %arrayidx93 = getelementptr inbounds i8, ptr %c.addr.0352, i64 8184 %32 = load i8, ptr %arrayidx93, align 1185 %arrayidx95 = getelementptr inbounds i8, ptr %d.addr.0353, i64 8186 %33 = load i8, ptr %arrayidx95, align 1187 %arrayidx97 = getelementptr inbounds i8, ptr %a.addr.0355, i64 8188 %34 = load i8, ptr %arrayidx97, align 1189 %arrayidx100 = getelementptr inbounds i8, ptr %b.addr.0351, i64 8190 %35 = load i8, ptr %arrayidx100, align 1191 %cmp.i327 = icmp ult i8 %32, %33192 %b.a.i328.v.v = select i1 %cmp.i327, i8 %35, i8 %34193 %b.a.i328.v = zext i8 %b.a.i328.v.v to i32194 %b.a.i328 = mul i32 %b.a.i328.v, %w195 %retval.0.i329 = trunc i32 %b.a.i328 to i8196 %arrayidx104 = getelementptr inbounds i8, ptr %e.addr.0354, i64 8197 store i8 %retval.0.i329, ptr %arrayidx104, align 1198 %arrayidx105 = getelementptr inbounds i8, ptr %c.addr.0352, i64 9199 %36 = load i8, ptr %arrayidx105, align 1200 %arrayidx107 = getelementptr inbounds i8, ptr %d.addr.0353, i64 9201 %37 = load i8, ptr %arrayidx107, align 1202 %arrayidx109 = getelementptr inbounds i8, ptr %a.addr.0355, i64 9203 %38 = load i8, ptr %arrayidx109, align 1204 %arrayidx112 = getelementptr inbounds i8, ptr %b.addr.0351, i64 9205 %39 = load i8, ptr %arrayidx112, align 1206 %cmp.i324 = icmp ult i8 %36, %37207 %b.a.i325.v.v = select i1 %cmp.i324, i8 %39, i8 %38208 %b.a.i325.v = zext i8 %b.a.i325.v.v to i32209 %b.a.i325 = mul i32 %b.a.i325.v, %w210 %retval.0.i326 = trunc i32 %b.a.i325 to i8211 %arrayidx116 = getelementptr inbounds i8, ptr %e.addr.0354, i64 9212 store i8 %retval.0.i326, ptr %arrayidx116, align 1213 %arrayidx117 = getelementptr inbounds i8, ptr %c.addr.0352, i64 10214 %40 = load i8, ptr %arrayidx117, align 1215 %arrayidx119 = getelementptr inbounds i8, ptr %d.addr.0353, i64 10216 %41 = load i8, ptr %arrayidx119, align 1217 %arrayidx121 = getelementptr inbounds i8, ptr %a.addr.0355, i64 10218 %42 = load i8, ptr %arrayidx121, align 1219 %arrayidx124 = getelementptr inbounds i8, ptr %b.addr.0351, i64 10220 %43 = load i8, ptr %arrayidx124, align 1221 %cmp.i321 = icmp ult i8 %40, %41222 %b.a.i322.v.v = select i1 %cmp.i321, i8 %43, i8 %42223 %b.a.i322.v = zext i8 %b.a.i322.v.v to i32224 %b.a.i322 = mul i32 %b.a.i322.v, %w225 %retval.0.i323 = trunc i32 %b.a.i322 to i8226 %arrayidx128 = getelementptr inbounds i8, ptr %e.addr.0354, i64 10227 store i8 %retval.0.i323, ptr %arrayidx128, align 1228 %arrayidx129 = getelementptr inbounds i8, ptr %c.addr.0352, i64 11229 %44 = load i8, ptr %arrayidx129, align 1230 %arrayidx131 = getelementptr inbounds i8, ptr %d.addr.0353, i64 11231 %45 = load i8, ptr %arrayidx131, align 1232 %arrayidx133 = getelementptr inbounds i8, ptr %a.addr.0355, i64 11233 %46 = load i8, ptr %arrayidx133, align 1234 %arrayidx136 = getelementptr inbounds i8, ptr %b.addr.0351, i64 11235 %47 = load i8, ptr %arrayidx136, align 1236 %cmp.i318 = icmp ult i8 %44, %45237 %b.a.i319.v.v = select i1 %cmp.i318, i8 %47, i8 %46238 %b.a.i319.v = zext i8 %b.a.i319.v.v to i32239 %b.a.i319 = mul i32 %b.a.i319.v, %w240 %retval.0.i320 = trunc i32 %b.a.i319 to i8241 %arrayidx140 = getelementptr inbounds i8, ptr %e.addr.0354, i64 11242 store i8 %retval.0.i320, ptr %arrayidx140, align 1243 %arrayidx141 = getelementptr inbounds i8, ptr %c.addr.0352, i64 12244 %48 = load i8, ptr %arrayidx141, align 1245 %arrayidx143 = getelementptr inbounds i8, ptr %d.addr.0353, i64 12246 %49 = load i8, ptr %arrayidx143, align 1247 %arrayidx145 = getelementptr inbounds i8, ptr %a.addr.0355, i64 12248 %50 = load i8, ptr %arrayidx145, align 1249 %arrayidx148 = getelementptr inbounds i8, ptr %b.addr.0351, i64 12250 %51 = load i8, ptr %arrayidx148, align 1251 %cmp.i315 = icmp ult i8 %48, %49252 %b.a.i316.v.v = select i1 %cmp.i315, i8 %51, i8 %50253 %b.a.i316.v = zext i8 %b.a.i316.v.v to i32254 %b.a.i316 = mul i32 %b.a.i316.v, %w255 %retval.0.i317 = trunc i32 %b.a.i316 to i8256 %arrayidx152 = getelementptr inbounds i8, ptr %e.addr.0354, i64 12257 store i8 %retval.0.i317, ptr %arrayidx152, align 1258 %arrayidx153 = getelementptr inbounds i8, ptr %c.addr.0352, i64 13259 %52 = load i8, ptr %arrayidx153, align 1260 %arrayidx155 = getelementptr inbounds i8, ptr %d.addr.0353, i64 13261 %53 = load i8, ptr %arrayidx155, align 1262 %arrayidx157 = getelementptr inbounds i8, ptr %a.addr.0355, i64 13263 %54 = load i8, ptr %arrayidx157, align 1264 %arrayidx160 = getelementptr inbounds i8, ptr %b.addr.0351, i64 13265 %55 = load i8, ptr %arrayidx160, align 1266 %cmp.i312 = icmp ult i8 %52, %53267 %b.a.i313.v.v = select i1 %cmp.i312, i8 %55, i8 %54268 %b.a.i313.v = zext i8 %b.a.i313.v.v to i32269 %b.a.i313 = mul i32 %b.a.i313.v, %w270 %retval.0.i314 = trunc i32 %b.a.i313 to i8271 %arrayidx164 = getelementptr inbounds i8, ptr %e.addr.0354, i64 13272 store i8 %retval.0.i314, ptr %arrayidx164, align 1273 %arrayidx165 = getelementptr inbounds i8, ptr %c.addr.0352, i64 14274 %56 = load i8, ptr %arrayidx165, align 1275 %arrayidx167 = getelementptr inbounds i8, ptr %d.addr.0353, i64 14276 %57 = load i8, ptr %arrayidx167, align 1277 %arrayidx169 = getelementptr inbounds i8, ptr %a.addr.0355, i64 14278 %58 = load i8, ptr %arrayidx169, align 1279 %arrayidx172 = getelementptr inbounds i8, ptr %b.addr.0351, i64 14280 %59 = load i8, ptr %arrayidx172, align 1281 %cmp.i309 = icmp ult i8 %56, %57282 %b.a.i310.v.v = select i1 %cmp.i309, i8 %59, i8 %58283 %b.a.i310.v = zext i8 %b.a.i310.v.v to i32284 %b.a.i310 = mul i32 %b.a.i310.v, %w285 %retval.0.i311 = trunc i32 %b.a.i310 to i8286 %arrayidx176 = getelementptr inbounds i8, ptr %e.addr.0354, i64 14287 store i8 %retval.0.i311, ptr %arrayidx176, align 1288 %arrayidx177 = getelementptr inbounds i8, ptr %c.addr.0352, i64 15289 %60 = load i8, ptr %arrayidx177, align 1290 %arrayidx179 = getelementptr inbounds i8, ptr %d.addr.0353, i64 15291 %61 = load i8, ptr %arrayidx179, align 1292 %arrayidx181 = getelementptr inbounds i8, ptr %a.addr.0355, i64 15293 %62 = load i8, ptr %arrayidx181, align 1294 %arrayidx184 = getelementptr inbounds i8, ptr %b.addr.0351, i64 15295 %63 = load i8, ptr %arrayidx184, align 1296 %cmp.i306 = icmp ult i8 %60, %61297 %b.a.i307.v.v = select i1 %cmp.i306, i8 %63, i8 %62298 %b.a.i307.v = zext i8 %b.a.i307.v.v to i32299 %b.a.i307 = mul i32 %b.a.i307.v, %w300 %retval.0.i308 = trunc i32 %b.a.i307 to i8301 %arrayidx188 = getelementptr inbounds i8, ptr %e.addr.0354, i64 15302 store i8 %retval.0.i308, ptr %arrayidx188, align 1303 %inc = add nuw nsw i32 %i.0356, 1304 %add.ptr = getelementptr inbounds i8, ptr %a.addr.0355, i64 16305 %add.ptr189 = getelementptr inbounds i8, ptr %b.addr.0351, i64 16306 %add.ptr190 = getelementptr inbounds i8, ptr %c.addr.0352, i64 16307 %add.ptr191 = getelementptr inbounds i8, ptr %d.addr.0353, i64 16308 %add.ptr192 = getelementptr inbounds i8, ptr %e.addr.0354, i64 16309 %exitcond = icmp eq i32 %inc, 8310 br i1 %exitcond, label %for.end, label %for.body311 312for.end: ; preds = %for.body313 ret void314}315 316@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 16317@ia = common local_unnamed_addr global [64 x i32] zeroinitializer, align 16318 319define i32 @foo1() local_unnamed_addr #0 {320; SSE-LABEL: @foo1(321; SSE-NEXT: entry:322; SSE-NEXT: [[TMP0:%.*]] = load <4 x i32>, ptr @ib, align 16323; SSE-NEXT: [[TMP1:%.*]] = xor <4 x i32> [[TMP0]], splat (i32 -1)324; SSE-NEXT: store <4 x i32> [[TMP1]], ptr @ia, align 16325; SSE-NEXT: [[TMP2:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 4), align 16326; SSE-NEXT: [[TMP3:%.*]] = xor <4 x i32> [[TMP2]], splat (i32 -1)327; SSE-NEXT: store <4 x i32> [[TMP3]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 4), align 16328; SSE-NEXT: [[TMP4:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 8), align 16329; SSE-NEXT: [[TMP5:%.*]] = xor <4 x i32> [[TMP4]], splat (i32 -1)330; SSE-NEXT: store <4 x i32> [[TMP5]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 8), align 16331; SSE-NEXT: [[TMP6:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 12), align 16332; SSE-NEXT: [[TMP7:%.*]] = xor <4 x i32> [[TMP6]], splat (i32 -1)333; SSE-NEXT: store <4 x i32> [[TMP7]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 12), align 16334; SSE-NEXT: [[TMP8:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 16), align 16335; SSE-NEXT: [[TMP9:%.*]] = xor <4 x i32> [[TMP8]], splat (i32 -1)336; SSE-NEXT: store <4 x i32> [[TMP9]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 16), align 16337; SSE-NEXT: [[TMP10:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 20), align 16338; SSE-NEXT: [[TMP11:%.*]] = xor <4 x i32> [[TMP10]], splat (i32 -1)339; SSE-NEXT: store <4 x i32> [[TMP11]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 20), align 16340; SSE-NEXT: [[TMP12:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 24), align 16341; SSE-NEXT: [[TMP13:%.*]] = xor <4 x i32> [[TMP12]], splat (i32 -1)342; SSE-NEXT: store <4 x i32> [[TMP13]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 24), align 16343; SSE-NEXT: [[TMP14:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 28), align 16344; SSE-NEXT: [[TMP15:%.*]] = xor <4 x i32> [[TMP14]], splat (i32 -1)345; SSE-NEXT: store <4 x i32> [[TMP15]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 28), align 16346; SSE-NEXT: [[TMP16:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 32), align 16347; SSE-NEXT: [[TMP17:%.*]] = xor <4 x i32> [[TMP16]], splat (i32 -1)348; SSE-NEXT: store <4 x i32> [[TMP17]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 32), align 16349; SSE-NEXT: [[TMP18:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 36), align 16350; SSE-NEXT: [[TMP19:%.*]] = xor <4 x i32> [[TMP18]], splat (i32 -1)351; SSE-NEXT: store <4 x i32> [[TMP19]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 36), align 16352; SSE-NEXT: [[TMP20:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 40), align 16353; SSE-NEXT: [[TMP21:%.*]] = xor <4 x i32> [[TMP20]], splat (i32 -1)354; SSE-NEXT: store <4 x i32> [[TMP21]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 40), align 16355; SSE-NEXT: [[TMP22:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 44), align 16356; SSE-NEXT: [[TMP23:%.*]] = xor <4 x i32> [[TMP22]], splat (i32 -1)357; SSE-NEXT: store <4 x i32> [[TMP23]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 44), align 16358; SSE-NEXT: [[TMP24:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 48), align 16359; SSE-NEXT: [[TMP25:%.*]] = xor <4 x i32> [[TMP24]], splat (i32 -1)360; SSE-NEXT: store <4 x i32> [[TMP25]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 48), align 16361; SSE-NEXT: [[TMP26:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 52), align 16362; SSE-NEXT: [[TMP27:%.*]] = xor <4 x i32> [[TMP26]], splat (i32 -1)363; SSE-NEXT: store <4 x i32> [[TMP27]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 52), align 16364; SSE-NEXT: [[TMP28:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 56), align 16365; SSE-NEXT: [[TMP29:%.*]] = xor <4 x i32> [[TMP28]], splat (i32 -1)366; SSE-NEXT: store <4 x i32> [[TMP29]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 56), align 16367; SSE-NEXT: [[TMP30:%.*]] = load <4 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 60), align 16368; SSE-NEXT: [[TMP31:%.*]] = xor <4 x i32> [[TMP30]], splat (i32 -1)369; SSE-NEXT: store <4 x i32> [[TMP31]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 60), align 16370; SSE-NEXT: br label [[FOR_BODY5:%.*]]371; SSE: for.cond3:372; SSE-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV:%.*]], 1373; SSE-NEXT: [[CMP4:%.*]] = icmp ult i64 [[INDVARS_IV]], 63374; SSE-NEXT: br i1 [[CMP4]], label [[FOR_BODY5]], label [[FOR_END14:%.*]]375; SSE: for.body5:376; SSE-NEXT: [[INDVARS_IV]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT]], [[FOR_COND3:%.*]] ]377; SSE-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds [64 x i32], ptr @ia, i64 0, i64 [[INDVARS_IV]]378; SSE-NEXT: [[TMP32:%.*]] = load i32, ptr [[ARRAYIDX7]], align 4379; SSE-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds [64 x i32], ptr @ib, i64 0, i64 [[INDVARS_IV]]380; SSE-NEXT: [[TMP33:%.*]] = load i32, ptr [[ARRAYIDX9]], align 4381; SSE-NEXT: [[NEG10:%.*]] = xor i32 [[TMP33]], -1382; SSE-NEXT: [[CMP11:%.*]] = icmp eq i32 [[TMP32]], [[NEG10]]383; SSE-NEXT: br i1 [[CMP11]], label [[FOR_COND3]], label [[IF_THEN:%.*]]384; SSE: if.then:385; SSE-NEXT: tail call void @abort()386; SSE-NEXT: unreachable387; SSE: for.end14:388; SSE-NEXT: ret i32 0389;390; AVX512-LABEL: @foo1(391; AVX512-NEXT: entry:392; AVX512-NEXT: [[TMP0:%.*]] = load <16 x i32>, ptr @ib, align 16393; AVX512-NEXT: [[TMP1:%.*]] = xor <16 x i32> [[TMP0]], splat (i32 -1)394; AVX512-NEXT: store <16 x i32> [[TMP1]], ptr @ia, align 16395; AVX512-NEXT: [[TMP2:%.*]] = load <16 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 16), align 16396; AVX512-NEXT: [[TMP3:%.*]] = xor <16 x i32> [[TMP2]], splat (i32 -1)397; AVX512-NEXT: store <16 x i32> [[TMP3]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 16), align 16398; AVX512-NEXT: [[TMP4:%.*]] = load <16 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 32), align 16399; AVX512-NEXT: [[TMP5:%.*]] = xor <16 x i32> [[TMP4]], splat (i32 -1)400; AVX512-NEXT: store <16 x i32> [[TMP5]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 32), align 16401; AVX512-NEXT: [[TMP6:%.*]] = load <16 x i32>, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 48), align 16402; AVX512-NEXT: [[TMP7:%.*]] = xor <16 x i32> [[TMP6]], splat (i32 -1)403; AVX512-NEXT: store <16 x i32> [[TMP7]], ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 48), align 16404; AVX512-NEXT: br label [[FOR_BODY5:%.*]]405; AVX512: for.cond3:406; AVX512-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV:%.*]], 1407; AVX512-NEXT: [[CMP4:%.*]] = icmp ult i64 [[INDVARS_IV]], 63408; AVX512-NEXT: br i1 [[CMP4]], label [[FOR_BODY5]], label [[FOR_END14:%.*]]409; AVX512: for.body5:410; AVX512-NEXT: [[INDVARS_IV]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT]], [[FOR_COND3:%.*]] ]411; AVX512-NEXT: [[ARRAYIDX7:%.*]] = getelementptr inbounds [64 x i32], ptr @ia, i64 0, i64 [[INDVARS_IV]]412; AVX512-NEXT: [[TMP8:%.*]] = load i32, ptr [[ARRAYIDX7]], align 4413; AVX512-NEXT: [[ARRAYIDX9:%.*]] = getelementptr inbounds [64 x i32], ptr @ib, i64 0, i64 [[INDVARS_IV]]414; AVX512-NEXT: [[TMP9:%.*]] = load i32, ptr [[ARRAYIDX9]], align 4415; AVX512-NEXT: [[NEG10:%.*]] = xor i32 [[TMP9]], -1416; AVX512-NEXT: [[CMP11:%.*]] = icmp eq i32 [[TMP8]], [[NEG10]]417; AVX512-NEXT: br i1 [[CMP11]], label [[FOR_COND3]], label [[IF_THEN:%.*]]418; AVX512: if.then:419; AVX512-NEXT: tail call void @abort()420; AVX512-NEXT: unreachable421; AVX512: for.end14:422; AVX512-NEXT: ret i32 0423;424entry:425 %0 = load i32, ptr @ib, align 16426 %neg = xor i32 %0, -1427 store i32 %neg, ptr @ia, align 16428 %1 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 1), align 4429 %neg.1 = xor i32 %1, -1430 store i32 %neg.1, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 1), align 4431 %2 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 2), align 8432 %neg.2 = xor i32 %2, -1433 store i32 %neg.2, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 2), align 8434 %3 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 3), align 4435 %neg.3 = xor i32 %3, -1436 store i32 %neg.3, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 3), align 4437 %4 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 4), align 16438 %neg.4 = xor i32 %4, -1439 store i32 %neg.4, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 4), align 16440 %5 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 5), align 4441 %neg.5 = xor i32 %5, -1442 store i32 %neg.5, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 5), align 4443 %6 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 6), align 8444 %neg.6 = xor i32 %6, -1445 store i32 %neg.6, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 6), align 8446 %7 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 7), align 4447 %neg.7 = xor i32 %7, -1448 store i32 %neg.7, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 7), align 4449 %8 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 8), align 16450 %neg.8 = xor i32 %8, -1451 store i32 %neg.8, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 8), align 16452 %9 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 9), align 4453 %neg.9 = xor i32 %9, -1454 store i32 %neg.9, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 9), align 4455 %10 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 10), align 8456 %neg.10 = xor i32 %10, -1457 store i32 %neg.10, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 10), align 8458 %11 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 11), align 4459 %neg.11 = xor i32 %11, -1460 store i32 %neg.11, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 11), align 4461 %12 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 12), align 16462 %neg.12 = xor i32 %12, -1463 store i32 %neg.12, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 12), align 16464 %13 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 13), align 4465 %neg.13 = xor i32 %13, -1466 store i32 %neg.13, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 13), align 4467 %14 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 14), align 8468 %neg.14 = xor i32 %14, -1469 store i32 %neg.14, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 14), align 8470 %15 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 15), align 4471 %neg.15 = xor i32 %15, -1472 store i32 %neg.15, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 15), align 4473 %16 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 16), align 16474 %neg.16 = xor i32 %16, -1475 store i32 %neg.16, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 16), align 16476 %17 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 17), align 4477 %neg.17 = xor i32 %17, -1478 store i32 %neg.17, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 17), align 4479 %18 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 18), align 8480 %neg.18 = xor i32 %18, -1481 store i32 %neg.18, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 18), align 8482 %19 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 19), align 4483 %neg.19 = xor i32 %19, -1484 store i32 %neg.19, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 19), align 4485 %20 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 20), align 16486 %neg.20 = xor i32 %20, -1487 store i32 %neg.20, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 20), align 16488 %21 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 21), align 4489 %neg.21 = xor i32 %21, -1490 store i32 %neg.21, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 21), align 4491 %22 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 22), align 8492 %neg.22 = xor i32 %22, -1493 store i32 %neg.22, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 22), align 8494 %23 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 23), align 4495 %neg.23 = xor i32 %23, -1496 store i32 %neg.23, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 23), align 4497 %24 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 24), align 16498 %neg.24 = xor i32 %24, -1499 store i32 %neg.24, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 24), align 16500 %25 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 25), align 4501 %neg.25 = xor i32 %25, -1502 store i32 %neg.25, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 25), align 4503 %26 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 26), align 8504 %neg.26 = xor i32 %26, -1505 store i32 %neg.26, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 26), align 8506 %27 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 27), align 4507 %neg.27 = xor i32 %27, -1508 store i32 %neg.27, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 27), align 4509 %28 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 28), align 16510 %neg.28 = xor i32 %28, -1511 store i32 %neg.28, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 28), align 16512 %29 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 29), align 4513 %neg.29 = xor i32 %29, -1514 store i32 %neg.29, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 29), align 4515 %30 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 30), align 8516 %neg.30 = xor i32 %30, -1517 store i32 %neg.30, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 30), align 8518 %31 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 31), align 4519 %neg.31 = xor i32 %31, -1520 store i32 %neg.31, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 31), align 4521 %32 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 32), align 16522 %neg.32 = xor i32 %32, -1523 store i32 %neg.32, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 32), align 16524 %33 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 33), align 4525 %neg.33 = xor i32 %33, -1526 store i32 %neg.33, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 33), align 4527 %34 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 34), align 8528 %neg.34 = xor i32 %34, -1529 store i32 %neg.34, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 34), align 8530 %35 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 35), align 4531 %neg.35 = xor i32 %35, -1532 store i32 %neg.35, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 35), align 4533 %36 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 36), align 16534 %neg.36 = xor i32 %36, -1535 store i32 %neg.36, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 36), align 16536 %37 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 37), align 4537 %neg.37 = xor i32 %37, -1538 store i32 %neg.37, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 37), align 4539 %38 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 38), align 8540 %neg.38 = xor i32 %38, -1541 store i32 %neg.38, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 38), align 8542 %39 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 39), align 4543 %neg.39 = xor i32 %39, -1544 store i32 %neg.39, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 39), align 4545 %40 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 40), align 16546 %neg.40 = xor i32 %40, -1547 store i32 %neg.40, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 40), align 16548 %41 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 41), align 4549 %neg.41 = xor i32 %41, -1550 store i32 %neg.41, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 41), align 4551 %42 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 42), align 8552 %neg.42 = xor i32 %42, -1553 store i32 %neg.42, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 42), align 8554 %43 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 43), align 4555 %neg.43 = xor i32 %43, -1556 store i32 %neg.43, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 43), align 4557 %44 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 44), align 16558 %neg.44 = xor i32 %44, -1559 store i32 %neg.44, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 44), align 16560 %45 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 45), align 4561 %neg.45 = xor i32 %45, -1562 store i32 %neg.45, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 45), align 4563 %46 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 46), align 8564 %neg.46 = xor i32 %46, -1565 store i32 %neg.46, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 46), align 8566 %47 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 47), align 4567 %neg.47 = xor i32 %47, -1568 store i32 %neg.47, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 47), align 4569 %48 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 48), align 16570 %neg.48 = xor i32 %48, -1571 store i32 %neg.48, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 48), align 16572 %49 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 49), align 4573 %neg.49 = xor i32 %49, -1574 store i32 %neg.49, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 49), align 4575 %50 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 50), align 8576 %neg.50 = xor i32 %50, -1577 store i32 %neg.50, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 50), align 8578 %51 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 51), align 4579 %neg.51 = xor i32 %51, -1580 store i32 %neg.51, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 51), align 4581 %52 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 52), align 16582 %neg.52 = xor i32 %52, -1583 store i32 %neg.52, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 52), align 16584 %53 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 53), align 4585 %neg.53 = xor i32 %53, -1586 store i32 %neg.53, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 53), align 4587 %54 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 54), align 8588 %neg.54 = xor i32 %54, -1589 store i32 %neg.54, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 54), align 8590 %55 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 55), align 4591 %neg.55 = xor i32 %55, -1592 store i32 %neg.55, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 55), align 4593 %56 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 56), align 16594 %neg.56 = xor i32 %56, -1595 store i32 %neg.56, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 56), align 16596 %57 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 57), align 4597 %neg.57 = xor i32 %57, -1598 store i32 %neg.57, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 57), align 4599 %58 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 58), align 8600 %neg.58 = xor i32 %58, -1601 store i32 %neg.58, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 58), align 8602 %59 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 59), align 4603 %neg.59 = xor i32 %59, -1604 store i32 %neg.59, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 59), align 4605 %60 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 60), align 16606 %neg.60 = xor i32 %60, -1607 store i32 %neg.60, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 60), align 16608 %61 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 61), align 4609 %neg.61 = xor i32 %61, -1610 store i32 %neg.61, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 61), align 4611 %62 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 62), align 8612 %neg.62 = xor i32 %62, -1613 store i32 %neg.62, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 62), align 8614 %63 = load i32, ptr getelementptr inbounds ([64 x i32], ptr @ib, i64 0, i64 63), align 4615 %neg.63 = xor i32 %63, -1616 store i32 %neg.63, ptr getelementptr inbounds ([64 x i32], ptr @ia, i64 0, i64 63), align 4617 br label %for.body5618 619for.cond3: ; preds = %for.body5620 %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1621 %cmp4 = icmp ult i64 %indvars.iv, 63622 br i1 %cmp4, label %for.body5, label %for.end14623 624for.body5: ; preds = %entry, %for.cond3625 %indvars.iv = phi i64 [ 0, %entry ], [ %indvars.iv.next, %for.cond3 ]626 %arrayidx7 = getelementptr inbounds [64 x i32], ptr @ia, i64 0, i64 %indvars.iv627 %64 = load i32, ptr %arrayidx7, align 4628 %arrayidx9 = getelementptr inbounds [64 x i32], ptr @ib, i64 0, i64 %indvars.iv629 %65 = load i32, ptr %arrayidx9, align 4630 %neg10 = xor i32 %65, -1631 %cmp11 = icmp eq i32 %64, %neg10632 br i1 %cmp11, label %for.cond3, label %if.then633 634if.then: ; preds = %for.body5635 tail call void @abort() #2636 unreachable637 638for.end14: ; preds = %for.cond3639 ret i32 0640}641 642declare void @abort() #2643