diff --git a/bench/darktable/optimized/Cr2sRawInterpolator.cpp.ll b/bench/darktable/optimized/Cr2sRawInterpolator.cpp.ll index aecc0505c79..b97ef0ae8c2 100644 --- a/bench/darktable/optimized/Cr2sRawInterpolator.cpp.ll +++ b/bench/darktable/optimized/Cr2sRawInterpolator.cpp.ll @@ -977,8 +977,8 @@ define linkonce_odr hidden void @_ZN8rawspeed19Cr2sRawInterpolator19interpolate_ br label %104 104: ; preds = %104, %86 - %105 = phi i64 [ 0, %86 ], [ %239, %104 ] - %106 = phi <8 x i64> [ , %86 ], [ %240, %104 ] + %105 = phi i64 [ 0, %86 ], [ %237, %104 ] + %106 = phi <8 x i64> [ , %86 ], [ %238, %104 ] %107 = icmp ult <8 x i64> %106, %92 %108 = extractelement <8 x i1> %107, i64 0 tail call void @llvm.assume(i1 %108) @@ -1094,233 +1094,231 @@ define linkonce_odr hidden void @_ZN8rawspeed19Cr2sRawInterpolator19interpolate_ %187 = ashr <8 x i32> %178, %188 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %187, <8 x i32> zeroinitializer) %189 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %188, <8 x i32> ) - %190 = trunc <8 x i32> %189 to <8 x i16> - %191 = ashr <8 x i32> %184, - %192 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %191, <8 x i32> zeroinitializer) - %193 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %192, <8 x i32> ) - %194 = trunc <8 x i32> %193 to <8 x i16> - %195 = ashr <8 x i32> %186, - %196 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %195, <8 x i32> zeroinitializer) - %197 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %196, <8 x i32> ) - %198 = trunc <8 x i32> %197 to <8 x i16> - %199 = add nuw nsw <8 x i64> %165, - %200 = icmp ule <8 x i64> %199, %98 - %201 = extractelement <8 x i1> %200, i64 0 + %190 = ashr <8 x i32> %184, + %191 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %190, <8 x i32> zeroinitializer) + %192 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %191, <8 x i32> ) + %193 = ashr <8 x i32> %186, + %194 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %193, <8 x i32> zeroinitializer) + %195 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %194, <8 x i32> ) + %196 = add nuw nsw <8 x i64> %165, + %197 = icmp ule <8 x i64> %196, %98 + %198 = extractelement <8 x i1> %197, i64 0 + tail call void @llvm.assume(i1 %198) + %199 = extractelement <8 x i1> %197, i64 1 + tail call void @llvm.assume(i1 %199) + %200 = extractelement <8 x i1> %197, i64 2 + tail call void @llvm.assume(i1 %200) + %201 = extractelement <8 x i1> %197, i64 3 tail call void @llvm.assume(i1 %201) - %202 = extractelement <8 x i1> %200, i64 1 + %202 = extractelement <8 x i1> %197, i64 4 tail call void @llvm.assume(i1 %202) - %203 = extractelement <8 x i1> %200, i64 2 + %203 = extractelement <8 x i1> %197, i64 5 tail call void @llvm.assume(i1 %203) - %204 = extractelement <8 x i1> %200, i64 3 + %204 = extractelement <8 x i1> %197, i64 6 tail call void @llvm.assume(i1 %204) - %205 = extractelement <8 x i1> %200, i64 4 + %205 = extractelement <8 x i1> %197, i64 7 tail call void @llvm.assume(i1 %205) - %206 = extractelement <8 x i1> %200, i64 5 - tail call void @llvm.assume(i1 %206) - %207 = extractelement <8 x i1> %200, i64 6 - tail call void @llvm.assume(i1 %207) - %208 = extractelement <8 x i1> %200, i64 7 - tail call void @llvm.assume(i1 %208) - %209 = add nsw <8 x i32> %124, - %210 = add nsw <8 x i32> %164, %209 - %211 = mul nsw <8 x i32> %210, %100 - %212 = mul nsw <8 x i32> %161, - %213 = shl nsw <8 x i32> %164, - %214 = sub nsw <8 x i32> %212, %213 - %215 = ashr <8 x i32> %214, - %216 = add nsw <8 x i32> %215, %209 - %217 = mul nsw <8 x i32> %216, %101 - %218 = add nsw <8 x i32> %161, %209 - %219 = mul nsw <8 x i32> %218, %102 - %220 = ashr <8 x i32> %211, - %221 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %220, <8 x i32> zeroinitializer) - %222 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %221, <8 x i32> ) - %223 = trunc <8 x i32> %222 to <8 x i16> - %224 = extractelement <8 x i64> %166, i64 0 - %225 = ashr <8 x i32> %217, + %206 = add nsw <8 x i32> %124, + %207 = add nsw <8 x i32> %164, %206 + %208 = mul nsw <8 x i32> %207, %100 + %209 = mul nsw <8 x i32> %161, + %210 = shl nsw <8 x i32> %164, + %211 = sub nsw <8 x i32> %209, %210 + %212 = ashr <8 x i32> %211, + %213 = add nsw <8 x i32> %212, %206 + %214 = mul nsw <8 x i32> %213, %101 + %215 = add nsw <8 x i32> %161, %206 + %216 = mul nsw <8 x i32> %215, %102 + %217 = ashr <8 x i32> %208, + %218 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %217, <8 x i32> zeroinitializer) + %219 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %218, <8 x i32> ) + %220 = extractelement <8 x i64> %166, i64 0 + %221 = ashr <8 x i32> %214, + %222 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %221, <8 x i32> zeroinitializer) + %223 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %222, <8 x i32> ) + %224 = trunc <8 x i32> %223 to <8 x i16> + %225 = ashr <8 x i32> %216, %226 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %225, <8 x i32> zeroinitializer) %227 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %226, <8 x i32> ) %228 = trunc <8 x i32> %227 to <8 x i16> - %229 = ashr <8 x i32> %219, - %230 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %229, <8 x i32> zeroinitializer) - %231 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %230, <8 x i32> ) - %232 = trunc <8 x i32> %231 to <8 x i16> - %233 = getelementptr i16, ptr %103, i64 %224 - %234 = shufflevector <8 x i16> %190, <8 x i16> %194, <16 x i32> - %235 = shufflevector <8 x i16> %198, <8 x i16> %223, <16 x i32> - %236 = shufflevector <16 x i16> %234, <16 x i16> %235, <32 x i32> - %237 = shufflevector <8 x i16> %228, <8 x i16> %232, <32 x i32> - %238 = shufflevector <32 x i16> %236, <32 x i16> %237, <48 x i32> - store <48 x i16> %238, ptr %233, align 2, !tbaa !105 - %239 = add nuw i64 %105, 8 - %240 = add <8 x i64> %106, - %241 = icmp eq i64 %239, %90 - br i1 %241, label %.loopexit, label %104, !llvm.loop !128 + %229 = getelementptr i16, ptr %103, i64 %220 + %230 = shufflevector <8 x i32> %189, <8 x i32> %192, <16 x i32> + %231 = trunc <16 x i32> %230 to <16 x i16> + %232 = shufflevector <8 x i32> %195, <8 x i32> %219, <16 x i32> + %233 = trunc <16 x i32> %232 to <16 x i16> + %234 = shufflevector <16 x i16> %231, <16 x i16> %233, <32 x i32> + %235 = shufflevector <8 x i16> %224, <8 x i16> %228, <32 x i32> + %236 = shufflevector <32 x i16> %234, <32 x i16> %235, <48 x i32> + store <48 x i16> %236, ptr %229, align 2, !tbaa !105 + %237 = add nuw i64 %105, 8 + %238 = add <8 x i64> %106, + %239 = icmp eq i64 %237, %90 + br i1 %239, label %.loopexit, label %104, !llvm.loop !128 .loopexit: ; preds = %104, %73, %2 - %242 = phi i64 [ 0, %73 ], [ 0, %2 ], [ %90, %104 ] - %243 = insertelement <4 x i32> poison, i32 %66, i64 0 - %244 = shufflevector <2 x i32> %68, <2 x i32> poison, <4 x i32> - %245 = shufflevector <4 x i32> %243, <4 x i32> %244, <4 x i32> - %246 = shufflevector <4 x i32> %245, <4 x i32> poison, <4 x i32> - %247 = getelementptr i8, ptr %64, i64 8 - br label %248 - -248: ; preds = %248, %.loopexit - %249 = phi i64 [ %266, %248 ], [ %242, %.loopexit ] - %250 = icmp ult i64 %249, %70 - tail call void @llvm.assume(i1 %250) - %251 = shl nuw nsw i64 %249, 2 - %252 = getelementptr inbounds i16, ptr %53, i64 %251 - %253 = load i16, ptr %252, align 2, !tbaa !105, !noalias !125 - %254 = zext i16 %253 to i32 - %255 = or disjoint i64 %251, 1 - %256 = getelementptr inbounds i16, ptr %53, i64 %255 - %257 = load i16, ptr %256, align 2, !tbaa !105, !noalias !125 - %258 = zext i16 %257 to i32 - %259 = or disjoint i64 %251, 2 - %260 = getelementptr i16, ptr %53, i64 %259 - %261 = load i16, ptr %260, align 2, !tbaa !105, !noalias !125 - %262 = zext i16 %261 to i32 - %263 = getelementptr i8, ptr %260, i64 2 - %264 = load i16, ptr %263, align 2, !tbaa !105, !noalias !125 - %265 = zext i16 %264 to i32 - %266 = add nuw nsw i64 %249, 1 - %267 = shl nuw nsw i64 %266, 2 - %268 = or disjoint i64 %267, 1 - %269 = icmp ult i64 %268, %54 - tail call void @llvm.assume(i1 %269) - %270 = or disjoint i64 %267, 2 - %271 = add nuw nsw i64 %267, 4 - %272 = icmp ule i64 %271, %54 - tail call void @llvm.assume(i1 %272) - %273 = getelementptr i16, ptr %53, i64 %270 - %274 = load i16, ptr %273, align 2, !tbaa !105, !noalias !125 - %275 = zext i16 %274 to i32 - %276 = getelementptr i8, ptr %273, i64 2 - %277 = load i16, ptr %276, align 2, !tbaa !105, !noalias !125 - %278 = zext i16 %277 to i32 - %279 = mul nuw nsw i64 %249, 6 - %280 = getelementptr i16, ptr %64, i64 %279 - %281 = add nuw nsw i64 %279, 6 - %282 = icmp ule i64 %281, %69 - tail call void @llvm.assume(i1 %282) - %283 = add nsw i32 %258, -512 - %284 = add i32 %57, %262 - %285 = add i32 %57, %265 - %286 = add i32 %284, %57 - %287 = add i32 %286, %275 - %288 = add i32 %285, %57 - %289 = add i32 %288, %278 - %290 = ashr i32 %289, 1 - %291 = add nsw i32 %254, -512 - %292 = mul nsw i32 %284, -778 - %293 = shl nsw i32 %285, 11 - %294 = sub nsw i32 %292, %293 - %295 = ashr i32 %294, 12 - %296 = insertelement <4 x i32> poison, i32 %291, i64 0 - %297 = insertelement <4 x i32> %296, i32 %295, i64 1 - %298 = insertelement <4 x i32> %297, i32 %283, i64 3 - %299 = shufflevector <4 x i32> %298, <4 x i32> poison, <4 x i32> - %300 = insertelement <4 x i32> poison, i32 %285, i64 0 - %301 = insertelement <4 x i32> %300, i32 %291, i64 1 - %302 = insertelement <4 x i32> %301, i32 %284, i64 2 - %303 = insertelement <4 x i32> %302, i32 %290, i64 3 - %304 = add <4 x i32> %303, %299 - %305 = mul nsw <4 x i32> %304, %246 - %306 = shl nsw i32 %290, 11 - %307 = ashr <4 x i32> %305, - %308 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %307, <4 x i32> zeroinitializer) - %309 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %308, <4 x i32> ) - %310 = trunc <4 x i32> %309 to <4 x i16> - store <4 x i16> %310, ptr %280, align 2, !tbaa !105 - %311 = getelementptr i16, ptr %247, i64 %279 - %312 = ashr i32 %287, 1 - %313 = mul nsw i32 %312, -778 - %314 = sub nsw i32 %313, %306 - %315 = ashr i32 %314, 12 - %316 = insertelement <2 x i32> poison, i32 %315, i64 0 - %317 = insertelement <2 x i32> %316, i32 %312, i64 1 - %318 = insertelement <2 x i32> poison, i32 %283, i64 0 - %319 = shufflevector <2 x i32> %318, <2 x i32> poison, <2 x i32> zeroinitializer - %320 = add nsw <2 x i32> %317, %319 - %321 = mul nsw <2 x i32> %320, %68 - %322 = ashr <2 x i32> %321, - %323 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %322, <2 x i32> zeroinitializer) - %324 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %323, <2 x i32> ) - %325 = trunc <2 x i32> %324 to <2 x i16> - store <2 x i16> %325, ptr %311, align 2, !tbaa !105 - %326 = icmp eq i64 %266, %71 - br i1 %326, label %327, label %248, !llvm.loop !131 - -327: ; preds = %248 - %328 = shl nsw i32 %45, 2 - %329 = zext nneg i32 %328 to i64 - %330 = getelementptr inbounds i16, ptr %53, i64 %329 - %331 = load i16, ptr %330, align 2, !tbaa !105, !noalias !132 - %332 = zext i16 %331 to i32 - %333 = or disjoint i64 %329, 1 - %334 = icmp ult i64 %333, %54 - tail call void @llvm.assume(i1 %334) - %335 = getelementptr inbounds i16, ptr %53, i64 %333 - %336 = load i16, ptr %335, align 2, !tbaa !105, !noalias !132 - %337 = zext i16 %336 to i32 - %338 = or disjoint i32 %328, 2 - %339 = add nuw i32 %328, 4 - %340 = icmp ule i32 %339, %28 - tail call void @llvm.assume(i1 %340) - %341 = zext nneg i32 %338 to i64 - %342 = getelementptr i16, ptr %53, i64 %341 - %343 = load i16, ptr %342, align 2, !tbaa !105, !noalias !132 - %344 = zext i16 %343 to i32 - %345 = getelementptr i8, ptr %342, i64 2 - %346 = load i16, ptr %345, align 2, !tbaa !105, !noalias !132 - %347 = zext i16 %346 to i32 - %348 = add i32 %57, %344 - %349 = add i32 %57, %347 - %350 = mul nsw i32 %45, 6 - %351 = load <4 x i32>, ptr %65, align 8 - %352 = zext nneg i32 %350 to i64 - %353 = add nsw i32 %332, -512 - %354 = mul nsw i32 %348, -778 - %355 = shl nsw i32 %349, 11 - %356 = sub nsw i32 %354, %355 - %357 = getelementptr i16, ptr %64, i64 %352 - %358 = add nuw nsw i64 %352, 6 - %359 = icmp ule i64 %358, %69 - tail call void @llvm.assume(i1 %359) - %360 = insertelement <4 x i32> poison, i32 %353, i64 0 - %361 = insertelement <4 x i32> poison, i32 %349, i64 0 - %362 = insertelement <4 x i32> %361, i32 %353, i64 1 - %363 = insertelement <4 x i32> %362, i32 %348, i64 2 - %364 = shufflevector <4 x i32> %363, <4 x i32> poison, <4 x i32> - %365 = getelementptr i8, ptr %357, i64 8 - %366 = insertelement <2 x i32> poison, i32 %356, i64 0 - %367 = insertelement <2 x i32> %366, i32 %337, i64 1 - %368 = ashr <2 x i32> %367, - %369 = add nsw <2 x i32> %367, - %370 = shufflevector <2 x i32> %368, <2 x i32> %369, <2 x i32> - %371 = shufflevector <2 x i32> %369, <2 x i32> poison, <2 x i32> - %372 = insertelement <2 x i32> %371, i32 %348, i64 1 - %373 = add <2 x i32> %372, %370 - %374 = mul nsw <2 x i32> %373, %68 - %375 = shufflevector <2 x i32> %370, <2 x i32> poison, <4 x i32> - %376 = shufflevector <4 x i32> %360, <4 x i32> %375, <4 x i32> - %377 = shufflevector <4 x i32> %376, <4 x i32> poison, <4 x i32> - %378 = add <4 x i32> %377, %364 - %379 = shufflevector <4 x i32> %351, <4 x i32> %244, <4 x i32> - %380 = shufflevector <4 x i32> %379, <4 x i32> poison, <4 x i32> - %381 = mul nsw <4 x i32> %378, %380 - %382 = ashr <4 x i32> %381, - %383 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %382, <4 x i32> zeroinitializer) - %384 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %383, <4 x i32> ) - %385 = trunc <4 x i32> %384 to <4 x i16> - store <4 x i16> %385, ptr %357, align 2, !tbaa !105 - %386 = ashr <2 x i32> %374, - %387 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %386, <2 x i32> zeroinitializer) - %388 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %387, <2 x i32> ) - %389 = trunc <2 x i32> %388 to <2 x i16> - store <2 x i16> %389, ptr %365, align 2, !tbaa !105 + %240 = phi i64 [ 0, %73 ], [ 0, %2 ], [ %90, %104 ] + %241 = insertelement <4 x i32> poison, i32 %66, i64 0 + %242 = shufflevector <2 x i32> %68, <2 x i32> poison, <4 x i32> + %243 = shufflevector <4 x i32> %241, <4 x i32> %242, <4 x i32> + %244 = shufflevector <4 x i32> %243, <4 x i32> poison, <4 x i32> + %245 = getelementptr i8, ptr %64, i64 8 + br label %246 + +246: ; preds = %246, %.loopexit + %247 = phi i64 [ %264, %246 ], [ %240, %.loopexit ] + %248 = icmp ult i64 %247, %70 + tail call void @llvm.assume(i1 %248) + %249 = shl nuw nsw i64 %247, 2 + %250 = getelementptr inbounds i16, ptr %53, i64 %249 + %251 = load i16, ptr %250, align 2, !tbaa !105, !noalias !125 + %252 = zext i16 %251 to i32 + %253 = or disjoint i64 %249, 1 + %254 = getelementptr inbounds i16, ptr %53, i64 %253 + %255 = load i16, ptr %254, align 2, !tbaa !105, !noalias !125 + %256 = zext i16 %255 to i32 + %257 = or disjoint i64 %249, 2 + %258 = getelementptr i16, ptr %53, i64 %257 + %259 = load i16, ptr %258, align 2, !tbaa !105, !noalias !125 + %260 = zext i16 %259 to i32 + %261 = getelementptr i8, ptr %258, i64 2 + %262 = load i16, ptr %261, align 2, !tbaa !105, !noalias !125 + %263 = zext i16 %262 to i32 + %264 = add nuw nsw i64 %247, 1 + %265 = shl nuw nsw i64 %264, 2 + %266 = or disjoint i64 %265, 1 + %267 = icmp ult i64 %266, %54 + tail call void @llvm.assume(i1 %267) + %268 = or disjoint i64 %265, 2 + %269 = add nuw nsw i64 %265, 4 + %270 = icmp ule i64 %269, %54 + tail call void @llvm.assume(i1 %270) + %271 = getelementptr i16, ptr %53, i64 %268 + %272 = load i16, ptr %271, align 2, !tbaa !105, !noalias !125 + %273 = zext i16 %272 to i32 + %274 = getelementptr i8, ptr %271, i64 2 + %275 = load i16, ptr %274, align 2, !tbaa !105, !noalias !125 + %276 = zext i16 %275 to i32 + %277 = mul nuw nsw i64 %247, 6 + %278 = getelementptr i16, ptr %64, i64 %277 + %279 = add nuw nsw i64 %277, 6 + %280 = icmp ule i64 %279, %69 + tail call void @llvm.assume(i1 %280) + %281 = add nsw i32 %256, -512 + %282 = add i32 %57, %260 + %283 = add i32 %57, %263 + %284 = add i32 %282, %57 + %285 = add i32 %284, %273 + %286 = add i32 %283, %57 + %287 = add i32 %286, %276 + %288 = ashr i32 %287, 1 + %289 = add nsw i32 %252, -512 + %290 = mul nsw i32 %282, -778 + %291 = shl nsw i32 %283, 11 + %292 = sub nsw i32 %290, %291 + %293 = ashr i32 %292, 12 + %294 = insertelement <4 x i32> poison, i32 %289, i64 0 + %295 = insertelement <4 x i32> %294, i32 %293, i64 1 + %296 = insertelement <4 x i32> %295, i32 %281, i64 3 + %297 = shufflevector <4 x i32> %296, <4 x i32> poison, <4 x i32> + %298 = insertelement <4 x i32> poison, i32 %283, i64 0 + %299 = insertelement <4 x i32> %298, i32 %289, i64 1 + %300 = insertelement <4 x i32> %299, i32 %282, i64 2 + %301 = insertelement <4 x i32> %300, i32 %288, i64 3 + %302 = add <4 x i32> %301, %297 + %303 = mul nsw <4 x i32> %302, %244 + %304 = shl nsw i32 %288, 11 + %305 = ashr <4 x i32> %303, + %306 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %305, <4 x i32> zeroinitializer) + %307 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %306, <4 x i32> ) + %308 = trunc <4 x i32> %307 to <4 x i16> + store <4 x i16> %308, ptr %278, align 2, !tbaa !105 + %309 = getelementptr i16, ptr %245, i64 %277 + %310 = ashr i32 %285, 1 + %311 = mul nsw i32 %310, -778 + %312 = sub nsw i32 %311, %304 + %313 = ashr i32 %312, 12 + %314 = insertelement <2 x i32> poison, i32 %313, i64 0 + %315 = insertelement <2 x i32> %314, i32 %310, i64 1 + %316 = insertelement <2 x i32> poison, i32 %281, i64 0 + %317 = shufflevector <2 x i32> %316, <2 x i32> poison, <2 x i32> zeroinitializer + %318 = add nsw <2 x i32> %315, %317 + %319 = mul nsw <2 x i32> %318, %68 + %320 = ashr <2 x i32> %319, + %321 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %320, <2 x i32> zeroinitializer) + %322 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %321, <2 x i32> ) + %323 = trunc <2 x i32> %322 to <2 x i16> + store <2 x i16> %323, ptr %309, align 2, !tbaa !105 + %324 = icmp eq i64 %264, %71 + br i1 %324, label %325, label %246, !llvm.loop !131 + +325: ; preds = %246 + %326 = shl nsw i32 %45, 2 + %327 = zext nneg i32 %326 to i64 + %328 = getelementptr inbounds i16, ptr %53, i64 %327 + %329 = load i16, ptr %328, align 2, !tbaa !105, !noalias !132 + %330 = zext i16 %329 to i32 + %331 = or disjoint i64 %327, 1 + %332 = icmp ult i64 %331, %54 + tail call void @llvm.assume(i1 %332) + %333 = getelementptr inbounds i16, ptr %53, i64 %331 + %334 = load i16, ptr %333, align 2, !tbaa !105, !noalias !132 + %335 = zext i16 %334 to i32 + %336 = or disjoint i32 %326, 2 + %337 = add nuw i32 %326, 4 + %338 = icmp ule i32 %337, %28 + tail call void @llvm.assume(i1 %338) + %339 = zext nneg i32 %336 to i64 + %340 = getelementptr i16, ptr %53, i64 %339 + %341 = load i16, ptr %340, align 2, !tbaa !105, !noalias !132 + %342 = zext i16 %341 to i32 + %343 = getelementptr i8, ptr %340, i64 2 + %344 = load i16, ptr %343, align 2, !tbaa !105, !noalias !132 + %345 = zext i16 %344 to i32 + %346 = add i32 %57, %342 + %347 = add i32 %57, %345 + %348 = mul nsw i32 %45, 6 + %349 = load <4 x i32>, ptr %65, align 8 + %350 = zext nneg i32 %348 to i64 + %351 = add nsw i32 %330, -512 + %352 = mul nsw i32 %346, -778 + %353 = shl nsw i32 %347, 11 + %354 = sub nsw i32 %352, %353 + %355 = getelementptr i16, ptr %64, i64 %350 + %356 = add nuw nsw i64 %350, 6 + %357 = icmp ule i64 %356, %69 + tail call void @llvm.assume(i1 %357) + %358 = insertelement <4 x i32> poison, i32 %351, i64 0 + %359 = insertelement <4 x i32> poison, i32 %347, i64 0 + %360 = insertelement <4 x i32> %359, i32 %351, i64 1 + %361 = insertelement <4 x i32> %360, i32 %346, i64 2 + %362 = shufflevector <4 x i32> %361, <4 x i32> poison, <4 x i32> + %363 = getelementptr i8, ptr %355, i64 8 + %364 = insertelement <2 x i32> poison, i32 %354, i64 0 + %365 = insertelement <2 x i32> %364, i32 %335, i64 1 + %366 = ashr <2 x i32> %365, + %367 = add nsw <2 x i32> %365, + %368 = shufflevector <2 x i32> %366, <2 x i32> %367, <2 x i32> + %369 = shufflevector <2 x i32> %367, <2 x i32> poison, <2 x i32> + %370 = insertelement <2 x i32> %369, i32 %346, i64 1 + %371 = add <2 x i32> %370, %368 + %372 = mul nsw <2 x i32> %371, %68 + %373 = shufflevector <2 x i32> %368, <2 x i32> poison, <4 x i32> + %374 = shufflevector <4 x i32> %358, <4 x i32> %373, <4 x i32> + %375 = shufflevector <4 x i32> %374, <4 x i32> poison, <4 x i32> + %376 = add <4 x i32> %375, %362 + %377 = shufflevector <4 x i32> %349, <4 x i32> %242, <4 x i32> + %378 = shufflevector <4 x i32> %377, <4 x i32> poison, <4 x i32> + %379 = mul nsw <4 x i32> %376, %378 + %380 = ashr <4 x i32> %379, + %381 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %380, <4 x i32> zeroinitializer) + %382 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %381, <4 x i32> ) + %383 = trunc <4 x i32> %382 to <4 x i16> + store <4 x i16> %383, ptr %355, align 2, !tbaa !105 + %384 = ashr <2 x i32> %372, + %385 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %384, <2 x i32> zeroinitializer) + %386 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %385, <2 x i32> ) + %387 = trunc <2 x i32> %386 to <2 x i16> + store <2 x i16> %387, ptr %363, align 2, !tbaa !105 ret void } @@ -1457,8 +1455,8 @@ define linkonce_odr hidden void @_ZN8rawspeed19Cr2sRawInterpolator19interpolate_ br label %104 104: ; preds = %104, %86 - %105 = phi i64 [ 0, %86 ], [ %253, %104 ] - %106 = phi <8 x i64> [ , %86 ], [ %254, %104 ] + %105 = phi i64 [ 0, %86 ], [ %251, %104 ] + %106 = phi <8 x i64> [ , %86 ], [ %252, %104 ] %107 = icmp ult <8 x i64> %106, %92 %108 = extractelement <8 x i1> %107, i64 0 tail call void @llvm.assume(i1 %108) @@ -1581,214 +1579,212 @@ define linkonce_odr hidden void @_ZN8rawspeed19Cr2sRawInterpolator19interpolate_ %194 = ashr <8 x i32> %181, %195 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %194, <8 x i32> zeroinitializer) %196 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %195, <8 x i32> ) - %197 = trunc <8 x i32> %196 to <8 x i16> - %198 = ashr <8 x i32> %187, - %199 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %198, <8 x i32> zeroinitializer) - %200 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %199, <8 x i32> ) - %201 = trunc <8 x i32> %200 to <8 x i16> - %202 = ashr <8 x i32> %193, - %203 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %202, <8 x i32> zeroinitializer) - %204 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %203, <8 x i32> ) - %205 = trunc <8 x i32> %204 to <8 x i16> - %206 = add nuw nsw <8 x i64> %165, - %207 = icmp ule <8 x i64> %206, %98 - %208 = extractelement <8 x i1> %207, i64 0 + %197 = ashr <8 x i32> %187, + %198 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %197, <8 x i32> zeroinitializer) + %199 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %198, <8 x i32> ) + %200 = ashr <8 x i32> %193, + %201 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %200, <8 x i32> zeroinitializer) + %202 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %201, <8 x i32> ) + %203 = add nuw nsw <8 x i64> %165, + %204 = icmp ule <8 x i64> %203, %98 + %205 = extractelement <8 x i1> %204, i64 0 + tail call void @llvm.assume(i1 %205) + %206 = extractelement <8 x i1> %204, i64 1 + tail call void @llvm.assume(i1 %206) + %207 = extractelement <8 x i1> %204, i64 2 + tail call void @llvm.assume(i1 %207) + %208 = extractelement <8 x i1> %204, i64 3 tail call void @llvm.assume(i1 %208) - %209 = extractelement <8 x i1> %207, i64 1 + %209 = extractelement <8 x i1> %204, i64 4 tail call void @llvm.assume(i1 %209) - %210 = extractelement <8 x i1> %207, i64 2 + %210 = extractelement <8 x i1> %204, i64 5 tail call void @llvm.assume(i1 %210) - %211 = extractelement <8 x i1> %207, i64 3 + %211 = extractelement <8 x i1> %204, i64 6 tail call void @llvm.assume(i1 %211) - %212 = extractelement <8 x i1> %207, i64 4 + %212 = extractelement <8 x i1> %204, i64 7 tail call void @llvm.assume(i1 %212) - %213 = extractelement <8 x i1> %207, i64 5 - tail call void @llvm.assume(i1 %213) - %214 = extractelement <8 x i1> %207, i64 6 - tail call void @llvm.assume(i1 %214) - %215 = extractelement <8 x i1> %207, i64 7 - tail call void @llvm.assume(i1 %215) - %216 = mul nsw <8 x i32> %161, - %217 = mul nsw <8 x i32> %164, - %218 = add nsw <8 x i32> %217, %216 - %219 = ashr <8 x i32> %218, - %220 = add nsw <8 x i32> %219, %124 - %221 = mul nsw <8 x i32> %220, %100 - %222 = mul nsw <8 x i32> %161, - %223 = mul <8 x i32> %164, - %224 = add <8 x i32> %223, %222 - %225 = ashr <8 x i32> %224, - %226 = add nsw <8 x i32> %225, %124 - %227 = mul nsw <8 x i32> %226, %101 - %228 = mul nsw <8 x i32> %161, - %229 = mul <8 x i32> %164, - %230 = add <8 x i32> %229, %228 - %231 = ashr <8 x i32> %230, - %232 = add nsw <8 x i32> %231, %124 - %233 = mul nsw <8 x i32> %232, %102 - %234 = ashr <8 x i32> %221, - %235 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %234, <8 x i32> zeroinitializer) - %236 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %235, <8 x i32> ) - %237 = trunc <8 x i32> %236 to <8 x i16> - %238 = extractelement <8 x i64> %166, i64 0 - %239 = ashr <8 x i32> %227, + %213 = mul nsw <8 x i32> %161, + %214 = mul nsw <8 x i32> %164, + %215 = add nsw <8 x i32> %214, %213 + %216 = ashr <8 x i32> %215, + %217 = add nsw <8 x i32> %216, %124 + %218 = mul nsw <8 x i32> %217, %100 + %219 = mul nsw <8 x i32> %161, + %220 = mul <8 x i32> %164, + %221 = add <8 x i32> %220, %219 + %222 = ashr <8 x i32> %221, + %223 = add nsw <8 x i32> %222, %124 + %224 = mul nsw <8 x i32> %223, %101 + %225 = mul nsw <8 x i32> %161, + %226 = mul <8 x i32> %164, + %227 = add <8 x i32> %226, %225 + %228 = ashr <8 x i32> %227, + %229 = add nsw <8 x i32> %228, %124 + %230 = mul nsw <8 x i32> %229, %102 + %231 = ashr <8 x i32> %218, + %232 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %231, <8 x i32> zeroinitializer) + %233 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %232, <8 x i32> ) + %234 = extractelement <8 x i64> %166, i64 0 + %235 = ashr <8 x i32> %224, + %236 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %235, <8 x i32> zeroinitializer) + %237 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %236, <8 x i32> ) + %238 = trunc <8 x i32> %237 to <8 x i16> + %239 = ashr <8 x i32> %230, %240 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %239, <8 x i32> zeroinitializer) %241 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %240, <8 x i32> ) %242 = trunc <8 x i32> %241 to <8 x i16> - %243 = ashr <8 x i32> %233, - %244 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %243, <8 x i32> zeroinitializer) - %245 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %244, <8 x i32> ) - %246 = trunc <8 x i32> %245 to <8 x i16> - %247 = getelementptr i16, ptr %103, i64 %238 - %248 = shufflevector <8 x i16> %197, <8 x i16> %201, <16 x i32> - %249 = shufflevector <8 x i16> %205, <8 x i16> %237, <16 x i32> - %250 = shufflevector <16 x i16> %248, <16 x i16> %249, <32 x i32> - %251 = shufflevector <8 x i16> %242, <8 x i16> %246, <32 x i32> - %252 = shufflevector <32 x i16> %250, <32 x i16> %251, <48 x i32> - store <48 x i16> %252, ptr %247, align 2, !tbaa !105 - %253 = add nuw i64 %105, 8 - %254 = add <8 x i64> %106, - %255 = icmp eq i64 %253, %90 - br i1 %255, label %.loopexit, label %104, !llvm.loop !141 + %243 = getelementptr i16, ptr %103, i64 %234 + %244 = shufflevector <8 x i32> %196, <8 x i32> %199, <16 x i32> + %245 = trunc <16 x i32> %244 to <16 x i16> + %246 = shufflevector <8 x i32> %202, <8 x i32> %233, <16 x i32> + %247 = trunc <16 x i32> %246 to <16 x i16> + %248 = shufflevector <16 x i16> %245, <16 x i16> %247, <32 x i32> + %249 = shufflevector <8 x i16> %238, <8 x i16> %242, <32 x i32> + %250 = shufflevector <32 x i16> %248, <32 x i16> %249, <48 x i32> + store <48 x i16> %250, ptr %243, align 2, !tbaa !105 + %251 = add nuw i64 %105, 8 + %252 = add <8 x i64> %106, + %253 = icmp eq i64 %251, %90 + br i1 %253, label %.loopexit, label %104, !llvm.loop !141 .loopexit: ; preds = %104, %73, %2 - %256 = phi i64 [ 0, %73 ], [ 0, %2 ], [ %90, %104 ] - %257 = insertelement <2 x i32> poison, i32 %57, i64 0 - %258 = shufflevector <2 x i32> %257, <2 x i32> poison, <2 x i32> zeroinitializer - %259 = insertelement <4 x i32> poison, i32 %66, i64 0 - %260 = shufflevector <2 x i32> %68, <2 x i32> poison, <4 x i32> - %261 = shufflevector <4 x i32> %259, <4 x i32> %260, <4 x i32> - %262 = shufflevector <4 x i32> %261, <4 x i32> poison, <4 x i32> - %263 = getelementptr i8, ptr %64, i64 8 - br label %264 - -264: ; preds = %264, %.loopexit - %265 = phi i64 [ %271, %264 ], [ %256, %.loopexit ] - %266 = icmp ult i64 %265, %70 - tail call void @llvm.assume(i1 %266) - %267 = shl nuw nsw i64 %265, 2 - %268 = getelementptr inbounds i16, ptr %53, i64 %267 - %269 = or disjoint i64 %267, 2 - %270 = getelementptr i16, ptr %53, i64 %269 - %271 = add nuw nsw i64 %265, 1 - %272 = shl nuw nsw i64 %271, 2 - %273 = or disjoint i64 %272, 1 - %274 = icmp ult i64 %273, %54 - tail call void @llvm.assume(i1 %274) - %275 = or disjoint i64 %272, 2 - %276 = add nuw nsw i64 %272, 4 - %277 = icmp ule i64 %276, %54 - tail call void @llvm.assume(i1 %277) - %278 = getelementptr i16, ptr %53, i64 %275 - %279 = load <2 x i16>, ptr %270, align 2, !tbaa !105, !noalias !138 - %280 = zext <2 x i16> %279 to <2 x i32> - %281 = add <2 x i32> %258, %280 - %282 = load <2 x i16>, ptr %278, align 2, !tbaa !105, !noalias !138 - %283 = zext <2 x i16> %282 to <2 x i32> - %284 = add <2 x i32> %258, %283 - %285 = mul nuw nsw i64 %265, 6 - %286 = getelementptr i16, ptr %64, i64 %285 - %287 = add nuw nsw i64 %285, 6 - %288 = icmp ule i64 %287, %69 - tail call void @llvm.assume(i1 %288) - %289 = load <2 x i16>, ptr %268, align 2, !tbaa !105, !noalias !138 - %290 = zext <2 x i16> %289 to <2 x i32> - %291 = shufflevector <2 x i32> %290, <2 x i32> poison, <4 x i32> - %292 = shufflevector <2 x i32> %281, <2 x i32> poison, <4 x i32> - %293 = getelementptr i16, ptr %263, i64 %285 - %294 = add nsw <2 x i32> %284, %281 - %295 = ashr <2 x i32> %294, - %296 = mul <2 x i32> %295, - %297 = shufflevector <2 x i32> %296, <2 x i32> poison, <2 x i32> - %298 = mul <2 x i32> %295, - %299 = add <2 x i32> %297, %298 - %300 = ashr <2 x i32> %299, - %301 = shufflevector <2 x i32> %295, <2 x i32> poison, <4 x i32> - %302 = shufflevector <2 x i32> %281, <2 x i32> %295, <4 x i32> - %303 = shufflevector <4 x i32> %302, <4 x i32> poison, <4 x i32> - %304 = mul <4 x i32> %303, - %305 = shufflevector <2 x i32> %281, <2 x i32> poison, <4 x i32> - %306 = shufflevector <4 x i32> %305, <4 x i32> %292, <4 x i32> - %307 = shufflevector <4 x i32> %306, <4 x i32> %301, <4 x i32> - %308 = mul <4 x i32> %307, - %309 = add <4 x i32> %308, %304 - %310 = ashr <4 x i32> %309, - %311 = add nsw <4 x i32> %310, %291 - %312 = mul nsw <4 x i32> %311, %262 - %313 = shufflevector <2 x i32> %290, <2 x i32> poison, <2 x i32> - %314 = add nsw <2 x i32> %300, %313 - %315 = mul nsw <2 x i32> %314, %68 - %316 = ashr <4 x i32> %312, - %317 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %316, <4 x i32> zeroinitializer) - %318 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %317, <4 x i32> ) - %319 = trunc <4 x i32> %318 to <4 x i16> - store <4 x i16> %319, ptr %286, align 2, !tbaa !105 - %320 = ashr <2 x i32> %315, - %321 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %320, <2 x i32> zeroinitializer) - %322 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %321, <2 x i32> ) - %323 = trunc <2 x i32> %322 to <2 x i16> - store <2 x i16> %323, ptr %293, align 2, !tbaa !105 - %324 = icmp eq i64 %271, %71 - br i1 %324, label %325, label %264, !llvm.loop !142 - -325: ; preds = %264 - %326 = shl nsw i32 %45, 2 - %327 = zext nneg i32 %326 to i64 - %328 = getelementptr inbounds i16, ptr %53, i64 %327 - %329 = or disjoint i64 %327, 1 - %330 = icmp ult i64 %329, %54 - tail call void @llvm.assume(i1 %330) - %331 = or disjoint i32 %326, 2 - %332 = add nuw i32 %326, 4 - %333 = icmp ule i32 %332, %28 - tail call void @llvm.assume(i1 %333) - %334 = zext nneg i32 %331 to i64 - %335 = getelementptr i16, ptr %53, i64 %334 - %336 = load <2 x i16>, ptr %335, align 2, !tbaa !105, !noalias !143 - %337 = mul nsw i32 %45, 6 - %338 = load <4 x i32>, ptr %65, align 8 - %339 = zext nneg i32 %337 to i64 - %340 = getelementptr i16, ptr %64, i64 %339 - %341 = add nuw nsw i64 %339, 6 - %342 = icmp ule i64 %341, %69 - tail call void @llvm.assume(i1 %342) - %343 = load <2 x i16>, ptr %328, align 2, !tbaa !105, !noalias !143 - %344 = zext <2 x i16> %343 to <2 x i32> - %345 = shufflevector <2 x i32> %344, <2 x i32> poison, <4 x i32> - %346 = getelementptr i8, ptr %340, i64 8 - %347 = zext <2 x i16> %336 to <2 x i32> - %348 = add <2 x i32> %258, %347 - %349 = mul nsw <2 x i32> %348, - %350 = shufflevector <2 x i32> %349, <2 x i32> poison, <2 x i32> - %351 = add nsw <2 x i32> %350, %349 - %352 = extractelement <2 x i32> %351, i64 0 - %353 = ashr i32 %352, 12 - %354 = mul <2 x i32> %348, - %355 = shufflevector <2 x i32> %354, <2 x i32> poison, <2 x i32> - %356 = mul <2 x i32> %348, - %357 = add <2 x i32> %355, %356 - %358 = ashr <2 x i32> %357, - %359 = insertelement <4 x i32> poison, i32 %353, i64 0 - %360 = shufflevector <2 x i32> %358, <2 x i32> poison, <4 x i32> - %361 = shufflevector <4 x i32> %359, <4 x i32> %360, <4 x i32> - %362 = shufflevector <4 x i32> %361, <4 x i32> poison, <4 x i32> - %363 = add nsw <4 x i32> %362, %345 - %364 = shufflevector <4 x i32> %338, <4 x i32> %260, <4 x i32> - %365 = shufflevector <4 x i32> %364, <4 x i32> poison, <4 x i32> - %366 = mul nsw <4 x i32> %363, %365 - %367 = shufflevector <2 x i32> %344, <2 x i32> poison, <2 x i32> - %368 = add nsw <2 x i32> %358, %367 - %369 = mul nsw <2 x i32> %368, %68 - %370 = ashr <4 x i32> %366, - %371 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %370, <4 x i32> zeroinitializer) - %372 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %371, <4 x i32> ) - %373 = trunc <4 x i32> %372 to <4 x i16> - store <4 x i16> %373, ptr %340, align 2, !tbaa !105 - %374 = ashr <2 x i32> %369, - %375 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %374, <2 x i32> zeroinitializer) - %376 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %375, <2 x i32> ) - %377 = trunc <2 x i32> %376 to <2 x i16> - store <2 x i16> %377, ptr %346, align 2, !tbaa !105 + %254 = phi i64 [ 0, %73 ], [ 0, %2 ], [ %90, %104 ] + %255 = insertelement <2 x i32> poison, i32 %57, i64 0 + %256 = shufflevector <2 x i32> %255, <2 x i32> poison, <2 x i32> zeroinitializer + %257 = insertelement <4 x i32> poison, i32 %66, i64 0 + %258 = shufflevector <2 x i32> %68, <2 x i32> poison, <4 x i32> + %259 = shufflevector <4 x i32> %257, <4 x i32> %258, <4 x i32> + %260 = shufflevector <4 x i32> %259, <4 x i32> poison, <4 x i32> + %261 = getelementptr i8, ptr %64, i64 8 + br label %262 + +262: ; preds = %262, %.loopexit + %263 = phi i64 [ %269, %262 ], [ %254, %.loopexit ] + %264 = icmp ult i64 %263, %70 + tail call void @llvm.assume(i1 %264) + %265 = shl nuw nsw i64 %263, 2 + %266 = getelementptr inbounds i16, ptr %53, i64 %265 + %267 = or disjoint i64 %265, 2 + %268 = getelementptr i16, ptr %53, i64 %267 + %269 = add nuw nsw i64 %263, 1 + %270 = shl nuw nsw i64 %269, 2 + %271 = or disjoint i64 %270, 1 + %272 = icmp ult i64 %271, %54 + tail call void @llvm.assume(i1 %272) + %273 = or disjoint i64 %270, 2 + %274 = add nuw nsw i64 %270, 4 + %275 = icmp ule i64 %274, %54 + tail call void @llvm.assume(i1 %275) + %276 = getelementptr i16, ptr %53, i64 %273 + %277 = load <2 x i16>, ptr %268, align 2, !tbaa !105, !noalias !138 + %278 = zext <2 x i16> %277 to <2 x i32> + %279 = add <2 x i32> %256, %278 + %280 = load <2 x i16>, ptr %276, align 2, !tbaa !105, !noalias !138 + %281 = zext <2 x i16> %280 to <2 x i32> + %282 = add <2 x i32> %256, %281 + %283 = mul nuw nsw i64 %263, 6 + %284 = getelementptr i16, ptr %64, i64 %283 + %285 = add nuw nsw i64 %283, 6 + %286 = icmp ule i64 %285, %69 + tail call void @llvm.assume(i1 %286) + %287 = load <2 x i16>, ptr %266, align 2, !tbaa !105, !noalias !138 + %288 = zext <2 x i16> %287 to <2 x i32> + %289 = shufflevector <2 x i32> %288, <2 x i32> poison, <4 x i32> + %290 = shufflevector <2 x i32> %279, <2 x i32> poison, <4 x i32> + %291 = getelementptr i16, ptr %261, i64 %283 + %292 = add nsw <2 x i32> %282, %279 + %293 = ashr <2 x i32> %292, + %294 = mul <2 x i32> %293, + %295 = shufflevector <2 x i32> %294, <2 x i32> poison, <2 x i32> + %296 = mul <2 x i32> %293, + %297 = add <2 x i32> %295, %296 + %298 = ashr <2 x i32> %297, + %299 = shufflevector <2 x i32> %293, <2 x i32> poison, <4 x i32> + %300 = shufflevector <2 x i32> %279, <2 x i32> %293, <4 x i32> + %301 = shufflevector <4 x i32> %300, <4 x i32> poison, <4 x i32> + %302 = mul <4 x i32> %301, + %303 = shufflevector <2 x i32> %279, <2 x i32> poison, <4 x i32> + %304 = shufflevector <4 x i32> %303, <4 x i32> %290, <4 x i32> + %305 = shufflevector <4 x i32> %304, <4 x i32> %299, <4 x i32> + %306 = mul <4 x i32> %305, + %307 = add <4 x i32> %306, %302 + %308 = ashr <4 x i32> %307, + %309 = add nsw <4 x i32> %308, %289 + %310 = mul nsw <4 x i32> %309, %260 + %311 = shufflevector <2 x i32> %288, <2 x i32> poison, <2 x i32> + %312 = add nsw <2 x i32> %298, %311 + %313 = mul nsw <2 x i32> %312, %68 + %314 = ashr <4 x i32> %310, + %315 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %314, <4 x i32> zeroinitializer) + %316 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %315, <4 x i32> ) + %317 = trunc <4 x i32> %316 to <4 x i16> + store <4 x i16> %317, ptr %284, align 2, !tbaa !105 + %318 = ashr <2 x i32> %313, + %319 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %318, <2 x i32> zeroinitializer) + %320 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %319, <2 x i32> ) + %321 = trunc <2 x i32> %320 to <2 x i16> + store <2 x i16> %321, ptr %291, align 2, !tbaa !105 + %322 = icmp eq i64 %269, %71 + br i1 %322, label %323, label %262, !llvm.loop !142 + +323: ; preds = %262 + %324 = shl nsw i32 %45, 2 + %325 = zext nneg i32 %324 to i64 + %326 = getelementptr inbounds i16, ptr %53, i64 %325 + %327 = or disjoint i64 %325, 1 + %328 = icmp ult i64 %327, %54 + tail call void @llvm.assume(i1 %328) + %329 = or disjoint i32 %324, 2 + %330 = add nuw i32 %324, 4 + %331 = icmp ule i32 %330, %28 + tail call void @llvm.assume(i1 %331) + %332 = zext nneg i32 %329 to i64 + %333 = getelementptr i16, ptr %53, i64 %332 + %334 = load <2 x i16>, ptr %333, align 2, !tbaa !105, !noalias !143 + %335 = mul nsw i32 %45, 6 + %336 = load <4 x i32>, ptr %65, align 8 + %337 = zext nneg i32 %335 to i64 + %338 = getelementptr i16, ptr %64, i64 %337 + %339 = add nuw nsw i64 %337, 6 + %340 = icmp ule i64 %339, %69 + tail call void @llvm.assume(i1 %340) + %341 = load <2 x i16>, ptr %326, align 2, !tbaa !105, !noalias !143 + %342 = zext <2 x i16> %341 to <2 x i32> + %343 = shufflevector <2 x i32> %342, <2 x i32> poison, <4 x i32> + %344 = getelementptr i8, ptr %338, i64 8 + %345 = zext <2 x i16> %334 to <2 x i32> + %346 = add <2 x i32> %256, %345 + %347 = mul nsw <2 x i32> %346, + %348 = shufflevector <2 x i32> %347, <2 x i32> poison, <2 x i32> + %349 = add nsw <2 x i32> %348, %347 + %350 = extractelement <2 x i32> %349, i64 0 + %351 = ashr i32 %350, 12 + %352 = mul <2 x i32> %346, + %353 = shufflevector <2 x i32> %352, <2 x i32> poison, <2 x i32> + %354 = mul <2 x i32> %346, + %355 = add <2 x i32> %353, %354 + %356 = ashr <2 x i32> %355, + %357 = insertelement <4 x i32> poison, i32 %351, i64 0 + %358 = shufflevector <2 x i32> %356, <2 x i32> poison, <4 x i32> + %359 = shufflevector <4 x i32> %357, <4 x i32> %358, <4 x i32> + %360 = shufflevector <4 x i32> %359, <4 x i32> poison, <4 x i32> + %361 = add nsw <4 x i32> %360, %343 + %362 = shufflevector <4 x i32> %336, <4 x i32> %258, <4 x i32> + %363 = shufflevector <4 x i32> %362, <4 x i32> poison, <4 x i32> + %364 = mul nsw <4 x i32> %361, %363 + %365 = shufflevector <2 x i32> %342, <2 x i32> poison, <2 x i32> + %366 = add nsw <2 x i32> %356, %365 + %367 = mul nsw <2 x i32> %366, %68 + %368 = ashr <4 x i32> %364, + %369 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %368, <4 x i32> zeroinitializer) + %370 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %369, <4 x i32> ) + %371 = trunc <4 x i32> %370 to <4 x i16> + store <4 x i16> %371, ptr %338, align 2, !tbaa !105 + %372 = ashr <2 x i32> %367, + %373 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %372, <2 x i32> zeroinitializer) + %374 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %373, <2 x i32> ) + %375 = trunc <2 x i32> %374 to <2 x i16> + store <2 x i16> %375, ptr %344, align 2, !tbaa !105 ret void } @@ -1923,8 +1919,8 @@ define linkonce_odr hidden void @_ZN8rawspeed19Cr2sRawInterpolator19interpolate_ br label %104 104: ; preds = %104, %86 - %105 = phi i64 [ 0, %86 ], [ %237, %104 ] - %106 = phi <8 x i64> [ , %86 ], [ %238, %104 ] + %105 = phi i64 [ 0, %86 ], [ %235, %104 ] + %106 = phi <8 x i64> [ , %86 ], [ %236, %104 ] %107 = icmp ult <8 x i64> %106, %92 %108 = extractelement <8 x i1> %107, i64 0 tail call void @llvm.assume(i1 %108) @@ -2039,212 +2035,210 @@ define linkonce_odr hidden void @_ZN8rawspeed19Cr2sRawInterpolator19interpolate_ %186 = ashr <8 x i32> %177, %187 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %186, <8 x i32> zeroinitializer) %188 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %187, <8 x i32> ) - %189 = trunc <8 x i32> %188 to <8 x i16> - %190 = ashr <8 x i32> %183, - %191 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %190, <8 x i32> zeroinitializer) - %192 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %191, <8 x i32> ) - %193 = trunc <8 x i32> %192 to <8 x i16> - %194 = ashr <8 x i32> %185, - %195 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %194, <8 x i32> zeroinitializer) - %196 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %195, <8 x i32> ) - %197 = trunc <8 x i32> %196 to <8 x i16> - %198 = add nuw nsw <8 x i64> %165, - %199 = icmp ule <8 x i64> %198, %98 - %200 = extractelement <8 x i1> %199, i64 0 + %189 = ashr <8 x i32> %183, + %190 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %189, <8 x i32> zeroinitializer) + %191 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %190, <8 x i32> ) + %192 = ashr <8 x i32> %185, + %193 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %192, <8 x i32> zeroinitializer) + %194 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %193, <8 x i32> ) + %195 = add nuw nsw <8 x i64> %165, + %196 = icmp ule <8 x i64> %195, %98 + %197 = extractelement <8 x i1> %196, i64 0 + tail call void @llvm.assume(i1 %197) + %198 = extractelement <8 x i1> %196, i64 1 + tail call void @llvm.assume(i1 %198) + %199 = extractelement <8 x i1> %196, i64 2 + tail call void @llvm.assume(i1 %199) + %200 = extractelement <8 x i1> %196, i64 3 tail call void @llvm.assume(i1 %200) - %201 = extractelement <8 x i1> %199, i64 1 + %201 = extractelement <8 x i1> %196, i64 4 tail call void @llvm.assume(i1 %201) - %202 = extractelement <8 x i1> %199, i64 2 + %202 = extractelement <8 x i1> %196, i64 5 tail call void @llvm.assume(i1 %202) - %203 = extractelement <8 x i1> %199, i64 3 + %203 = extractelement <8 x i1> %196, i64 6 tail call void @llvm.assume(i1 %203) - %204 = extractelement <8 x i1> %199, i64 4 + %204 = extractelement <8 x i1> %196, i64 7 tail call void @llvm.assume(i1 %204) - %205 = extractelement <8 x i1> %199, i64 5 - tail call void @llvm.assume(i1 %205) - %206 = extractelement <8 x i1> %199, i64 6 - tail call void @llvm.assume(i1 %206) - %207 = extractelement <8 x i1> %199, i64 7 - tail call void @llvm.assume(i1 %207) - %208 = add nsw <8 x i32> %164, %124 - %209 = mul nsw <8 x i32> %208, %100 - %210 = mul nsw <8 x i32> %161, - %211 = shl nsw <8 x i32> %164, - %212 = sub nsw <8 x i32> %210, %211 - %213 = ashr <8 x i32> %212, - %214 = add nsw <8 x i32> %213, %124 - %215 = mul nsw <8 x i32> %214, %101 - %216 = add nsw <8 x i32> %161, %124 - %217 = mul nsw <8 x i32> %216, %102 - %218 = ashr <8 x i32> %209, - %219 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %218, <8 x i32> zeroinitializer) - %220 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %219, <8 x i32> ) - %221 = trunc <8 x i32> %220 to <8 x i16> - %222 = extractelement <8 x i64> %166, i64 0 - %223 = ashr <8 x i32> %215, + %205 = add nsw <8 x i32> %164, %124 + %206 = mul nsw <8 x i32> %205, %100 + %207 = mul nsw <8 x i32> %161, + %208 = shl nsw <8 x i32> %164, + %209 = sub nsw <8 x i32> %207, %208 + %210 = ashr <8 x i32> %209, + %211 = add nsw <8 x i32> %210, %124 + %212 = mul nsw <8 x i32> %211, %101 + %213 = add nsw <8 x i32> %161, %124 + %214 = mul nsw <8 x i32> %213, %102 + %215 = ashr <8 x i32> %206, + %216 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %215, <8 x i32> zeroinitializer) + %217 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %216, <8 x i32> ) + %218 = extractelement <8 x i64> %166, i64 0 + %219 = ashr <8 x i32> %212, + %220 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %219, <8 x i32> zeroinitializer) + %221 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %220, <8 x i32> ) + %222 = trunc <8 x i32> %221 to <8 x i16> + %223 = ashr <8 x i32> %214, %224 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %223, <8 x i32> zeroinitializer) %225 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %224, <8 x i32> ) %226 = trunc <8 x i32> %225 to <8 x i16> - %227 = ashr <8 x i32> %217, - %228 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %227, <8 x i32> zeroinitializer) - %229 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %228, <8 x i32> ) - %230 = trunc <8 x i32> %229 to <8 x i16> - %231 = getelementptr i16, ptr %103, i64 %222 - %232 = shufflevector <8 x i16> %189, <8 x i16> %193, <16 x i32> - %233 = shufflevector <8 x i16> %197, <8 x i16> %221, <16 x i32> - %234 = shufflevector <16 x i16> %232, <16 x i16> %233, <32 x i32> - %235 = shufflevector <8 x i16> %226, <8 x i16> %230, <32 x i32> - %236 = shufflevector <32 x i16> %234, <32 x i16> %235, <48 x i32> - store <48 x i16> %236, ptr %231, align 2, !tbaa !105 - %237 = add nuw i64 %105, 8 - %238 = add <8 x i64> %106, - %239 = icmp eq i64 %237, %90 - br i1 %239, label %.loopexit, label %104, !llvm.loop !152 + %227 = getelementptr i16, ptr %103, i64 %218 + %228 = shufflevector <8 x i32> %188, <8 x i32> %191, <16 x i32> + %229 = trunc <16 x i32> %228 to <16 x i16> + %230 = shufflevector <8 x i32> %194, <8 x i32> %217, <16 x i32> + %231 = trunc <16 x i32> %230 to <16 x i16> + %232 = shufflevector <16 x i16> %229, <16 x i16> %231, <32 x i32> + %233 = shufflevector <8 x i16> %222, <8 x i16> %226, <32 x i32> + %234 = shufflevector <32 x i16> %232, <32 x i16> %233, <48 x i32> + store <48 x i16> %234, ptr %227, align 2, !tbaa !105 + %235 = add nuw i64 %105, 8 + %236 = add <8 x i64> %106, + %237 = icmp eq i64 %235, %90 + br i1 %237, label %.loopexit, label %104, !llvm.loop !152 .loopexit: ; preds = %104, %73, %2 - %240 = phi i64 [ 0, %73 ], [ 0, %2 ], [ %90, %104 ] - %241 = insertelement <4 x i32> poison, i32 %66, i64 0 - %242 = shufflevector <2 x i32> %68, <2 x i32> poison, <4 x i32> - %243 = shufflevector <4 x i32> %241, <4 x i32> %242, <4 x i32> - %244 = shufflevector <4 x i32> %243, <4 x i32> poison, <4 x i32> - %245 = getelementptr i8, ptr %64, i64 8 - br label %246 - -246: ; preds = %246, %.loopexit - %247 = phi i64 [ %258, %246 ], [ %240, %.loopexit ] - %248 = icmp ult i64 %247, %70 - tail call void @llvm.assume(i1 %248) - %249 = shl nuw nsw i64 %247, 2 - %250 = getelementptr inbounds i16, ptr %53, i64 %249 - %251 = or disjoint i64 %249, 2 - %252 = getelementptr i16, ptr %53, i64 %251 - %253 = load i16, ptr %252, align 2, !tbaa !105, !noalias !149 - %254 = zext i16 %253 to i32 - %255 = getelementptr i8, ptr %252, i64 2 - %256 = load i16, ptr %255, align 2, !tbaa !105, !noalias !149 - %257 = zext i16 %256 to i32 - %258 = add nuw nsw i64 %247, 1 - %259 = shl nuw nsw i64 %258, 2 - %260 = or disjoint i64 %259, 1 - %261 = icmp ult i64 %260, %54 - tail call void @llvm.assume(i1 %261) - %262 = or disjoint i64 %259, 2 - %263 = add nuw nsw i64 %259, 4 - %264 = icmp ule i64 %263, %54 - tail call void @llvm.assume(i1 %264) - %265 = getelementptr i16, ptr %53, i64 %262 - %266 = load i16, ptr %265, align 2, !tbaa !105, !noalias !149 - %267 = zext i16 %266 to i32 - %268 = getelementptr i8, ptr %265, i64 2 - %269 = load i16, ptr %268, align 2, !tbaa !105, !noalias !149 - %270 = zext i16 %269 to i32 - %271 = mul nuw nsw i64 %247, 6 - %272 = getelementptr i16, ptr %64, i64 %271 - %273 = add nuw nsw i64 %271, 6 - %274 = icmp ule i64 %273, %69 - tail call void @llvm.assume(i1 %274) - %275 = load <2 x i16>, ptr %250, align 2, !tbaa !105, !noalias !149 - %276 = zext <2 x i16> %275 to <2 x i32> - %277 = shufflevector <2 x i32> %276, <2 x i32> poison, <4 x i32> - %278 = add i32 %57, %254 - %279 = add i32 %57, %257 - %280 = add i32 %278, %57 - %281 = add i32 %280, %267 - %282 = add i32 %279, %57 - %283 = add i32 %282, %270 - %284 = ashr i32 %283, 1 - %285 = mul nsw i32 %278, -778 - %286 = shl nsw i32 %279, 11 - %287 = sub nsw i32 %285, %286 - %288 = ashr i32 %287, 12 - %289 = insertelement <4 x i32> poison, i32 %279, i64 0 - %290 = insertelement <4 x i32> %289, i32 %288, i64 1 - %291 = insertelement <4 x i32> %290, i32 %278, i64 2 - %292 = insertelement <4 x i32> %291, i32 %284, i64 3 - %293 = add nsw <4 x i32> %292, %277 - %294 = mul nsw <4 x i32> %293, %244 - %295 = shl nsw i32 %284, 11 - %296 = ashr <4 x i32> %294, - %297 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %296, <4 x i32> zeroinitializer) - %298 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %297, <4 x i32> ) - %299 = trunc <4 x i32> %298 to <4 x i16> - store <4 x i16> %299, ptr %272, align 2, !tbaa !105 - %300 = getelementptr i16, ptr %245, i64 %271 - %301 = ashr i32 %281, 1 - %302 = mul nsw i32 %301, -778 - %303 = sub nsw i32 %302, %295 - %304 = ashr i32 %303, 12 - %305 = insertelement <2 x i32> poison, i32 %304, i64 0 - %306 = insertelement <2 x i32> %305, i32 %301, i64 1 - %307 = shufflevector <2 x i32> %276, <2 x i32> poison, <2 x i32> - %308 = add nsw <2 x i32> %306, %307 - %309 = mul nsw <2 x i32> %308, %68 - %310 = ashr <2 x i32> %309, - %311 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %310, <2 x i32> zeroinitializer) - %312 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %311, <2 x i32> ) - %313 = trunc <2 x i32> %312 to <2 x i16> - store <2 x i16> %313, ptr %300, align 2, !tbaa !105 - %314 = icmp eq i64 %258, %71 - br i1 %314, label %315, label %246, !llvm.loop !153 - -315: ; preds = %246 - %316 = shl nsw i32 %45, 2 - %317 = zext nneg i32 %316 to i64 - %318 = getelementptr inbounds i16, ptr %53, i64 %317 - %319 = or disjoint i64 %317, 1 - %320 = icmp ult i64 %319, %54 - tail call void @llvm.assume(i1 %320) - %321 = or disjoint i32 %316, 2 - %322 = add nuw i32 %316, 4 - %323 = icmp ule i32 %322, %28 - tail call void @llvm.assume(i1 %323) - %324 = zext nneg i32 %321 to i64 - %325 = getelementptr i16, ptr %53, i64 %324 - %326 = load i16, ptr %325, align 2, !tbaa !105, !noalias !154 - %327 = zext i16 %326 to i32 - %328 = getelementptr i8, ptr %325, i64 2 - %329 = load i16, ptr %328, align 2, !tbaa !105, !noalias !154 - %330 = zext i16 %329 to i32 - %331 = add i32 %57, %327 - %332 = add i32 %57, %330 - %333 = mul nsw i32 %45, 6 - %334 = load <4 x i32>, ptr %65, align 8 - %335 = zext nneg i32 %333 to i64 - %336 = mul nsw i32 %331, -778 - %337 = shl nsw i32 %332, 11 - %338 = sub nsw i32 %336, %337 - %339 = ashr i32 %338, 12 - %340 = getelementptr i16, ptr %64, i64 %335 - %341 = add nuw nsw i64 %335, 6 - %342 = icmp ule i64 %341, %69 - tail call void @llvm.assume(i1 %342) - %343 = load <2 x i16>, ptr %318, align 2, !tbaa !105, !noalias !154 - %344 = zext <2 x i16> %343 to <2 x i32> - %345 = shufflevector <2 x i32> %344, <2 x i32> poison, <4 x i32> - %346 = insertelement <4 x i32> poison, i32 %332, i64 0 - %347 = insertelement <4 x i32> %346, i32 %339, i64 1 - %348 = insertelement <4 x i32> %347, i32 %331, i64 2 - %349 = shufflevector <4 x i32> %348, <4 x i32> poison, <4 x i32> - %350 = add nsw <4 x i32> %349, %345 - %351 = getelementptr i8, ptr %340, i64 8 - %352 = shufflevector <4 x i32> %334, <4 x i32> %242, <4 x i32> - %353 = shufflevector <4 x i32> %352, <4 x i32> poison, <4 x i32> - %354 = mul nsw <4 x i32> %350, %353 - %355 = insertelement <2 x i32> poison, i32 %339, i64 0 - %356 = insertelement <2 x i32> %355, i32 %331, i64 1 - %357 = shufflevector <2 x i32> %344, <2 x i32> poison, <2 x i32> - %358 = add nsw <2 x i32> %356, %357 - %359 = mul nsw <2 x i32> %358, %68 - %360 = ashr <4 x i32> %354, - %361 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %360, <4 x i32> zeroinitializer) - %362 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %361, <4 x i32> ) - %363 = trunc <4 x i32> %362 to <4 x i16> - store <4 x i16> %363, ptr %340, align 2, !tbaa !105 - %364 = ashr <2 x i32> %359, - %365 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %364, <2 x i32> zeroinitializer) - %366 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %365, <2 x i32> ) - %367 = trunc <2 x i32> %366 to <2 x i16> - store <2 x i16> %367, ptr %351, align 2, !tbaa !105 + %238 = phi i64 [ 0, %73 ], [ 0, %2 ], [ %90, %104 ] + %239 = insertelement <4 x i32> poison, i32 %66, i64 0 + %240 = shufflevector <2 x i32> %68, <2 x i32> poison, <4 x i32> + %241 = shufflevector <4 x i32> %239, <4 x i32> %240, <4 x i32> + %242 = shufflevector <4 x i32> %241, <4 x i32> poison, <4 x i32> + %243 = getelementptr i8, ptr %64, i64 8 + br label %244 + +244: ; preds = %244, %.loopexit + %245 = phi i64 [ %256, %244 ], [ %238, %.loopexit ] + %246 = icmp ult i64 %245, %70 + tail call void @llvm.assume(i1 %246) + %247 = shl nuw nsw i64 %245, 2 + %248 = getelementptr inbounds i16, ptr %53, i64 %247 + %249 = or disjoint i64 %247, 2 + %250 = getelementptr i16, ptr %53, i64 %249 + %251 = load i16, ptr %250, align 2, !tbaa !105, !noalias !149 + %252 = zext i16 %251 to i32 + %253 = getelementptr i8, ptr %250, i64 2 + %254 = load i16, ptr %253, align 2, !tbaa !105, !noalias !149 + %255 = zext i16 %254 to i32 + %256 = add nuw nsw i64 %245, 1 + %257 = shl nuw nsw i64 %256, 2 + %258 = or disjoint i64 %257, 1 + %259 = icmp ult i64 %258, %54 + tail call void @llvm.assume(i1 %259) + %260 = or disjoint i64 %257, 2 + %261 = add nuw nsw i64 %257, 4 + %262 = icmp ule i64 %261, %54 + tail call void @llvm.assume(i1 %262) + %263 = getelementptr i16, ptr %53, i64 %260 + %264 = load i16, ptr %263, align 2, !tbaa !105, !noalias !149 + %265 = zext i16 %264 to i32 + %266 = getelementptr i8, ptr %263, i64 2 + %267 = load i16, ptr %266, align 2, !tbaa !105, !noalias !149 + %268 = zext i16 %267 to i32 + %269 = mul nuw nsw i64 %245, 6 + %270 = getelementptr i16, ptr %64, i64 %269 + %271 = add nuw nsw i64 %269, 6 + %272 = icmp ule i64 %271, %69 + tail call void @llvm.assume(i1 %272) + %273 = load <2 x i16>, ptr %248, align 2, !tbaa !105, !noalias !149 + %274 = zext <2 x i16> %273 to <2 x i32> + %275 = shufflevector <2 x i32> %274, <2 x i32> poison, <4 x i32> + %276 = add i32 %57, %252 + %277 = add i32 %57, %255 + %278 = add i32 %276, %57 + %279 = add i32 %278, %265 + %280 = add i32 %277, %57 + %281 = add i32 %280, %268 + %282 = ashr i32 %281, 1 + %283 = mul nsw i32 %276, -778 + %284 = shl nsw i32 %277, 11 + %285 = sub nsw i32 %283, %284 + %286 = ashr i32 %285, 12 + %287 = insertelement <4 x i32> poison, i32 %277, i64 0 + %288 = insertelement <4 x i32> %287, i32 %286, i64 1 + %289 = insertelement <4 x i32> %288, i32 %276, i64 2 + %290 = insertelement <4 x i32> %289, i32 %282, i64 3 + %291 = add nsw <4 x i32> %290, %275 + %292 = mul nsw <4 x i32> %291, %242 + %293 = shl nsw i32 %282, 11 + %294 = ashr <4 x i32> %292, + %295 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %294, <4 x i32> zeroinitializer) + %296 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %295, <4 x i32> ) + %297 = trunc <4 x i32> %296 to <4 x i16> + store <4 x i16> %297, ptr %270, align 2, !tbaa !105 + %298 = getelementptr i16, ptr %243, i64 %269 + %299 = ashr i32 %279, 1 + %300 = mul nsw i32 %299, -778 + %301 = sub nsw i32 %300, %293 + %302 = ashr i32 %301, 12 + %303 = insertelement <2 x i32> poison, i32 %302, i64 0 + %304 = insertelement <2 x i32> %303, i32 %299, i64 1 + %305 = shufflevector <2 x i32> %274, <2 x i32> poison, <2 x i32> + %306 = add nsw <2 x i32> %304, %305 + %307 = mul nsw <2 x i32> %306, %68 + %308 = ashr <2 x i32> %307, + %309 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %308, <2 x i32> zeroinitializer) + %310 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %309, <2 x i32> ) + %311 = trunc <2 x i32> %310 to <2 x i16> + store <2 x i16> %311, ptr %298, align 2, !tbaa !105 + %312 = icmp eq i64 %256, %71 + br i1 %312, label %313, label %244, !llvm.loop !153 + +313: ; preds = %244 + %314 = shl nsw i32 %45, 2 + %315 = zext nneg i32 %314 to i64 + %316 = getelementptr inbounds i16, ptr %53, i64 %315 + %317 = or disjoint i64 %315, 1 + %318 = icmp ult i64 %317, %54 + tail call void @llvm.assume(i1 %318) + %319 = or disjoint i32 %314, 2 + %320 = add nuw i32 %314, 4 + %321 = icmp ule i32 %320, %28 + tail call void @llvm.assume(i1 %321) + %322 = zext nneg i32 %319 to i64 + %323 = getelementptr i16, ptr %53, i64 %322 + %324 = load i16, ptr %323, align 2, !tbaa !105, !noalias !154 + %325 = zext i16 %324 to i32 + %326 = getelementptr i8, ptr %323, i64 2 + %327 = load i16, ptr %326, align 2, !tbaa !105, !noalias !154 + %328 = zext i16 %327 to i32 + %329 = add i32 %57, %325 + %330 = add i32 %57, %328 + %331 = mul nsw i32 %45, 6 + %332 = load <4 x i32>, ptr %65, align 8 + %333 = zext nneg i32 %331 to i64 + %334 = mul nsw i32 %329, -778 + %335 = shl nsw i32 %330, 11 + %336 = sub nsw i32 %334, %335 + %337 = ashr i32 %336, 12 + %338 = getelementptr i16, ptr %64, i64 %333 + %339 = add nuw nsw i64 %333, 6 + %340 = icmp ule i64 %339, %69 + tail call void @llvm.assume(i1 %340) + %341 = load <2 x i16>, ptr %316, align 2, !tbaa !105, !noalias !154 + %342 = zext <2 x i16> %341 to <2 x i32> + %343 = shufflevector <2 x i32> %342, <2 x i32> poison, <4 x i32> + %344 = insertelement <4 x i32> poison, i32 %330, i64 0 + %345 = insertelement <4 x i32> %344, i32 %337, i64 1 + %346 = insertelement <4 x i32> %345, i32 %329, i64 2 + %347 = shufflevector <4 x i32> %346, <4 x i32> poison, <4 x i32> + %348 = add nsw <4 x i32> %347, %343 + %349 = getelementptr i8, ptr %338, i64 8 + %350 = shufflevector <4 x i32> %332, <4 x i32> %240, <4 x i32> + %351 = shufflevector <4 x i32> %350, <4 x i32> poison, <4 x i32> + %352 = mul nsw <4 x i32> %348, %351 + %353 = insertelement <2 x i32> poison, i32 %337, i64 0 + %354 = insertelement <2 x i32> %353, i32 %329, i64 1 + %355 = shufflevector <2 x i32> %342, <2 x i32> poison, <2 x i32> + %356 = add nsw <2 x i32> %354, %355 + %357 = mul nsw <2 x i32> %356, %68 + %358 = ashr <4 x i32> %352, + %359 = tail call <4 x i32> @llvm.smax.v4i32(<4 x i32> %358, <4 x i32> zeroinitializer) + %360 = tail call <4 x i32> @llvm.umin.v4i32(<4 x i32> %359, <4 x i32> ) + %361 = trunc <4 x i32> %360 to <4 x i16> + store <4 x i16> %361, ptr %338, align 2, !tbaa !105 + %362 = ashr <2 x i32> %357, + %363 = tail call <2 x i32> @llvm.smax.v2i32(<2 x i32> %362, <2 x i32> zeroinitializer) + %364 = tail call <2 x i32> @llvm.umin.v2i32(<2 x i32> %363, <2 x i32> ) + %365 = trunc <2 x i32> %364 to <2 x i16> + store <2 x i16> %365, ptr %349, align 2, !tbaa !105 ret void } diff --git a/bench/darktable/optimized/TableLookUp.cpp.ll b/bench/darktable/optimized/TableLookUp.cpp.ll index 3a43c981bd7..01a8d2368f2 100644 --- a/bench/darktable/optimized/TableLookUp.cpp.ll +++ b/bench/darktable/optimized/TableLookUp.cpp.ll @@ -168,7 +168,7 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr %32 = getelementptr inbounds i8, ptr %0, i64 32 %33 = load i8, ptr %32, align 8, !tbaa !17, !range !23, !noundef !22 %34 = icmp eq i8 %33, 0 - br i1 %34, label %263, label %35 + br i1 %34, label %262, label %35 35: ; preds = %20 %36 = getelementptr i8, ptr %7, i64 -2 @@ -209,7 +209,7 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr 61: ; preds = %50 %62 = add nsw i64 %43, -1 %63 = icmp ult i64 %62, 8 - br i1 %63, label %226, label %64 + br i1 %63, label %225, label %64 64: ; preds = %61 %65 = add nsw i64 %43, -2 @@ -221,7 +221,7 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr %71 = getelementptr i8, ptr %68, i64 %69 %72 = icmp ult ptr %71, %68 %73 = or i1 %70, %72 - br i1 %73, label %226, label %74 + br i1 %73, label %225, label %74 74: ; preds = %64 %75 = or disjoint i64 %66, 4 @@ -235,7 +235,7 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr %83 = icmp ult ptr %76, %82 %84 = icmp ult ptr %7, %79 %85 = and i1 %83, %84 - br i1 %85, label %226, label %86 + br i1 %85, label %225, label %86 86: ; preds = %74 %87 = icmp ult i64 %62, 16 @@ -356,7 +356,7 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr %161 = or disjoint i64 %89, 1 %162 = and i64 %62, 8 %163 = icmp eq i64 %162, 0 - br i1 %163, label %226, label %164 + br i1 %163, label %225, label %164 164: ; preds = %160, %86 %165 = phi i64 [ %161, %160 ], [ 1, %86 ] @@ -371,8 +371,8 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr br label %174 174: ; preds = %174, %164 - %175 = phi i64 [ %166, %164 ], [ %220, %174 ] - %176 = phi <8 x i64> [ %170, %164 ], [ %221, %174 ] + %175 = phi i64 [ %166, %164 ], [ %219, %174 ] + %176 = phi <8 x i64> [ %170, %164 ], [ %220, %174 ] %177 = or disjoint i64 %175, 1 %178 = getelementptr inbounds i16, ptr %7, i64 %177 %179 = load <8 x i16>, ptr %178, align 2, !tbaa !18, !alias.scope !32 @@ -409,688 +409,687 @@ define hidden void @_ZN8rawspeed11TableLookUp8setTableEiRKSt6vectorItSaItEE(ptr %202 = lshr <8 x i32> %201, %203 = sub nsw <8 x i32> %180, %202 %204 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %203, <8 x i32> zeroinitializer) - %205 = trunc <8 x i32> %204 to <8 x i16> - %206 = shl nuw nsw i64 %177, 1 - %207 = icmp ult <8 x i64> %176, - %208 = extractelement <8 x i1> %207, i64 0 + %205 = shl nuw nsw i64 %177, 1 + %206 = icmp ult <8 x i64> %176, + %207 = extractelement <8 x i1> %206, i64 0 + tail call void @llvm.assume(i1 %207) + %208 = extractelement <8 x i1> %206, i64 1 tail call void @llvm.assume(i1 %208) - %209 = extractelement <8 x i1> %207, i64 1 + %209 = extractelement <8 x i1> %206, i64 2 tail call void @llvm.assume(i1 %209) - %210 = extractelement <8 x i1> %207, i64 2 + %210 = extractelement <8 x i1> %206, i64 3 tail call void @llvm.assume(i1 %210) - %211 = extractelement <8 x i1> %207, i64 3 + %211 = extractelement <8 x i1> %206, i64 4 tail call void @llvm.assume(i1 %211) - %212 = extractelement <8 x i1> %207, i64 4 + %212 = extractelement <8 x i1> %206, i64 5 tail call void @llvm.assume(i1 %212) - %213 = extractelement <8 x i1> %207, i64 5 + %213 = extractelement <8 x i1> %206, i64 6 tail call void @llvm.assume(i1 %213) - %214 = extractelement <8 x i1> %207, i64 6 + %214 = extractelement <8 x i1> %206, i64 7 tail call void @llvm.assume(i1 %214) - %215 = extractelement <8 x i1> %207, i64 7 - tail call void @llvm.assume(i1 %215) - %216 = trunc <8 x i32> %191 to <8 x i16> - %217 = or disjoint i64 %206, 1 - %218 = getelementptr i16, ptr %173, i64 %217 - %219 = shufflevector <8 x i16> %205, <8 x i16> %216, <16 x i32> - store <16 x i16> %219, ptr %218, align 2, !tbaa !18 - %220 = add nuw i64 %175, 8 - %221 = add <8 x i64> %176, - %222 = icmp eq i64 %220, %167 - br i1 %222, label %223, label %174, !llvm.loop !35 - -223: ; preds = %174 - %224 = or disjoint i64 %167, 1 - %225 = icmp eq i64 %62, %167 - br i1 %225, label %.loopexit20, label %226 - -226: ; preds = %223, %160, %74, %64, %61 - %227 = phi i64 [ 1, %61 ], [ 1, %74 ], [ 1, %64 ], [ %161, %160 ], [ %224, %223 ] - %228 = add i64 %227, 1 - %229 = and i64 %11, 2 - %230 = icmp eq i64 %229, 0 - br i1 %230, label %231, label %260 - -231: ; preds = %226 - %232 = getelementptr inbounds i16, ptr %7, i64 %227 - %233 = load i16, ptr %232, align 2, !tbaa !18 - %234 = zext i16 %233 to i32 - %235 = getelementptr i16, ptr %36, i64 %227 - %236 = load i16, ptr %235, align 2, !tbaa !18 - %237 = icmp slt i64 %227, %41 - br i1 %237, label %238, label %242 - -238: ; preds = %231 - %239 = getelementptr i16, ptr %37, i64 %227 - %240 = load i16, ptr %239, align 2, !tbaa !18 - %241 = zext i16 %240 to i32 - br label %242 - -242: ; preds = %238, %231 - %243 = phi i32 [ %241, %238 ], [ %234, %231 ] - %244 = tail call i16 @llvm.umin.i16(i16 %236, i16 %233) - %245 = zext i16 %244 to i32 - %246 = tail call i32 @llvm.umax.i32(i32 %243, i32 %234) - %247 = sub nsw i32 %246, %245 - %248 = icmp sgt i32 %247, -1 - tail call void @llvm.assume(i1 %248) - %249 = add nuw nsw i32 %247, 2 - %250 = lshr i32 %249, 2 - %251 = sub nsw i32 %234, %250 - %252 = tail call i32 @llvm.smax.i32(i32 %251, i32 0) - %253 = trunc i32 %252 to i16 - %254 = shl nuw nsw i64 %227, 1 - %255 = icmp ult i64 %227, 65536 - tail call void @llvm.assume(i1 %255) - %256 = getelementptr inbounds i16, ptr %31, i64 %254 - store i16 %253, ptr %256, align 2, !tbaa !18 - %257 = trunc i32 %247 to i16 - %258 = or disjoint i64 %254, 1 - %259 = getelementptr inbounds i16, ptr %31, i64 %258 - store i16 %257, ptr %259, align 2, !tbaa !18 - br label %260 - -260: ; preds = %242, %226 - %261 = phi i64 [ %227, %226 ], [ %228, %242 ] - %262 = icmp eq i64 %43, %228 - br i1 %262, label %.loopexit20, label %.preheader19 - -263: ; preds = %20 - %264 = shl i64 %11, 31 - %265 = add i64 %264, -4294967296 - %266 = ashr i64 %265, 32 - %267 = ashr i64 %264, 32 - %268 = shl nuw nsw i64 %30, 1 - %269 = or disjoint i64 %268, 131072 - %270 = getelementptr i8, ptr %22, i64 %269 - %271 = getelementptr i8, ptr %7, i64 131072 - %272 = shl nsw i64 %266, 1 - %273 = getelementptr i8, ptr %7, i64 %272 - %274 = getelementptr i8, ptr %273, i64 2 - %275 = icmp ult ptr %31, %271 - %276 = icmp ult ptr %7, %270 - %277 = and i1 %275, %276 - %278 = icmp ult ptr %31, %274 - %279 = icmp ult ptr %273, %270 - %280 = and i1 %278, %279 - %281 = or i1 %277, %280 - br i1 %281, label %.preheader, label %282 - -282: ; preds = %263 - %283 = insertelement <16 x i64> poison, i64 %267, i64 0 - %284 = shufflevector <16 x i64> %283, <16 x i64> poison, <16 x i32> zeroinitializer - %285 = insertelement <16 x i64> poison, i64 %266, i64 0 - %286 = shufflevector <16 x i64> %285, <16 x i64> poison, <16 x i32> zeroinitializer - br label %287 - -287: ; preds = %287, %282 - %288 = phi i64 [ 0, %282 ], [ %357, %287 ] - %289 = phi <16 x i64> [ , %282 ], [ %358, %287 ] - %290 = icmp slt <16 x i64> %289, %284 - %291 = select <16 x i1> %290, <16 x i64> %289, <16 x i64> %286 - %292 = extractelement <16 x i64> %291, i64 0 - %293 = getelementptr inbounds i16, ptr %7, i64 %292 - %294 = extractelement <16 x i64> %291, i64 1 - %295 = getelementptr inbounds i16, ptr %7, i64 %294 - %296 = extractelement <16 x i64> %291, i64 2 - %297 = getelementptr inbounds i16, ptr %7, i64 %296 - %298 = extractelement <16 x i64> %291, i64 3 - %299 = getelementptr inbounds i16, ptr %7, i64 %298 - %300 = extractelement <16 x i64> %291, i64 4 - %301 = getelementptr inbounds i16, ptr %7, i64 %300 - %302 = extractelement <16 x i64> %291, i64 5 - %303 = getelementptr inbounds i16, ptr %7, i64 %302 - %304 = extractelement <16 x i64> %291, i64 6 - %305 = getelementptr inbounds i16, ptr %7, i64 %304 - %306 = extractelement <16 x i64> %291, i64 7 - %307 = getelementptr inbounds i16, ptr %7, i64 %306 - %308 = extractelement <16 x i64> %291, i64 8 - %309 = getelementptr inbounds i16, ptr %7, i64 %308 - %310 = extractelement <16 x i64> %291, i64 9 - %311 = getelementptr inbounds i16, ptr %7, i64 %310 - %312 = extractelement <16 x i64> %291, i64 10 - %313 = getelementptr inbounds i16, ptr %7, i64 %312 - %314 = extractelement <16 x i64> %291, i64 11 - %315 = getelementptr inbounds i16, ptr %7, i64 %314 - %316 = extractelement <16 x i64> %291, i64 12 - %317 = getelementptr inbounds i16, ptr %7, i64 %316 - %318 = extractelement <16 x i64> %291, i64 13 - %319 = getelementptr inbounds i16, ptr %7, i64 %318 - %320 = extractelement <16 x i64> %291, i64 14 - %321 = getelementptr inbounds i16, ptr %7, i64 %320 - %322 = extractelement <16 x i64> %291, i64 15 - %323 = getelementptr inbounds i16, ptr %7, i64 %322 - %324 = load i16, ptr %293, align 2, !tbaa !18, !alias.scope !36 - %325 = load i16, ptr %295, align 2, !tbaa !18, !alias.scope !36 - %326 = load i16, ptr %297, align 2, !tbaa !18, !alias.scope !36 - %327 = load i16, ptr %299, align 2, !tbaa !18, !alias.scope !36 - %328 = load i16, ptr %301, align 2, !tbaa !18, !alias.scope !36 - %329 = load i16, ptr %303, align 2, !tbaa !18, !alias.scope !36 - %330 = load i16, ptr %305, align 2, !tbaa !18, !alias.scope !36 - %331 = load i16, ptr %307, align 2, !tbaa !18, !alias.scope !36 - %332 = load i16, ptr %309, align 2, !tbaa !18, !alias.scope !36 - %333 = load i16, ptr %311, align 2, !tbaa !18, !alias.scope !36 - %334 = load i16, ptr %313, align 2, !tbaa !18, !alias.scope !36 - %335 = load i16, ptr %315, align 2, !tbaa !18, !alias.scope !36 - %336 = load i16, ptr %317, align 2, !tbaa !18, !alias.scope !36 - %337 = load i16, ptr %319, align 2, !tbaa !18, !alias.scope !36 - %338 = load i16, ptr %321, align 2, !tbaa !18, !alias.scope !36 - %339 = load i16, ptr %323, align 2, !tbaa !18, !alias.scope !36 - %340 = insertelement <16 x i16> poison, i16 %324, i64 0 - %341 = insertelement <16 x i16> %340, i16 %325, i64 1 - %342 = insertelement <16 x i16> %341, i16 %326, i64 2 - %343 = insertelement <16 x i16> %342, i16 %327, i64 3 - %344 = insertelement <16 x i16> %343, i16 %328, i64 4 - %345 = insertelement <16 x i16> %344, i16 %329, i64 5 - %346 = insertelement <16 x i16> %345, i16 %330, i64 6 - %347 = insertelement <16 x i16> %346, i16 %331, i64 7 - %348 = insertelement <16 x i16> %347, i16 %332, i64 8 - %349 = insertelement <16 x i16> %348, i16 %333, i64 9 - %350 = insertelement <16 x i16> %349, i16 %334, i64 10 - %351 = insertelement <16 x i16> %350, i16 %335, i64 11 - %352 = insertelement <16 x i16> %351, i16 %336, i64 12 - %353 = insertelement <16 x i16> %352, i16 %337, i64 13 - %354 = insertelement <16 x i16> %353, i16 %338, i64 14 - %355 = insertelement <16 x i16> %354, i16 %339, i64 15 - %356 = getelementptr inbounds i16, ptr %31, i64 %288 - store <16 x i16> %355, ptr %356, align 2, !tbaa !18, !alias.scope !39, !noalias !41 - %357 = add nuw nsw i64 %288, 16 - %358 = add <16 x i64> %289, - %359 = icmp eq i64 %357, 65536 - br i1 %359, label %.loopexit, label %287, !llvm.loop !43 - -.preheader: ; preds = %263, %.preheader - %360 = phi i64 [ %408, %.preheader ], [ 0, %263 ] - %361 = icmp slt i64 %360, %267 - %362 = select i1 %361, i64 %360, i64 %266 - %363 = getelementptr inbounds i16, ptr %7, i64 %362 - %364 = load i16, ptr %363, align 2, !tbaa !18 - %365 = getelementptr inbounds i16, ptr %31, i64 %360 - store i16 %364, ptr %365, align 2, !tbaa !18 - %366 = or disjoint i64 %360, 1 - %367 = icmp slt i64 %366, %267 - %368 = select i1 %367, i64 %366, i64 %266 - %369 = getelementptr inbounds i16, ptr %7, i64 %368 - %370 = load i16, ptr %369, align 2, !tbaa !18 - %371 = getelementptr inbounds i16, ptr %31, i64 %366 - store i16 %370, ptr %371, align 2, !tbaa !18 - %372 = or disjoint i64 %360, 2 - %373 = icmp slt i64 %372, %267 - %374 = select i1 %373, i64 %372, i64 %266 - %375 = getelementptr inbounds i16, ptr %7, i64 %374 - %376 = load i16, ptr %375, align 2, !tbaa !18 - %377 = getelementptr inbounds i16, ptr %31, i64 %372 - store i16 %376, ptr %377, align 2, !tbaa !18 - %378 = or disjoint i64 %360, 3 - %379 = icmp slt i64 %378, %267 - %380 = select i1 %379, i64 %378, i64 %266 - %381 = getelementptr inbounds i16, ptr %7, i64 %380 - %382 = load i16, ptr %381, align 2, !tbaa !18 - %383 = getelementptr inbounds i16, ptr %31, i64 %378 - store i16 %382, ptr %383, align 2, !tbaa !18 - %384 = or disjoint i64 %360, 4 - %385 = icmp slt i64 %384, %267 - %386 = select i1 %385, i64 %384, i64 %266 - %387 = getelementptr inbounds i16, ptr %7, i64 %386 - %388 = load i16, ptr %387, align 2, !tbaa !18 - %389 = getelementptr inbounds i16, ptr %31, i64 %384 - store i16 %388, ptr %389, align 2, !tbaa !18 - %390 = or disjoint i64 %360, 5 - %391 = icmp slt i64 %390, %267 - %392 = select i1 %391, i64 %390, i64 %266 - %393 = getelementptr inbounds i16, ptr %7, i64 %392 - %394 = load i16, ptr %393, align 2, !tbaa !18 - %395 = getelementptr inbounds i16, ptr %31, i64 %390 - store i16 %394, ptr %395, align 2, !tbaa !18 - %396 = or disjoint i64 %360, 6 - %397 = icmp slt i64 %396, %267 - %398 = select i1 %397, i64 %396, i64 %266 - %399 = getelementptr inbounds i16, ptr %7, i64 %398 - %400 = load i16, ptr %399, align 2, !tbaa !18 - %401 = getelementptr inbounds i16, ptr %31, i64 %396 - store i16 %400, ptr %401, align 2, !tbaa !18 - %402 = or disjoint i64 %360, 7 - %403 = icmp slt i64 %402, %267 - %404 = select i1 %403, i64 %402, i64 %266 - %405 = getelementptr inbounds i16, ptr %7, i64 %404 - %406 = load i16, ptr %405, align 2, !tbaa !18 - %407 = getelementptr inbounds i16, ptr %31, i64 %402 - store i16 %406, ptr %407, align 2, !tbaa !18 - %408 = add nuw nsw i64 %360, 8 - %409 = icmp eq i64 %408, 65536 - br i1 %409, label %.loopexit, label %.preheader, !llvm.loop !44 - -.loopexit20: ; preds = %643, %260, %223, %158, %50 - %410 = icmp eq i32 %13, 65536 - br i1 %410, label %.loopexit, label %._crit_edge + %215 = or disjoint i64 %205, 1 + %216 = getelementptr i16, ptr %173, i64 %215 + %217 = shufflevector <8 x i32> %204, <8 x i32> %191, <16 x i32> + %218 = trunc <16 x i32> %217 to <16 x i16> + store <16 x i16> %218, ptr %216, align 2, !tbaa !18 + %219 = add nuw i64 %175, 8 + %220 = add <8 x i64> %176, + %221 = icmp eq i64 %219, %167 + br i1 %221, label %222, label %174, !llvm.loop !35 + +222: ; preds = %174 + %223 = or disjoint i64 %167, 1 + %224 = icmp eq i64 %62, %167 + br i1 %224, label %.loopexit20, label %225 + +225: ; preds = %222, %160, %74, %64, %61 + %226 = phi i64 [ 1, %61 ], [ 1, %74 ], [ 1, %64 ], [ %161, %160 ], [ %223, %222 ] + %227 = add i64 %226, 1 + %228 = and i64 %11, 2 + %229 = icmp eq i64 %228, 0 + br i1 %229, label %230, label %259 + +230: ; preds = %225 + %231 = getelementptr inbounds i16, ptr %7, i64 %226 + %232 = load i16, ptr %231, align 2, !tbaa !18 + %233 = zext i16 %232 to i32 + %234 = getelementptr i16, ptr %36, i64 %226 + %235 = load i16, ptr %234, align 2, !tbaa !18 + %236 = icmp slt i64 %226, %41 + br i1 %236, label %237, label %241 + +237: ; preds = %230 + %238 = getelementptr i16, ptr %37, i64 %226 + %239 = load i16, ptr %238, align 2, !tbaa !18 + %240 = zext i16 %239 to i32 + br label %241 + +241: ; preds = %237, %230 + %242 = phi i32 [ %240, %237 ], [ %233, %230 ] + %243 = tail call i16 @llvm.umin.i16(i16 %235, i16 %232) + %244 = zext i16 %243 to i32 + %245 = tail call i32 @llvm.umax.i32(i32 %242, i32 %233) + %246 = sub nsw i32 %245, %244 + %247 = icmp sgt i32 %246, -1 + tail call void @llvm.assume(i1 %247) + %248 = add nuw nsw i32 %246, 2 + %249 = lshr i32 %248, 2 + %250 = sub nsw i32 %233, %249 + %251 = tail call i32 @llvm.smax.i32(i32 %250, i32 0) + %252 = trunc i32 %251 to i16 + %253 = shl nuw nsw i64 %226, 1 + %254 = icmp ult i64 %226, 65536 + tail call void @llvm.assume(i1 %254) + %255 = getelementptr inbounds i16, ptr %31, i64 %253 + store i16 %252, ptr %255, align 2, !tbaa !18 + %256 = trunc i32 %246 to i16 + %257 = or disjoint i64 %253, 1 + %258 = getelementptr inbounds i16, ptr %31, i64 %257 + store i16 %256, ptr %258, align 2, !tbaa !18 + br label %259 + +259: ; preds = %241, %225 + %260 = phi i64 [ %226, %225 ], [ %227, %241 ] + %261 = icmp eq i64 %43, %227 + br i1 %261, label %.loopexit20, label %.preheader19 + +262: ; preds = %20 + %263 = shl i64 %11, 31 + %264 = add i64 %263, -4294967296 + %265 = ashr i64 %264, 32 + %266 = ashr i64 %263, 32 + %267 = shl nuw nsw i64 %30, 1 + %268 = or disjoint i64 %267, 131072 + %269 = getelementptr i8, ptr %22, i64 %268 + %270 = getelementptr i8, ptr %7, i64 131072 + %271 = shl nsw i64 %265, 1 + %272 = getelementptr i8, ptr %7, i64 %271 + %273 = getelementptr i8, ptr %272, i64 2 + %274 = icmp ult ptr %31, %270 + %275 = icmp ult ptr %7, %269 + %276 = and i1 %274, %275 + %277 = icmp ult ptr %31, %273 + %278 = icmp ult ptr %272, %269 + %279 = and i1 %277, %278 + %280 = or i1 %276, %279 + br i1 %280, label %.preheader, label %281 + +281: ; preds = %262 + %282 = insertelement <16 x i64> poison, i64 %266, i64 0 + %283 = shufflevector <16 x i64> %282, <16 x i64> poison, <16 x i32> zeroinitializer + %284 = insertelement <16 x i64> poison, i64 %265, i64 0 + %285 = shufflevector <16 x i64> %284, <16 x i64> poison, <16 x i32> zeroinitializer + br label %286 + +286: ; preds = %286, %281 + %287 = phi i64 [ 0, %281 ], [ %356, %286 ] + %288 = phi <16 x i64> [ , %281 ], [ %357, %286 ] + %289 = icmp slt <16 x i64> %288, %283 + %290 = select <16 x i1> %289, <16 x i64> %288, <16 x i64> %285 + %291 = extractelement <16 x i64> %290, i64 0 + %292 = getelementptr inbounds i16, ptr %7, i64 %291 + %293 = extractelement <16 x i64> %290, i64 1 + %294 = getelementptr inbounds i16, ptr %7, i64 %293 + %295 = extractelement <16 x i64> %290, i64 2 + %296 = getelementptr inbounds i16, ptr %7, i64 %295 + %297 = extractelement <16 x i64> %290, i64 3 + %298 = getelementptr inbounds i16, ptr %7, i64 %297 + %299 = extractelement <16 x i64> %290, i64 4 + %300 = getelementptr inbounds i16, ptr %7, i64 %299 + %301 = extractelement <16 x i64> %290, i64 5 + %302 = getelementptr inbounds i16, ptr %7, i64 %301 + %303 = extractelement <16 x i64> %290, i64 6 + %304 = getelementptr inbounds i16, ptr %7, i64 %303 + %305 = extractelement <16 x i64> %290, i64 7 + %306 = getelementptr inbounds i16, ptr %7, i64 %305 + %307 = extractelement <16 x i64> %290, i64 8 + %308 = getelementptr inbounds i16, ptr %7, i64 %307 + %309 = extractelement <16 x i64> %290, i64 9 + %310 = getelementptr inbounds i16, ptr %7, i64 %309 + %311 = extractelement <16 x i64> %290, i64 10 + %312 = getelementptr inbounds i16, ptr %7, i64 %311 + %313 = extractelement <16 x i64> %290, i64 11 + %314 = getelementptr inbounds i16, ptr %7, i64 %313 + %315 = extractelement <16 x i64> %290, i64 12 + %316 = getelementptr inbounds i16, ptr %7, i64 %315 + %317 = extractelement <16 x i64> %290, i64 13 + %318 = getelementptr inbounds i16, ptr %7, i64 %317 + %319 = extractelement <16 x i64> %290, i64 14 + %320 = getelementptr inbounds i16, ptr %7, i64 %319 + %321 = extractelement <16 x i64> %290, i64 15 + %322 = getelementptr inbounds i16, ptr %7, i64 %321 + %323 = load i16, ptr %292, align 2, !tbaa !18, !alias.scope !36 + %324 = load i16, ptr %294, align 2, !tbaa !18, !alias.scope !36 + %325 = load i16, ptr %296, align 2, !tbaa !18, !alias.scope !36 + %326 = load i16, ptr %298, align 2, !tbaa !18, !alias.scope !36 + %327 = load i16, ptr %300, align 2, !tbaa !18, !alias.scope !36 + %328 = load i16, ptr %302, align 2, !tbaa !18, !alias.scope !36 + %329 = load i16, ptr %304, align 2, !tbaa !18, !alias.scope !36 + %330 = load i16, ptr %306, align 2, !tbaa !18, !alias.scope !36 + %331 = load i16, ptr %308, align 2, !tbaa !18, !alias.scope !36 + %332 = load i16, ptr %310, align 2, !tbaa !18, !alias.scope !36 + %333 = load i16, ptr %312, align 2, !tbaa !18, !alias.scope !36 + %334 = load i16, ptr %314, align 2, !tbaa !18, !alias.scope !36 + %335 = load i16, ptr %316, align 2, !tbaa !18, !alias.scope !36 + %336 = load i16, ptr %318, align 2, !tbaa !18, !alias.scope !36 + %337 = load i16, ptr %320, align 2, !tbaa !18, !alias.scope !36 + %338 = load i16, ptr %322, align 2, !tbaa !18, !alias.scope !36 + %339 = insertelement <16 x i16> poison, i16 %323, i64 0 + %340 = insertelement <16 x i16> %339, i16 %324, i64 1 + %341 = insertelement <16 x i16> %340, i16 %325, i64 2 + %342 = insertelement <16 x i16> %341, i16 %326, i64 3 + %343 = insertelement <16 x i16> %342, i16 %327, i64 4 + %344 = insertelement <16 x i16> %343, i16 %328, i64 5 + %345 = insertelement <16 x i16> %344, i16 %329, i64 6 + %346 = insertelement <16 x i16> %345, i16 %330, i64 7 + %347 = insertelement <16 x i16> %346, i16 %331, i64 8 + %348 = insertelement <16 x i16> %347, i16 %332, i64 9 + %349 = insertelement <16 x i16> %348, i16 %333, i64 10 + %350 = insertelement <16 x i16> %349, i16 %334, i64 11 + %351 = insertelement <16 x i16> %350, i16 %335, i64 12 + %352 = insertelement <16 x i16> %351, i16 %336, i64 13 + %353 = insertelement <16 x i16> %352, i16 %337, i64 14 + %354 = insertelement <16 x i16> %353, i16 %338, i64 15 + %355 = getelementptr inbounds i16, ptr %31, i64 %287 + store <16 x i16> %354, ptr %355, align 2, !tbaa !18, !alias.scope !39, !noalias !41 + %356 = add nuw nsw i64 %287, 16 + %357 = add <16 x i64> %288, + %358 = icmp eq i64 %356, 65536 + br i1 %358, label %.loopexit, label %286, !llvm.loop !43 + +.preheader: ; preds = %262, %.preheader + %359 = phi i64 [ %407, %.preheader ], [ 0, %262 ] + %360 = icmp slt i64 %359, %266 + %361 = select i1 %360, i64 %359, i64 %265 + %362 = getelementptr inbounds i16, ptr %7, i64 %361 + %363 = load i16, ptr %362, align 2, !tbaa !18 + %364 = getelementptr inbounds i16, ptr %31, i64 %359 + store i16 %363, ptr %364, align 2, !tbaa !18 + %365 = or disjoint i64 %359, 1 + %366 = icmp slt i64 %365, %266 + %367 = select i1 %366, i64 %365, i64 %265 + %368 = getelementptr inbounds i16, ptr %7, i64 %367 + %369 = load i16, ptr %368, align 2, !tbaa !18 + %370 = getelementptr inbounds i16, ptr %31, i64 %365 + store i16 %369, ptr %370, align 2, !tbaa !18 + %371 = or disjoint i64 %359, 2 + %372 = icmp slt i64 %371, %266 + %373 = select i1 %372, i64 %371, i64 %265 + %374 = getelementptr inbounds i16, ptr %7, i64 %373 + %375 = load i16, ptr %374, align 2, !tbaa !18 + %376 = getelementptr inbounds i16, ptr %31, i64 %371 + store i16 %375, ptr %376, align 2, !tbaa !18 + %377 = or disjoint i64 %359, 3 + %378 = icmp slt i64 %377, %266 + %379 = select i1 %378, i64 %377, i64 %265 + %380 = getelementptr inbounds i16, ptr %7, i64 %379 + %381 = load i16, ptr %380, align 2, !tbaa !18 + %382 = getelementptr inbounds i16, ptr %31, i64 %377 + store i16 %381, ptr %382, align 2, !tbaa !18 + %383 = or disjoint i64 %359, 4 + %384 = icmp slt i64 %383, %266 + %385 = select i1 %384, i64 %383, i64 %265 + %386 = getelementptr inbounds i16, ptr %7, i64 %385 + %387 = load i16, ptr %386, align 2, !tbaa !18 + %388 = getelementptr inbounds i16, ptr %31, i64 %383 + store i16 %387, ptr %388, align 2, !tbaa !18 + %389 = or disjoint i64 %359, 5 + %390 = icmp slt i64 %389, %266 + %391 = select i1 %390, i64 %389, i64 %265 + %392 = getelementptr inbounds i16, ptr %7, i64 %391 + %393 = load i16, ptr %392, align 2, !tbaa !18 + %394 = getelementptr inbounds i16, ptr %31, i64 %389 + store i16 %393, ptr %394, align 2, !tbaa !18 + %395 = or disjoint i64 %359, 6 + %396 = icmp slt i64 %395, %266 + %397 = select i1 %396, i64 %395, i64 %265 + %398 = getelementptr inbounds i16, ptr %7, i64 %397 + %399 = load i16, ptr %398, align 2, !tbaa !18 + %400 = getelementptr inbounds i16, ptr %31, i64 %395 + store i16 %399, ptr %400, align 2, !tbaa !18 + %401 = or disjoint i64 %359, 7 + %402 = icmp slt i64 %401, %266 + %403 = select i1 %402, i64 %401, i64 %265 + %404 = getelementptr inbounds i16, ptr %7, i64 %403 + %405 = load i16, ptr %404, align 2, !tbaa !18 + %406 = getelementptr inbounds i16, ptr %31, i64 %401 + store i16 %405, ptr %406, align 2, !tbaa !18 + %407 = add nuw nsw i64 %359, 8 + %408 = icmp eq i64 %407, 65536 + br i1 %408, label %.loopexit, label %.preheader, !llvm.loop !44 + +.loopexit20: ; preds = %642, %259, %222, %158, %50 + %409 = icmp eq i32 %13, 65536 + br i1 %409, label %.loopexit, label %._crit_edge ._crit_edge: ; preds = %35, %.loopexit20 - %411 = getelementptr inbounds i16, ptr %7, i64 %41 - %412 = tail call i32 @llvm.smax.i32(i32 %13, i32 65535) - %413 = add nuw nsw i32 %412, 1 - %414 = sub i32 %413, %13 - %415 = icmp ult i32 %414, 8 - br i1 %415, label %582, label %416 - -416: ; preds = %._crit_edge - %417 = shl i64 %11, 1 - %418 = and i64 %417, 8589934588 - %419 = shl nuw nsw i64 %30, 1 - %420 = getelementptr i8, ptr %22, i64 %418 - %421 = getelementptr i8, ptr %420, i64 %419 - %422 = sub i32 %412, %13 - %423 = zext i32 %422 to i64 - %424 = shl nuw nsw i64 %423, 2 - %425 = getelementptr i8, ptr %22, i64 %424 + %410 = getelementptr inbounds i16, ptr %7, i64 %41 + %411 = tail call i32 @llvm.smax.i32(i32 %13, i32 65535) + %412 = add nuw nsw i32 %411, 1 + %413 = sub i32 %412, %13 + %414 = icmp ult i32 %413, 8 + br i1 %414, label %581, label %415 + +415: ; preds = %._crit_edge + %416 = shl i64 %11, 1 + %417 = and i64 %416, 8589934588 + %418 = shl nuw nsw i64 %30, 1 + %419 = getelementptr i8, ptr %22, i64 %417 + %420 = getelementptr i8, ptr %419, i64 %418 + %421 = sub i32 %411, %13 + %422 = zext i32 %421 to i64 + %423 = shl nuw nsw i64 %422, 2 + %424 = getelementptr i8, ptr %22, i64 %423 + %425 = getelementptr i8, ptr %424, i64 %417 %426 = getelementptr i8, ptr %425, i64 %418 - %427 = getelementptr i8, ptr %426, i64 %419 - %428 = getelementptr i8, ptr %427, i64 4 - %429 = shl nsw i64 %41, 1 - %430 = getelementptr i8, ptr %7, i64 %429 - %431 = getelementptr i8, ptr %430, i64 2 - %432 = icmp ult ptr %421, %431 - %433 = icmp ult ptr %411, %428 - %434 = and i1 %432, %433 - br i1 %434, label %582, label %435 - -435: ; preds = %416 - %436 = icmp ult i32 %414, 64 - br i1 %436, label %547, label %437 - -437: ; preds = %435 - %438 = and i32 %414, -64 - %439 = insertelement <16 x i32> poison, i32 %13, i64 0 - %440 = shufflevector <16 x i32> %439, <16 x i32> poison, <16 x i32> zeroinitializer - %441 = add <16 x i32> %440, - %442 = getelementptr i8, ptr %31, i64 -2 - br label %443 - -443: ; preds = %443, %437 - %444 = phi i32 [ 0, %437 ], [ %538, %443 ] - %445 = phi <16 x i32> [ %441, %437 ], [ %539, %443 ] - %446 = load i16, ptr %411, align 2, !tbaa !18, !alias.scope !45 - %447 = insertelement <16 x i16> poison, i16 %446, i64 0 - %448 = shufflevector <16 x i16> %447, <16 x i16> poison, <16 x i32> zeroinitializer - %449 = shl <16 x i32> %445, - %450 = add <16 x i32> %449, - %451 = add <16 x i32> %449, - %452 = add <16 x i32> %449, + %427 = getelementptr i8, ptr %426, i64 4 + %428 = shl nsw i64 %41, 1 + %429 = getelementptr i8, ptr %7, i64 %428 + %430 = getelementptr i8, ptr %429, i64 2 + %431 = icmp ult ptr %420, %430 + %432 = icmp ult ptr %410, %427 + %433 = and i1 %431, %432 + br i1 %433, label %581, label %434 + +434: ; preds = %415 + %435 = icmp ult i32 %413, 64 + br i1 %435, label %546, label %436 + +436: ; preds = %434 + %437 = and i32 %413, -64 + %438 = insertelement <16 x i32> poison, i32 %13, i64 0 + %439 = shufflevector <16 x i32> %438, <16 x i32> poison, <16 x i32> zeroinitializer + %440 = add <16 x i32> %439, + %441 = getelementptr i8, ptr %31, i64 -2 + br label %442 + +442: ; preds = %442, %436 + %443 = phi i32 [ 0, %436 ], [ %537, %442 ] + %444 = phi <16 x i32> [ %440, %436 ], [ %538, %442 ] + %445 = load i16, ptr %410, align 2, !tbaa !18, !alias.scope !45 + %446 = insertelement <16 x i16> poison, i16 %445, i64 0 + %447 = shufflevector <16 x i16> %446, <16 x i16> poison, <16 x i32> zeroinitializer + %448 = shl <16 x i32> %444, + %449 = add <16 x i32> %448, + %450 = add <16 x i32> %448, + %451 = add <16 x i32> %448, + %452 = icmp ult <16 x i32> %448, %453 = icmp ult <16 x i32> %449, %454 = icmp ult <16 x i32> %450, %455 = icmp ult <16 x i32> %451, - %456 = icmp ult <16 x i32> %452, - %457 = extractelement <16 x i1> %453, i64 0 + %456 = extractelement <16 x i1> %452, i64 0 + tail call void @llvm.assume(i1 %456) + %457 = extractelement <16 x i1> %452, i64 1 tail call void @llvm.assume(i1 %457) - %458 = extractelement <16 x i1> %453, i64 1 + %458 = extractelement <16 x i1> %452, i64 2 tail call void @llvm.assume(i1 %458) - %459 = extractelement <16 x i1> %453, i64 2 + %459 = extractelement <16 x i1> %452, i64 3 tail call void @llvm.assume(i1 %459) - %460 = extractelement <16 x i1> %453, i64 3 + %460 = extractelement <16 x i1> %452, i64 4 tail call void @llvm.assume(i1 %460) - %461 = extractelement <16 x i1> %453, i64 4 + %461 = extractelement <16 x i1> %452, i64 5 tail call void @llvm.assume(i1 %461) - %462 = extractelement <16 x i1> %453, i64 5 + %462 = extractelement <16 x i1> %452, i64 6 tail call void @llvm.assume(i1 %462) - %463 = extractelement <16 x i1> %453, i64 6 + %463 = extractelement <16 x i1> %452, i64 7 tail call void @llvm.assume(i1 %463) - %464 = extractelement <16 x i1> %453, i64 7 + %464 = extractelement <16 x i1> %452, i64 8 tail call void @llvm.assume(i1 %464) - %465 = extractelement <16 x i1> %453, i64 8 + %465 = extractelement <16 x i1> %452, i64 9 tail call void @llvm.assume(i1 %465) - %466 = extractelement <16 x i1> %453, i64 9 + %466 = extractelement <16 x i1> %452, i64 10 tail call void @llvm.assume(i1 %466) - %467 = extractelement <16 x i1> %453, i64 10 + %467 = extractelement <16 x i1> %452, i64 11 tail call void @llvm.assume(i1 %467) - %468 = extractelement <16 x i1> %453, i64 11 + %468 = extractelement <16 x i1> %452, i64 12 tail call void @llvm.assume(i1 %468) - %469 = extractelement <16 x i1> %453, i64 12 + %469 = extractelement <16 x i1> %452, i64 13 tail call void @llvm.assume(i1 %469) - %470 = extractelement <16 x i1> %453, i64 13 + %470 = extractelement <16 x i1> %452, i64 14 tail call void @llvm.assume(i1 %470) - %471 = extractelement <16 x i1> %453, i64 14 + %471 = extractelement <16 x i1> %452, i64 15 tail call void @llvm.assume(i1 %471) - %472 = extractelement <16 x i1> %453, i64 15 + %472 = extractelement <16 x i1> %453, i64 0 tail call void @llvm.assume(i1 %472) - %473 = extractelement <16 x i1> %454, i64 0 + %473 = extractelement <16 x i1> %453, i64 1 tail call void @llvm.assume(i1 %473) - %474 = extractelement <16 x i1> %454, i64 1 + %474 = extractelement <16 x i1> %453, i64 2 tail call void @llvm.assume(i1 %474) - %475 = extractelement <16 x i1> %454, i64 2 + %475 = extractelement <16 x i1> %453, i64 3 tail call void @llvm.assume(i1 %475) - %476 = extractelement <16 x i1> %454, i64 3 + %476 = extractelement <16 x i1> %453, i64 4 tail call void @llvm.assume(i1 %476) - %477 = extractelement <16 x i1> %454, i64 4 + %477 = extractelement <16 x i1> %453, i64 5 tail call void @llvm.assume(i1 %477) - %478 = extractelement <16 x i1> %454, i64 5 + %478 = extractelement <16 x i1> %453, i64 6 tail call void @llvm.assume(i1 %478) - %479 = extractelement <16 x i1> %454, i64 6 + %479 = extractelement <16 x i1> %453, i64 7 tail call void @llvm.assume(i1 %479) - %480 = extractelement <16 x i1> %454, i64 7 + %480 = extractelement <16 x i1> %453, i64 8 tail call void @llvm.assume(i1 %480) - %481 = extractelement <16 x i1> %454, i64 8 + %481 = extractelement <16 x i1> %453, i64 9 tail call void @llvm.assume(i1 %481) - %482 = extractelement <16 x i1> %454, i64 9 + %482 = extractelement <16 x i1> %453, i64 10 tail call void @llvm.assume(i1 %482) - %483 = extractelement <16 x i1> %454, i64 10 + %483 = extractelement <16 x i1> %453, i64 11 tail call void @llvm.assume(i1 %483) - %484 = extractelement <16 x i1> %454, i64 11 + %484 = extractelement <16 x i1> %453, i64 12 tail call void @llvm.assume(i1 %484) - %485 = extractelement <16 x i1> %454, i64 12 + %485 = extractelement <16 x i1> %453, i64 13 tail call void @llvm.assume(i1 %485) - %486 = extractelement <16 x i1> %454, i64 13 + %486 = extractelement <16 x i1> %453, i64 14 tail call void @llvm.assume(i1 %486) - %487 = extractelement <16 x i1> %454, i64 14 + %487 = extractelement <16 x i1> %453, i64 15 tail call void @llvm.assume(i1 %487) - %488 = extractelement <16 x i1> %454, i64 15 + %488 = extractelement <16 x i1> %454, i64 0 tail call void @llvm.assume(i1 %488) - %489 = extractelement <16 x i1> %455, i64 0 + %489 = extractelement <16 x i1> %454, i64 1 tail call void @llvm.assume(i1 %489) - %490 = extractelement <16 x i1> %455, i64 1 + %490 = extractelement <16 x i1> %454, i64 2 tail call void @llvm.assume(i1 %490) - %491 = extractelement <16 x i1> %455, i64 2 + %491 = extractelement <16 x i1> %454, i64 3 tail call void @llvm.assume(i1 %491) - %492 = extractelement <16 x i1> %455, i64 3 + %492 = extractelement <16 x i1> %454, i64 4 tail call void @llvm.assume(i1 %492) - %493 = extractelement <16 x i1> %455, i64 4 + %493 = extractelement <16 x i1> %454, i64 5 tail call void @llvm.assume(i1 %493) - %494 = extractelement <16 x i1> %455, i64 5 + %494 = extractelement <16 x i1> %454, i64 6 tail call void @llvm.assume(i1 %494) - %495 = extractelement <16 x i1> %455, i64 6 + %495 = extractelement <16 x i1> %454, i64 7 tail call void @llvm.assume(i1 %495) - %496 = extractelement <16 x i1> %455, i64 7 + %496 = extractelement <16 x i1> %454, i64 8 tail call void @llvm.assume(i1 %496) - %497 = extractelement <16 x i1> %455, i64 8 + %497 = extractelement <16 x i1> %454, i64 9 tail call void @llvm.assume(i1 %497) - %498 = extractelement <16 x i1> %455, i64 9 + %498 = extractelement <16 x i1> %454, i64 10 tail call void @llvm.assume(i1 %498) - %499 = extractelement <16 x i1> %455, i64 10 + %499 = extractelement <16 x i1> %454, i64 11 tail call void @llvm.assume(i1 %499) - %500 = extractelement <16 x i1> %455, i64 11 + %500 = extractelement <16 x i1> %454, i64 12 tail call void @llvm.assume(i1 %500) - %501 = extractelement <16 x i1> %455, i64 12 + %501 = extractelement <16 x i1> %454, i64 13 tail call void @llvm.assume(i1 %501) - %502 = extractelement <16 x i1> %455, i64 13 + %502 = extractelement <16 x i1> %454, i64 14 tail call void @llvm.assume(i1 %502) - %503 = extractelement <16 x i1> %455, i64 14 + %503 = extractelement <16 x i1> %454, i64 15 tail call void @llvm.assume(i1 %503) - %504 = extractelement <16 x i1> %455, i64 15 + %504 = extractelement <16 x i1> %455, i64 0 tail call void @llvm.assume(i1 %504) - %505 = extractelement <16 x i1> %456, i64 0 + %505 = extractelement <16 x i1> %455, i64 1 tail call void @llvm.assume(i1 %505) - %506 = extractelement <16 x i1> %456, i64 1 + %506 = extractelement <16 x i1> %455, i64 2 tail call void @llvm.assume(i1 %506) - %507 = extractelement <16 x i1> %456, i64 2 + %507 = extractelement <16 x i1> %455, i64 3 tail call void @llvm.assume(i1 %507) - %508 = extractelement <16 x i1> %456, i64 3 + %508 = extractelement <16 x i1> %455, i64 4 tail call void @llvm.assume(i1 %508) - %509 = extractelement <16 x i1> %456, i64 4 + %509 = extractelement <16 x i1> %455, i64 5 tail call void @llvm.assume(i1 %509) - %510 = extractelement <16 x i1> %456, i64 5 + %510 = extractelement <16 x i1> %455, i64 6 tail call void @llvm.assume(i1 %510) - %511 = extractelement <16 x i1> %456, i64 6 + %511 = extractelement <16 x i1> %455, i64 7 tail call void @llvm.assume(i1 %511) - %512 = extractelement <16 x i1> %456, i64 7 + %512 = extractelement <16 x i1> %455, i64 8 tail call void @llvm.assume(i1 %512) - %513 = extractelement <16 x i1> %456, i64 8 + %513 = extractelement <16 x i1> %455, i64 9 tail call void @llvm.assume(i1 %513) - %514 = extractelement <16 x i1> %456, i64 9 + %514 = extractelement <16 x i1> %455, i64 10 tail call void @llvm.assume(i1 %514) - %515 = extractelement <16 x i1> %456, i64 10 + %515 = extractelement <16 x i1> %455, i64 11 tail call void @llvm.assume(i1 %515) - %516 = extractelement <16 x i1> %456, i64 11 + %516 = extractelement <16 x i1> %455, i64 12 tail call void @llvm.assume(i1 %516) - %517 = extractelement <16 x i1> %456, i64 12 + %517 = extractelement <16 x i1> %455, i64 13 tail call void @llvm.assume(i1 %517) - %518 = extractelement <16 x i1> %456, i64 13 + %518 = extractelement <16 x i1> %455, i64 14 tail call void @llvm.assume(i1 %518) - %519 = extractelement <16 x i1> %456, i64 14 + %519 = extractelement <16 x i1> %455, i64 15 tail call void @llvm.assume(i1 %519) - %520 = extractelement <16 x i1> %456, i64 15 - tail call void @llvm.assume(i1 %520) - %521 = extractelement <16 x i32> %449, i64 0 - %522 = or disjoint i32 %521, 1 - %523 = extractelement <16 x i32> %450, i64 0 - %524 = or disjoint i32 %523, 1 - %525 = extractelement <16 x i32> %451, i64 0 - %526 = or disjoint i32 %525, 1 - %527 = extractelement <16 x i32> %452, i64 0 - %528 = or disjoint i32 %527, 1 - %529 = zext nneg i32 %522 to i64 - %530 = zext nneg i32 %524 to i64 - %531 = zext nneg i32 %526 to i64 - %532 = zext nneg i32 %528 to i64 - %533 = getelementptr i16, ptr %442, i64 %529 - %534 = getelementptr i16, ptr %442, i64 %530 - %535 = getelementptr i16, ptr %442, i64 %531 - %536 = getelementptr i16, ptr %442, i64 %532 - %537 = shufflevector <16 x i16> %448, <16 x i16> zeroinitializer, <32 x i32> - store <32 x i16> %537, ptr %533, align 2, !tbaa !18 - store <32 x i16> %537, ptr %534, align 2, !tbaa !18 - store <32 x i16> %537, ptr %535, align 2, !tbaa !18 - store <32 x i16> %537, ptr %536, align 2, !tbaa !18 - %538 = add nuw i32 %444, 64 - %539 = add <16 x i32> %445, - %540 = icmp eq i32 %538, %438 - br i1 %540, label %541, label %443, !llvm.loop !48 - -541: ; preds = %443 - %542 = icmp eq i32 %414, %438 - br i1 %542, label %.loopexit, label %543 - -543: ; preds = %541 - %544 = add i32 %438, %13 - %545 = and i32 %414, 56 - %546 = icmp eq i32 %545, 0 - br i1 %546, label %582, label %547 - -547: ; preds = %543, %435 - %548 = phi i32 [ %544, %543 ], [ %13, %435 ] - %549 = phi i32 [ %438, %543 ], [ 0, %435 ] - %550 = and i32 %414, -8 - %551 = insertelement <8 x i32> poison, i32 %548, i64 0 - %552 = shufflevector <8 x i32> %551, <8 x i32> poison, <8 x i32> zeroinitializer - %553 = add <8 x i32> %552, - %554 = getelementptr i8, ptr %31, i64 -2 - br label %555 - -555: ; preds = %555, %547 - %556 = phi i32 [ %549, %547 ], [ %576, %555 ] - %557 = phi <8 x i32> [ %553, %547 ], [ %577, %555 ] - %558 = load i16, ptr %411, align 2, !tbaa !18, !alias.scope !49 - %559 = insertelement <8 x i16> poison, i16 %558, i64 0 - %560 = shufflevector <8 x i16> %559, <8 x i16> poison, <8 x i32> zeroinitializer - %561 = shl nsw <8 x i32> %557, - %562 = icmp ult <8 x i32> %561, - %563 = extractelement <8 x i1> %562, i64 0 + %520 = extractelement <16 x i32> %448, i64 0 + %521 = or disjoint i32 %520, 1 + %522 = extractelement <16 x i32> %449, i64 0 + %523 = or disjoint i32 %522, 1 + %524 = extractelement <16 x i32> %450, i64 0 + %525 = or disjoint i32 %524, 1 + %526 = extractelement <16 x i32> %451, i64 0 + %527 = or disjoint i32 %526, 1 + %528 = zext nneg i32 %521 to i64 + %529 = zext nneg i32 %523 to i64 + %530 = zext nneg i32 %525 to i64 + %531 = zext nneg i32 %527 to i64 + %532 = getelementptr i16, ptr %441, i64 %528 + %533 = getelementptr i16, ptr %441, i64 %529 + %534 = getelementptr i16, ptr %441, i64 %530 + %535 = getelementptr i16, ptr %441, i64 %531 + %536 = shufflevector <16 x i16> %447, <16 x i16> zeroinitializer, <32 x i32> + store <32 x i16> %536, ptr %532, align 2, !tbaa !18 + store <32 x i16> %536, ptr %533, align 2, !tbaa !18 + store <32 x i16> %536, ptr %534, align 2, !tbaa !18 + store <32 x i16> %536, ptr %535, align 2, !tbaa !18 + %537 = add nuw i32 %443, 64 + %538 = add <16 x i32> %444, + %539 = icmp eq i32 %537, %437 + br i1 %539, label %540, label %442, !llvm.loop !48 + +540: ; preds = %442 + %541 = icmp eq i32 %413, %437 + br i1 %541, label %.loopexit, label %542 + +542: ; preds = %540 + %543 = add i32 %437, %13 + %544 = and i32 %413, 56 + %545 = icmp eq i32 %544, 0 + br i1 %545, label %581, label %546 + +546: ; preds = %542, %434 + %547 = phi i32 [ %543, %542 ], [ %13, %434 ] + %548 = phi i32 [ %437, %542 ], [ 0, %434 ] + %549 = and i32 %413, -8 + %550 = insertelement <8 x i32> poison, i32 %547, i64 0 + %551 = shufflevector <8 x i32> %550, <8 x i32> poison, <8 x i32> zeroinitializer + %552 = add <8 x i32> %551, + %553 = getelementptr i8, ptr %31, i64 -2 + br label %554 + +554: ; preds = %554, %546 + %555 = phi i32 [ %548, %546 ], [ %575, %554 ] + %556 = phi <8 x i32> [ %552, %546 ], [ %576, %554 ] + %557 = load i16, ptr %410, align 2, !tbaa !18, !alias.scope !49 + %558 = insertelement <8 x i16> poison, i16 %557, i64 0 + %559 = shufflevector <8 x i16> %558, <8 x i16> poison, <8 x i32> zeroinitializer + %560 = shl nsw <8 x i32> %556, + %561 = icmp ult <8 x i32> %560, + %562 = extractelement <8 x i1> %561, i64 0 + tail call void @llvm.assume(i1 %562) + %563 = extractelement <8 x i1> %561, i64 1 tail call void @llvm.assume(i1 %563) - %564 = extractelement <8 x i1> %562, i64 1 + %564 = extractelement <8 x i1> %561, i64 2 tail call void @llvm.assume(i1 %564) - %565 = extractelement <8 x i1> %562, i64 2 + %565 = extractelement <8 x i1> %561, i64 3 tail call void @llvm.assume(i1 %565) - %566 = extractelement <8 x i1> %562, i64 3 + %566 = extractelement <8 x i1> %561, i64 4 tail call void @llvm.assume(i1 %566) - %567 = extractelement <8 x i1> %562, i64 4 + %567 = extractelement <8 x i1> %561, i64 5 tail call void @llvm.assume(i1 %567) - %568 = extractelement <8 x i1> %562, i64 5 + %568 = extractelement <8 x i1> %561, i64 6 tail call void @llvm.assume(i1 %568) - %569 = extractelement <8 x i1> %562, i64 6 + %569 = extractelement <8 x i1> %561, i64 7 tail call void @llvm.assume(i1 %569) - %570 = extractelement <8 x i1> %562, i64 7 - tail call void @llvm.assume(i1 %570) - %571 = extractelement <8 x i32> %561, i64 0 - %572 = or disjoint i32 %571, 1 - %573 = zext nneg i32 %572 to i64 - %574 = getelementptr i16, ptr %554, i64 %573 - %575 = shufflevector <8 x i16> %560, <8 x i16> zeroinitializer, <16 x i32> - store <16 x i16> %575, ptr %574, align 2, !tbaa !18 - %576 = add nuw i32 %556, 8 - %577 = add <8 x i32> %557, - %578 = icmp eq i32 %576, %550 - br i1 %578, label %579, label %555, !llvm.loop !52 - -579: ; preds = %555 - %580 = add i32 %550, %13 - %581 = icmp eq i32 %414, %550 - br i1 %581, label %.loopexit, label %582 - -582: ; preds = %579, %543, %416, %._crit_edge - %583 = phi i32 [ %13, %._crit_edge ], [ %13, %416 ], [ %544, %543 ], [ %580, %579 ] - %584 = sub i32 %413, %583 - %585 = sub i32 %412, %583 - %586 = and i32 %584, 3 - %587 = icmp eq i32 %586, 0 - br i1 %587, label %.loopexit18, label %.preheader17 - -.preheader17: ; preds = %582, %.preheader17 - %588 = phi i32 [ %598, %.preheader17 ], [ %583, %582 ] - %589 = phi i32 [ %599, %.preheader17 ], [ 0, %582 ] - %590 = load i16, ptr %411, align 2, !tbaa !18 - %591 = shl nsw i32 %588, 1 - %592 = icmp ult i32 %591, 131072 - tail call void @llvm.assume(i1 %592) - %593 = zext nneg i32 %591 to i64 - %594 = getelementptr inbounds i16, ptr %31, i64 %593 - store i16 %590, ptr %594, align 2, !tbaa !18 - %595 = or disjoint i32 %591, 1 - %596 = zext nneg i32 %595 to i64 - %597 = getelementptr inbounds i16, ptr %31, i64 %596 - store i16 0, ptr %597, align 2, !tbaa !18 - %598 = add i32 %588, 1 - %599 = add nuw nsw i32 %589, 1 - %600 = icmp eq i32 %599, %586 - br i1 %600, label %.loopexit18, label %.preheader17, !llvm.loop !53 - -.loopexit18: ; preds = %.preheader17, %582 - %601 = phi i32 [ %583, %582 ], [ %598, %.preheader17 ] - %602 = icmp ult i32 %585, 3 - br i1 %602, label %.loopexit, label %.preheader15 - -.preheader19: ; preds = %260, %643 - %603 = phi i64 [ %661, %643 ], [ %261, %260 ] - %604 = getelementptr inbounds i16, ptr %7, i64 %603 - %605 = load i16, ptr %604, align 2, !tbaa !18 - %606 = zext i16 %605 to i32 - %607 = getelementptr i16, ptr %36, i64 %603 - %608 = load i16, ptr %607, align 2, !tbaa !18 - %609 = icmp slt i64 %603, %41 - br i1 %609, label %610, label %614 - -610: ; preds = %.preheader19 - %611 = getelementptr i16, ptr %37, i64 %603 - %612 = load i16, ptr %611, align 2, !tbaa !18 - %613 = zext i16 %612 to i32 - br label %614 - -614: ; preds = %610, %.preheader19 - %615 = phi i32 [ %613, %610 ], [ %606, %.preheader19 ] - %616 = tail call i16 @llvm.umin.i16(i16 %608, i16 %605) - %617 = zext i16 %616 to i32 - %618 = tail call i32 @llvm.umax.i32(i32 %615, i32 %606) - %619 = sub nsw i32 %618, %617 - %620 = icmp sgt i32 %619, -1 - tail call void @llvm.assume(i1 %620) - %621 = add nuw nsw i32 %619, 2 - %622 = lshr i32 %621, 2 - %623 = sub nsw i32 %606, %622 - %624 = tail call i32 @llvm.smax.i32(i32 %623, i32 0) - %625 = trunc i32 %624 to i16 - %626 = shl nuw nsw i64 %603, 1 - %627 = icmp ult i64 %603, 65536 - tail call void @llvm.assume(i1 %627) - %628 = getelementptr inbounds i16, ptr %31, i64 %626 - store i16 %625, ptr %628, align 2, !tbaa !18 - %629 = trunc i32 %619 to i16 - %630 = or disjoint i64 %626, 1 - %631 = getelementptr inbounds i16, ptr %31, i64 %630 - store i16 %629, ptr %631, align 2, !tbaa !18 - %632 = add nuw nsw i64 %603, 1 - %633 = getelementptr inbounds i16, ptr %7, i64 %632 - %634 = load i16, ptr %633, align 2, !tbaa !18 - %635 = zext i16 %634 to i32 - %636 = getelementptr i16, ptr %36, i64 %632 - %637 = load i16, ptr %636, align 2, !tbaa !18 - %638 = icmp slt i64 %632, %41 - br i1 %638, label %639, label %643 - -639: ; preds = %614 - %640 = getelementptr i16, ptr %37, i64 %632 - %641 = load i16, ptr %640, align 2, !tbaa !18 - %642 = zext i16 %641 to i32 - br label %643 - -643: ; preds = %639, %614 - %644 = phi i32 [ %642, %639 ], [ %635, %614 ] - %645 = tail call i16 @llvm.umin.i16(i16 %637, i16 %634) - %646 = zext i16 %645 to i32 - %647 = tail call i32 @llvm.umax.i32(i32 %644, i32 %635) - %648 = sub nsw i32 %647, %646 - %649 = icmp sgt i32 %648, -1 - tail call void @llvm.assume(i1 %649) - %650 = add nuw nsw i32 %648, 2 - %651 = lshr i32 %650, 2 - %652 = sub nsw i32 %635, %651 - %653 = tail call i32 @llvm.smax.i32(i32 %652, i32 0) - %654 = trunc i32 %653 to i16 - %655 = shl nuw nsw i64 %632, 1 - %656 = icmp ne i64 %603, 65535 - tail call void @llvm.assume(i1 %656) - %657 = getelementptr inbounds i16, ptr %31, i64 %655 - store i16 %654, ptr %657, align 2, !tbaa !18 - %658 = trunc i32 %648 to i16 - %659 = or disjoint i64 %655, 1 - %660 = getelementptr inbounds i16, ptr %31, i64 %659 - store i16 %658, ptr %660, align 2, !tbaa !18 - %661 = add nuw nsw i64 %603, 2 - %662 = icmp eq i64 %661, %43 - br i1 %662, label %.loopexit20, label %.preheader19, !llvm.loop !55 + %570 = extractelement <8 x i32> %560, i64 0 + %571 = or disjoint i32 %570, 1 + %572 = zext nneg i32 %571 to i64 + %573 = getelementptr i16, ptr %553, i64 %572 + %574 = shufflevector <8 x i16> %559, <8 x i16> zeroinitializer, <16 x i32> + store <16 x i16> %574, ptr %573, align 2, !tbaa !18 + %575 = add nuw i32 %555, 8 + %576 = add <8 x i32> %556, + %577 = icmp eq i32 %575, %549 + br i1 %577, label %578, label %554, !llvm.loop !52 + +578: ; preds = %554 + %579 = add i32 %549, %13 + %580 = icmp eq i32 %413, %549 + br i1 %580, label %.loopexit, label %581 + +581: ; preds = %578, %542, %415, %._crit_edge + %582 = phi i32 [ %13, %._crit_edge ], [ %13, %415 ], [ %543, %542 ], [ %579, %578 ] + %583 = sub i32 %412, %582 + %584 = sub i32 %411, %582 + %585 = and i32 %583, 3 + %586 = icmp eq i32 %585, 0 + br i1 %586, label %.loopexit18, label %.preheader17 + +.preheader17: ; preds = %581, %.preheader17 + %587 = phi i32 [ %597, %.preheader17 ], [ %582, %581 ] + %588 = phi i32 [ %598, %.preheader17 ], [ 0, %581 ] + %589 = load i16, ptr %410, align 2, !tbaa !18 + %590 = shl nsw i32 %587, 1 + %591 = icmp ult i32 %590, 131072 + tail call void @llvm.assume(i1 %591) + %592 = zext nneg i32 %590 to i64 + %593 = getelementptr inbounds i16, ptr %31, i64 %592 + store i16 %589, ptr %593, align 2, !tbaa !18 + %594 = or disjoint i32 %590, 1 + %595 = zext nneg i32 %594 to i64 + %596 = getelementptr inbounds i16, ptr %31, i64 %595 + store i16 0, ptr %596, align 2, !tbaa !18 + %597 = add i32 %587, 1 + %598 = add nuw nsw i32 %588, 1 + %599 = icmp eq i32 %598, %585 + br i1 %599, label %.loopexit18, label %.preheader17, !llvm.loop !53 + +.loopexit18: ; preds = %.preheader17, %581 + %600 = phi i32 [ %582, %581 ], [ %597, %.preheader17 ] + %601 = icmp ult i32 %584, 3 + br i1 %601, label %.loopexit, label %.preheader15 + +.preheader19: ; preds = %259, %642 + %602 = phi i64 [ %660, %642 ], [ %260, %259 ] + %603 = getelementptr inbounds i16, ptr %7, i64 %602 + %604 = load i16, ptr %603, align 2, !tbaa !18 + %605 = zext i16 %604 to i32 + %606 = getelementptr i16, ptr %36, i64 %602 + %607 = load i16, ptr %606, align 2, !tbaa !18 + %608 = icmp slt i64 %602, %41 + br i1 %608, label %609, label %613 + +609: ; preds = %.preheader19 + %610 = getelementptr i16, ptr %37, i64 %602 + %611 = load i16, ptr %610, align 2, !tbaa !18 + %612 = zext i16 %611 to i32 + br label %613 + +613: ; preds = %609, %.preheader19 + %614 = phi i32 [ %612, %609 ], [ %605, %.preheader19 ] + %615 = tail call i16 @llvm.umin.i16(i16 %607, i16 %604) + %616 = zext i16 %615 to i32 + %617 = tail call i32 @llvm.umax.i32(i32 %614, i32 %605) + %618 = sub nsw i32 %617, %616 + %619 = icmp sgt i32 %618, -1 + tail call void @llvm.assume(i1 %619) + %620 = add nuw nsw i32 %618, 2 + %621 = lshr i32 %620, 2 + %622 = sub nsw i32 %605, %621 + %623 = tail call i32 @llvm.smax.i32(i32 %622, i32 0) + %624 = trunc i32 %623 to i16 + %625 = shl nuw nsw i64 %602, 1 + %626 = icmp ult i64 %602, 65536 + tail call void @llvm.assume(i1 %626) + %627 = getelementptr inbounds i16, ptr %31, i64 %625 + store i16 %624, ptr %627, align 2, !tbaa !18 + %628 = trunc i32 %618 to i16 + %629 = or disjoint i64 %625, 1 + %630 = getelementptr inbounds i16, ptr %31, i64 %629 + store i16 %628, ptr %630, align 2, !tbaa !18 + %631 = add nuw nsw i64 %602, 1 + %632 = getelementptr inbounds i16, ptr %7, i64 %631 + %633 = load i16, ptr %632, align 2, !tbaa !18 + %634 = zext i16 %633 to i32 + %635 = getelementptr i16, ptr %36, i64 %631 + %636 = load i16, ptr %635, align 2, !tbaa !18 + %637 = icmp slt i64 %631, %41 + br i1 %637, label %638, label %642 + +638: ; preds = %613 + %639 = getelementptr i16, ptr %37, i64 %631 + %640 = load i16, ptr %639, align 2, !tbaa !18 + %641 = zext i16 %640 to i32 + br label %642 + +642: ; preds = %638, %613 + %643 = phi i32 [ %641, %638 ], [ %634, %613 ] + %644 = tail call i16 @llvm.umin.i16(i16 %636, i16 %633) + %645 = zext i16 %644 to i32 + %646 = tail call i32 @llvm.umax.i32(i32 %643, i32 %634) + %647 = sub nsw i32 %646, %645 + %648 = icmp sgt i32 %647, -1 + tail call void @llvm.assume(i1 %648) + %649 = add nuw nsw i32 %647, 2 + %650 = lshr i32 %649, 2 + %651 = sub nsw i32 %634, %650 + %652 = tail call i32 @llvm.smax.i32(i32 %651, i32 0) + %653 = trunc i32 %652 to i16 + %654 = shl nuw nsw i64 %631, 1 + %655 = icmp ne i64 %602, 65535 + tail call void @llvm.assume(i1 %655) + %656 = getelementptr inbounds i16, ptr %31, i64 %654 + store i16 %653, ptr %656, align 2, !tbaa !18 + %657 = trunc i32 %647 to i16 + %658 = or disjoint i64 %654, 1 + %659 = getelementptr inbounds i16, ptr %31, i64 %658 + store i16 %657, ptr %659, align 2, !tbaa !18 + %660 = add nuw nsw i64 %602, 2 + %661 = icmp eq i64 %660, %43 + br i1 %661, label %.loopexit20, label %.preheader19, !llvm.loop !55 .preheader15: ; preds = %.loopexit18, %.preheader15 - %663 = phi i32 [ %695, %.preheader15 ], [ %601, %.loopexit18 ] - %664 = load i16, ptr %411, align 2, !tbaa !18 - %665 = shl nsw i32 %663, 1 - %666 = zext nneg i32 %665 to i64 - %667 = getelementptr inbounds i16, ptr %31, i64 %666 - store i16 %664, ptr %667, align 2, !tbaa !18 - %668 = or disjoint i32 %665, 1 - %669 = zext nneg i32 %668 to i64 - %670 = getelementptr inbounds i16, ptr %31, i64 %669 - store i16 0, ptr %670, align 2, !tbaa !18 - %671 = load i16, ptr %411, align 2, !tbaa !18 - %672 = add nuw nsw i32 %665, 2 - %673 = zext nneg i32 %672 to i64 - %674 = getelementptr inbounds i16, ptr %31, i64 %673 - store i16 %671, ptr %674, align 2, !tbaa !18 - %675 = or disjoint i32 %672, 1 - %676 = zext nneg i32 %675 to i64 - %677 = getelementptr inbounds i16, ptr %31, i64 %676 - store i16 0, ptr %677, align 2, !tbaa !18 - %678 = load i16, ptr %411, align 2, !tbaa !18 - %679 = add nuw nsw i32 %665, 4 - %680 = icmp ult i32 %665, 131068 - tail call void @llvm.assume(i1 %680) - %681 = zext nneg i32 %679 to i64 - %682 = getelementptr inbounds i16, ptr %31, i64 %681 - store i16 %678, ptr %682, align 2, !tbaa !18 - %683 = or disjoint i32 %679, 1 - %684 = zext nneg i32 %683 to i64 - %685 = getelementptr inbounds i16, ptr %31, i64 %684 - store i16 0, ptr %685, align 2, !tbaa !18 - %686 = add i32 %663, 3 - %687 = load i16, ptr %411, align 2, !tbaa !18 - %688 = shl nsw i32 %686, 1 - %689 = icmp ult i32 %688, 131072 - tail call void @llvm.assume(i1 %689) - %690 = zext nneg i32 %688 to i64 - %691 = getelementptr inbounds i16, ptr %31, i64 %690 - store i16 %687, ptr %691, align 2, !tbaa !18 - %692 = or disjoint i32 %688, 1 - %693 = zext nneg i32 %692 to i64 - %694 = getelementptr inbounds i16, ptr %31, i64 %693 - store i16 0, ptr %694, align 2, !tbaa !18 - %695 = add i32 %663, 4 - %696 = icmp eq i32 %686, %412 - br i1 %696, label %.loopexit, label %.preheader15, !llvm.loop !56 - -.loopexit: ; preds = %.preheader15, %287, %.preheader, %.loopexit18, %579, %541, %.loopexit20 + %662 = phi i32 [ %694, %.preheader15 ], [ %600, %.loopexit18 ] + %663 = load i16, ptr %410, align 2, !tbaa !18 + %664 = shl nsw i32 %662, 1 + %665 = zext nneg i32 %664 to i64 + %666 = getelementptr inbounds i16, ptr %31, i64 %665 + store i16 %663, ptr %666, align 2, !tbaa !18 + %667 = or disjoint i32 %664, 1 + %668 = zext nneg i32 %667 to i64 + %669 = getelementptr inbounds i16, ptr %31, i64 %668 + store i16 0, ptr %669, align 2, !tbaa !18 + %670 = load i16, ptr %410, align 2, !tbaa !18 + %671 = add nuw nsw i32 %664, 2 + %672 = zext nneg i32 %671 to i64 + %673 = getelementptr inbounds i16, ptr %31, i64 %672 + store i16 %670, ptr %673, align 2, !tbaa !18 + %674 = or disjoint i32 %671, 1 + %675 = zext nneg i32 %674 to i64 + %676 = getelementptr inbounds i16, ptr %31, i64 %675 + store i16 0, ptr %676, align 2, !tbaa !18 + %677 = load i16, ptr %410, align 2, !tbaa !18 + %678 = add nuw nsw i32 %664, 4 + %679 = icmp ult i32 %664, 131068 + tail call void @llvm.assume(i1 %679) + %680 = zext nneg i32 %678 to i64 + %681 = getelementptr inbounds i16, ptr %31, i64 %680 + store i16 %677, ptr %681, align 2, !tbaa !18 + %682 = or disjoint i32 %678, 1 + %683 = zext nneg i32 %682 to i64 + %684 = getelementptr inbounds i16, ptr %31, i64 %683 + store i16 0, ptr %684, align 2, !tbaa !18 + %685 = add i32 %662, 3 + %686 = load i16, ptr %410, align 2, !tbaa !18 + %687 = shl nsw i32 %685, 1 + %688 = icmp ult i32 %687, 131072 + tail call void @llvm.assume(i1 %688) + %689 = zext nneg i32 %687 to i64 + %690 = getelementptr inbounds i16, ptr %31, i64 %689 + store i16 %686, ptr %690, align 2, !tbaa !18 + %691 = or disjoint i32 %687, 1 + %692 = zext nneg i32 %691 to i64 + %693 = getelementptr inbounds i16, ptr %31, i64 %692 + store i16 0, ptr %693, align 2, !tbaa !18 + %694 = add i32 %662, 4 + %695 = icmp eq i32 %685, %411 + br i1 %695, label %.loopexit, label %.preheader15, !llvm.loop !56 + +.loopexit: ; preds = %.preheader15, %286, %.preheader, %.loopexit18, %578, %540, %.loopexit20 ret void } diff --git a/bench/darktable/optimized/VC5Decompressor.cpp.ll b/bench/darktable/optimized/VC5Decompressor.cpp.ll index 0014eb9ece9..fae92d1cbc1 100644 --- a/bench/darktable/optimized/VC5Decompressor.cpp.ll +++ b/bench/darktable/optimized/VC5Decompressor.cpp.ll @@ -1694,7 +1694,7 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS 32: ; preds = %6 %33 = shl nuw nsw i64 %30, 1 %34 = invoke noalias noundef nonnull ptr @_Znwm(i64 noundef %33) #28 - to label %35 unwind label %519 + to label %35 unwind label %517 35: ; preds = %32, %6 %36 = phi i64 [ 0, %6 ], [ %33, %32 ] @@ -1802,11 +1802,11 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS %119 = select i1 %97, i1 true, i1 %118 br label %121 -120: ; preds = %505 +120: ; preds = %503 ret void -121: ; preds = %505, %35 - %122 = phi i64 [ 0, %35 ], [ %517, %505 ] +121: ; preds = %503, %35 + %122 = phi i64 [ 0, %35 ], [ %515, %503 ] %123 = mul nuw nsw i64 %122, %74 %124 = add nuw nsw i64 %123, %70 %125 = icmp ule i64 %124, %75 @@ -1865,7 +1865,7 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS %171 = trunc i32 %164 to i16 %172 = getelementptr inbounds i8, ptr %170, i64 2 store i16 %171, ptr %172, align 2, !tbaa !32 - br i1 %67, label %281, label %461 + br i1 %67, label %280, label %459 173: ; preds = %121 %174 = trunc i32 %151 to i16 @@ -1879,7 +1879,7 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS %180 = trunc i32 %159 to i16 %181 = getelementptr inbounds i8, ptr %179, i64 2 store i16 %180, ptr %181, align 2, !tbaa !32 - br i1 %67, label %182, label %461 + br i1 %67, label %182, label %459 182: ; preds = %173 %183 = getelementptr i8, ptr %134, i64 -2 @@ -1890,10 +1890,10 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS %188 = select i1 %97, i1 true, i1 %187 br i1 %188, label %.preheader23, label %189 -.preheader23: ; preds = %280, %189, %182 - %.ph24 = phi i64 [ %101, %280 ], [ 1, %182 ], [ 1, %189 ] - %.ph25 = phi i64 [ %102, %280 ], [ 2, %182 ], [ 2, %189 ] - br label %415 +.preheader23: ; preds = %279, %189, %182 + %.ph24 = phi i64 [ %101, %279 ], [ 1, %182 ], [ 1, %189 ] + %.ph25 = phi i64 [ %102, %279 ], [ 2, %182 ], [ 2, %189 ] + br label %413 189: ; preds = %182 %190 = getelementptr i8, ptr %179, i64 4 @@ -1912,9 +1912,9 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS br label %201 201: ; preds = %201, %199 - %202 = phi i64 [ 0, %199 ], [ %276, %201 ] - %203 = phi <8 x i64> [ , %199 ], [ %277, %201 ] - %204 = phi <8 x i64> [ , %199 ], [ %278, %201 ] + %202 = phi i64 [ 0, %199 ], [ %275, %201 ] + %203 = phi <8 x i64> [ , %199 ], [ %276, %201 ] + %204 = phi <8 x i64> [ , %199 ], [ %277, %201 ] %205 = or disjoint i64 %202, 1 %206 = or disjoint i64 %202, 2 %207 = icmp ult <8 x i64> %203, %104 @@ -1978,384 +1978,382 @@ define hidden void @_ZN8rawspeed15VC5Decompressor7Wavelet18combineLowHighPassENS %248 = sub nsw <8 x i32> %247, %218 %249 = shl <8 x i32> %248, %108 %250 = lshr <8 x i32> %249, - %251 = trunc <8 x i32> %244 to <8 x i16> - %252 = shl nuw nsw <8 x i64> %203, - %253 = icmp ult <8 x i64> %252, %110 - %254 = extractelement <8 x i1> %253, i64 0 + %251 = shl nuw nsw <8 x i64> %203, + %252 = icmp ult <8 x i64> %251, %110 + %253 = extractelement <8 x i1> %252, i64 0 + tail call void @llvm.assume(i1 %253) + %254 = extractelement <8 x i1> %252, i64 1 tail call void @llvm.assume(i1 %254) - %255 = extractelement <8 x i1> %253, i64 1 + %255 = extractelement <8 x i1> %252, i64 2 tail call void @llvm.assume(i1 %255) - %256 = extractelement <8 x i1> %253, i64 2 + %256 = extractelement <8 x i1> %252, i64 3 tail call void @llvm.assume(i1 %256) - %257 = extractelement <8 x i1> %253, i64 3 + %257 = extractelement <8 x i1> %252, i64 4 tail call void @llvm.assume(i1 %257) - %258 = extractelement <8 x i1> %253, i64 4 + %258 = extractelement <8 x i1> %252, i64 5 tail call void @llvm.assume(i1 %258) - %259 = extractelement <8 x i1> %253, i64 5 + %259 = extractelement <8 x i1> %252, i64 6 tail call void @llvm.assume(i1 %259) - %260 = extractelement <8 x i1> %253, i64 6 + %260 = extractelement <8 x i1> %252, i64 7 tail call void @llvm.assume(i1 %260) - %261 = extractelement <8 x i1> %253, i64 7 - tail call void @llvm.assume(i1 %261) - %262 = trunc <8 x i32> %250 to <8 x i16> - %263 = or disjoint <8 x i64> %252, - %264 = icmp ult <8 x i64> %263, %110 - %265 = extractelement <8 x i1> %264, i64 0 + %261 = or disjoint <8 x i64> %251, + %262 = icmp ult <8 x i64> %261, %110 + %263 = extractelement <8 x i1> %262, i64 0 + tail call void @llvm.assume(i1 %263) + %264 = extractelement <8 x i1> %262, i64 1 + tail call void @llvm.assume(i1 %264) + %265 = extractelement <8 x i1> %262, i64 2 tail call void @llvm.assume(i1 %265) - %266 = extractelement <8 x i1> %264, i64 1 + %266 = extractelement <8 x i1> %262, i64 3 tail call void @llvm.assume(i1 %266) - %267 = extractelement <8 x i1> %264, i64 2 + %267 = extractelement <8 x i1> %262, i64 4 tail call void @llvm.assume(i1 %267) - %268 = extractelement <8 x i1> %264, i64 3 + %268 = extractelement <8 x i1> %262, i64 5 tail call void @llvm.assume(i1 %268) - %269 = extractelement <8 x i1> %264, i64 4 + %269 = extractelement <8 x i1> %262, i64 6 tail call void @llvm.assume(i1 %269) - %270 = extractelement <8 x i1> %264, i64 5 + %270 = extractelement <8 x i1> %262, i64 7 tail call void @llvm.assume(i1 %270) - %271 = extractelement <8 x i1> %264, i64 6 - tail call void @llvm.assume(i1 %271) - %272 = extractelement <8 x i1> %264, i64 7 - tail call void @llvm.assume(i1 %272) - %273 = extractelement <8 x i64> %263, i64 0 - %274 = getelementptr i16, ptr %200, i64 %273 - %275 = shufflevector <8 x i16> %251, <8 x i16> %262, <16 x i32> - store <16 x i16> %275, ptr %274, align 2, !tbaa !32 - %276 = add nuw i64 %202, 8 - %277 = add <8 x i64> %203, - %278 = add <8 x i64> %204, - %279 = icmp eq i64 %276, %100 - br i1 %279, label %280, label %201, !llvm.loop !110 - -280: ; preds = %201 + %271 = extractelement <8 x i64> %261, i64 0 + %272 = getelementptr i16, ptr %200, i64 %271 + %273 = shufflevector <8 x i32> %244, <8 x i32> %250, <16 x i32> + %274 = trunc <16 x i32> %273 to <16 x i16> + store <16 x i16> %274, ptr %272, align 2, !tbaa !32 + %275 = add nuw i64 %202, 8 + %276 = add <8 x i64> %203, + %277 = add <8 x i64> %204, + %278 = icmp eq i64 %275, %100 + br i1 %278, label %279, label %201, !llvm.loop !110 + +279: ; preds = %201 br i1 %111, label %.loopexit13, label %.preheader23 -281: ; preds = %160 - %282 = getelementptr i8, ptr %134, i64 -2 - br i1 %119, label %.preheader, label %283 - -283: ; preds = %281 - %284 = getelementptr i8, ptr %170, i64 -2 - br label %285 - -285: ; preds = %285, %283 - %286 = phi i64 [ 0, %283 ], [ %364, %285 ] - %287 = phi <8 x i64> [ , %283 ], [ %365, %285 ] - %288 = phi <8 x i64> [ , %283 ], [ %366, %285 ] - %289 = or disjoint i64 %286, 1 - %290 = or disjoint i64 %286, 2 - %291 = icmp ult <8 x i64> %287, %104 - %292 = extractelement <8 x i1> %291, i64 0 +280: ; preds = %160 + %281 = getelementptr i8, ptr %134, i64 -2 + br i1 %119, label %.preheader, label %282 + +282: ; preds = %280 + %283 = getelementptr i8, ptr %170, i64 -2 + br label %284 + +284: ; preds = %284, %282 + %285 = phi i64 [ 0, %282 ], [ %362, %284 ] + %286 = phi <8 x i64> [ , %282 ], [ %363, %284 ] + %287 = phi <8 x i64> [ , %282 ], [ %364, %284 ] + %288 = or disjoint i64 %285, 1 + %289 = or disjoint i64 %285, 2 + %290 = icmp ult <8 x i64> %286, %104 + %291 = extractelement <8 x i1> %290, i64 0 + tail call void @llvm.assume(i1 %291) + %292 = extractelement <8 x i1> %290, i64 1 tail call void @llvm.assume(i1 %292) - %293 = extractelement <8 x i1> %291, i64 1 + %293 = extractelement <8 x i1> %290, i64 2 tail call void @llvm.assume(i1 %293) - %294 = extractelement <8 x i1> %291, i64 2 + %294 = extractelement <8 x i1> %290, i64 3 tail call void @llvm.assume(i1 %294) - %295 = extractelement <8 x i1> %291, i64 3 + %295 = extractelement <8 x i1> %290, i64 4 tail call void @llvm.assume(i1 %295) - %296 = extractelement <8 x i1> %291, i64 4 + %296 = extractelement <8 x i1> %290, i64 5 tail call void @llvm.assume(i1 %296) - %297 = extractelement <8 x i1> %291, i64 5 + %297 = extractelement <8 x i1> %290, i64 6 tail call void @llvm.assume(i1 %297) - %298 = extractelement <8 x i1> %291, i64 6 + %298 = extractelement <8 x i1> %290, i64 7 tail call void @llvm.assume(i1 %298) - %299 = extractelement <8 x i1> %291, i64 7 - tail call void @llvm.assume(i1 %299) - %300 = getelementptr inbounds i16, ptr %126, i64 %289 - %301 = load <8 x i16>, ptr %300, align 2, !tbaa !32, !alias.scope !111 - %302 = sext <8 x i16> %301 to <8 x i32> - %303 = getelementptr i16, ptr %282, i64 %289 - %304 = load <8 x i16>, ptr %303, align 2, !tbaa !32, !alias.scope !114 - %305 = sext <8 x i16> %304 to <8 x i32> - %306 = getelementptr inbounds i16, ptr %134, i64 %289 - %307 = load <8 x i16>, ptr %306, align 2, !tbaa !32, !alias.scope !114 - %308 = sext <8 x i16> %307 to <8 x i32> - %309 = shl nsw <8 x i32> %308, - %310 = icmp ult <8 x i64> %288, %106 - %311 = extractelement <8 x i1> %310, i64 0 + %299 = getelementptr inbounds i16, ptr %126, i64 %288 + %300 = load <8 x i16>, ptr %299, align 2, !tbaa !32, !alias.scope !111 + %301 = sext <8 x i16> %300 to <8 x i32> + %302 = getelementptr i16, ptr %281, i64 %288 + %303 = load <8 x i16>, ptr %302, align 2, !tbaa !32, !alias.scope !114 + %304 = sext <8 x i16> %303 to <8 x i32> + %305 = getelementptr inbounds i16, ptr %134, i64 %288 + %306 = load <8 x i16>, ptr %305, align 2, !tbaa !32, !alias.scope !114 + %307 = sext <8 x i16> %306 to <8 x i32> + %308 = shl nsw <8 x i32> %307, + %309 = icmp ult <8 x i64> %287, %106 + %310 = extractelement <8 x i1> %309, i64 0 + tail call void @llvm.assume(i1 %310) + %311 = extractelement <8 x i1> %309, i64 1 tail call void @llvm.assume(i1 %311) - %312 = extractelement <8 x i1> %310, i64 1 + %312 = extractelement <8 x i1> %309, i64 2 tail call void @llvm.assume(i1 %312) - %313 = extractelement <8 x i1> %310, i64 2 + %313 = extractelement <8 x i1> %309, i64 3 tail call void @llvm.assume(i1 %313) - %314 = extractelement <8 x i1> %310, i64 3 + %314 = extractelement <8 x i1> %309, i64 4 tail call void @llvm.assume(i1 %314) - %315 = extractelement <8 x i1> %310, i64 4 + %315 = extractelement <8 x i1> %309, i64 5 tail call void @llvm.assume(i1 %315) - %316 = extractelement <8 x i1> %310, i64 5 + %316 = extractelement <8 x i1> %309, i64 6 tail call void @llvm.assume(i1 %316) - %317 = extractelement <8 x i1> %310, i64 6 + %317 = extractelement <8 x i1> %309, i64 7 tail call void @llvm.assume(i1 %317) - %318 = extractelement <8 x i1> %310, i64 7 - tail call void @llvm.assume(i1 %318) - %319 = getelementptr inbounds i16, ptr %134, i64 %290 - %320 = load <8 x i16>, ptr %319, align 2, !tbaa !32, !alias.scope !114 - %321 = sext <8 x i16> %320 to <8 x i32> - %322 = add nsw <8 x i32> %305, - %323 = add nsw <8 x i32> %322, %309 - %324 = sub nsw <8 x i32> %323, %321 - %325 = ashr <8 x i32> %324, - %326 = add nsw <8 x i32> %325, %302 - %327 = shl <8 x i32> %326, %108 - %328 = ashr <8 x i32> %327, - %reass.sub16 = sub nsw <8 x i32> %309, %305 - %329 = add nsw <8 x i32> %reass.sub16, - %330 = add nsw <8 x i32> %329, %321 - %331 = ashr <8 x i32> %330, - %332 = sub nsw <8 x i32> %331, %302 - %333 = shl <8 x i32> %332, %108 - %334 = ashr <8 x i32> %333, - %335 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %328, <8 x i32> zeroinitializer) - %336 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %335, <8 x i32> ) - %337 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %334, <8 x i32> zeroinitializer) - %338 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %337, <8 x i32> ) - %339 = trunc <8 x i32> %336 to <8 x i16> - %340 = shl nuw nsw <8 x i64> %287, - %341 = icmp ult <8 x i64> %340, %110 - %342 = extractelement <8 x i1> %341, i64 0 + %318 = getelementptr inbounds i16, ptr %134, i64 %289 + %319 = load <8 x i16>, ptr %318, align 2, !tbaa !32, !alias.scope !114 + %320 = sext <8 x i16> %319 to <8 x i32> + %321 = add nsw <8 x i32> %304, + %322 = add nsw <8 x i32> %321, %308 + %323 = sub nsw <8 x i32> %322, %320 + %324 = ashr <8 x i32> %323, + %325 = add nsw <8 x i32> %324, %301 + %326 = shl <8 x i32> %325, %108 + %327 = ashr <8 x i32> %326, + %reass.sub16 = sub nsw <8 x i32> %308, %304 + %328 = add nsw <8 x i32> %reass.sub16, + %329 = add nsw <8 x i32> %328, %320 + %330 = ashr <8 x i32> %329, + %331 = sub nsw <8 x i32> %330, %301 + %332 = shl <8 x i32> %331, %108 + %333 = ashr <8 x i32> %332, + %334 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %327, <8 x i32> zeroinitializer) + %335 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %334, <8 x i32> ) + %336 = tail call <8 x i32> @llvm.smax.v8i32(<8 x i32> %333, <8 x i32> zeroinitializer) + %337 = tail call <8 x i32> @llvm.umin.v8i32(<8 x i32> %336, <8 x i32> ) + %338 = shl nuw nsw <8 x i64> %286, + %339 = icmp ult <8 x i64> %338, %110 + %340 = extractelement <8 x i1> %339, i64 0 + tail call void @llvm.assume(i1 %340) + %341 = extractelement <8 x i1> %339, i64 1 + tail call void @llvm.assume(i1 %341) + %342 = extractelement <8 x i1> %339, i64 2 tail call void @llvm.assume(i1 %342) - %343 = extractelement <8 x i1> %341, i64 1 + %343 = extractelement <8 x i1> %339, i64 3 tail call void @llvm.assume(i1 %343) - %344 = extractelement <8 x i1> %341, i64 2 + %344 = extractelement <8 x i1> %339, i64 4 tail call void @llvm.assume(i1 %344) - %345 = extractelement <8 x i1> %341, i64 3 + %345 = extractelement <8 x i1> %339, i64 5 tail call void @llvm.assume(i1 %345) - %346 = extractelement <8 x i1> %341, i64 4 + %346 = extractelement <8 x i1> %339, i64 6 tail call void @llvm.assume(i1 %346) - %347 = extractelement <8 x i1> %341, i64 5 + %347 = extractelement <8 x i1> %339, i64 7 tail call void @llvm.assume(i1 %347) - %348 = extractelement <8 x i1> %341, i64 6 - tail call void @llvm.assume(i1 %348) - %349 = extractelement <8 x i1> %341, i64 7 - tail call void @llvm.assume(i1 %349) - %350 = trunc <8 x i32> %338 to <8 x i16> - %351 = or disjoint <8 x i64> %340, - %352 = icmp ult <8 x i64> %351, %110 - %353 = extractelement <8 x i1> %352, i64 0 + %348 = or disjoint <8 x i64> %338, + %349 = icmp ult <8 x i64> %348, %110 + %350 = extractelement <8 x i1> %349, i64 0 + tail call void @llvm.assume(i1 %350) + %351 = extractelement <8 x i1> %349, i64 1 + tail call void @llvm.assume(i1 %351) + %352 = extractelement <8 x i1> %349, i64 2 + tail call void @llvm.assume(i1 %352) + %353 = extractelement <8 x i1> %349, i64 3 tail call void @llvm.assume(i1 %353) - %354 = extractelement <8 x i1> %352, i64 1 + %354 = extractelement <8 x i1> %349, i64 4 tail call void @llvm.assume(i1 %354) - %355 = extractelement <8 x i1> %352, i64 2 + %355 = extractelement <8 x i1> %349, i64 5 tail call void @llvm.assume(i1 %355) - %356 = extractelement <8 x i1> %352, i64 3 + %356 = extractelement <8 x i1> %349, i64 6 tail call void @llvm.assume(i1 %356) - %357 = extractelement <8 x i1> %352, i64 4 + %357 = extractelement <8 x i1> %349, i64 7 tail call void @llvm.assume(i1 %357) - %358 = extractelement <8 x i1> %352, i64 5 - tail call void @llvm.assume(i1 %358) - %359 = extractelement <8 x i1> %352, i64 6 - tail call void @llvm.assume(i1 %359) - %360 = extractelement <8 x i1> %352, i64 7 - tail call void @llvm.assume(i1 %360) - %361 = extractelement <8 x i64> %351, i64 0 - %362 = getelementptr i16, ptr %284, i64 %361 - %363 = shufflevector <8 x i16> %339, <8 x i16> %350, <16 x i32> - store <16 x i16> %363, ptr %362, align 2, !tbaa !32 - %364 = add nuw i64 %286, 8 - %365 = add <8 x i64> %287, - %366 = add <8 x i64> %288, - %367 = icmp eq i64 %364, %100 - br i1 %367, label %368, label %285, !llvm.loop !116 - -368: ; preds = %285 + %358 = extractelement <8 x i64> %348, i64 0 + %359 = getelementptr i16, ptr %283, i64 %358 + %360 = shufflevector <8 x i32> %335, <8 x i32> %337, <16 x i32> + %361 = trunc <16 x i32> %360 to <16 x i16> + store <16 x i16> %361, ptr %359, align 2, !tbaa !32 + %362 = add nuw i64 %285, 8 + %363 = add <8 x i64> %286, + %364 = add <8 x i64> %287, + %365 = icmp eq i64 %362, %100 + br i1 %365, label %366, label %284, !llvm.loop !116 + +366: ; preds = %284 br i1 %111, label %.loopexit, label %.preheader -.preheader: ; preds = %368, %281 - %.ph = phi i64 [ %101, %368 ], [ 1, %281 ] - %.ph22 = phi i64 [ %102, %368 ], [ 2, %281 ] - br label %369 - -369: ; preds = %.preheader, %369 - %370 = phi i64 [ %413, %369 ], [ %.ph, %.preheader ] - %371 = phi i64 [ %412, %369 ], [ %.ph22, %.preheader ] - %372 = icmp ult i64 %370, %70 - tail call void @llvm.assume(i1 %372) - %373 = getelementptr inbounds i16, ptr %126, i64 %370 - %374 = load i16, ptr %373, align 2, !tbaa !32 - %375 = sext i16 %374 to i32 - %376 = getelementptr i16, ptr %282, i64 %370 - %377 = load i16, ptr %376, align 2, !tbaa !32 - %378 = sext i16 %377 to i32 - %379 = getelementptr inbounds i16, ptr %134, i64 %370 - %380 = load i16, ptr %379, align 2, !tbaa !32 - %381 = sext i16 %380 to i32 - %382 = shl nsw i32 %381, 3 - %383 = icmp ult i64 %371, %68 - tail call void @llvm.assume(i1 %383) - %384 = getelementptr inbounds i16, ptr %134, i64 %371 - %385 = load i16, ptr %384, align 2, !tbaa !32 - %386 = sext i16 %385 to i32 - %387 = add nsw i32 %378, 4 - %388 = add nsw i32 %387, %382 - %389 = sub nsw i32 %388, %386 - %390 = ashr i32 %389, 3 - %391 = add nsw i32 %390, %375 - %392 = shl i32 %391, %3 - %393 = ashr i32 %392, 1 - %reass.sub17 = sub nsw i32 %382, %378 - %394 = add nsw i32 %reass.sub17, 4 - %395 = add nsw i32 %394, %386 - %396 = ashr i32 %395, 3 - %397 = sub nsw i32 %396, %375 - %398 = shl i32 %397, %3 - %399 = ashr i32 %398, 1 - %400 = tail call i32 @llvm.smax.i32(i32 %393, i32 0) +.preheader: ; preds = %366, %280 + %.ph = phi i64 [ %101, %366 ], [ 1, %280 ] + %.ph22 = phi i64 [ %102, %366 ], [ 2, %280 ] + br label %367 + +367: ; preds = %.preheader, %367 + %368 = phi i64 [ %411, %367 ], [ %.ph, %.preheader ] + %369 = phi i64 [ %410, %367 ], [ %.ph22, %.preheader ] + %370 = icmp ult i64 %368, %70 + tail call void @llvm.assume(i1 %370) + %371 = getelementptr inbounds i16, ptr %126, i64 %368 + %372 = load i16, ptr %371, align 2, !tbaa !32 + %373 = sext i16 %372 to i32 + %374 = getelementptr i16, ptr %281, i64 %368 + %375 = load i16, ptr %374, align 2, !tbaa !32 + %376 = sext i16 %375 to i32 + %377 = getelementptr inbounds i16, ptr %134, i64 %368 + %378 = load i16, ptr %377, align 2, !tbaa !32 + %379 = sext i16 %378 to i32 + %380 = shl nsw i32 %379, 3 + %381 = icmp ult i64 %369, %68 + tail call void @llvm.assume(i1 %381) + %382 = getelementptr inbounds i16, ptr %134, i64 %369 + %383 = load i16, ptr %382, align 2, !tbaa !32 + %384 = sext i16 %383 to i32 + %385 = add nsw i32 %376, 4 + %386 = add nsw i32 %385, %380 + %387 = sub nsw i32 %386, %384 + %388 = ashr i32 %387, 3 + %389 = add nsw i32 %388, %373 + %390 = shl i32 %389, %3 + %391 = ashr i32 %390, 1 + %reass.sub17 = sub nsw i32 %380, %376 + %392 = add nsw i32 %reass.sub17, 4 + %393 = add nsw i32 %392, %384 + %394 = ashr i32 %393, 3 + %395 = sub nsw i32 %394, %373 + %396 = shl i32 %395, %3 + %397 = ashr i32 %396, 1 + %398 = tail call i32 @llvm.smax.i32(i32 %391, i32 0) + %399 = tail call i32 @llvm.umin.i32(i32 %398, i32 16383) + %400 = tail call i32 @llvm.smax.i32(i32 %397, i32 0) %401 = tail call i32 @llvm.umin.i32(i32 %400, i32 16383) - %402 = tail call i32 @llvm.smax.i32(i32 %399, i32 0) - %403 = tail call i32 @llvm.umin.i32(i32 %402, i32 16383) - %404 = trunc i32 %401 to i16 - %405 = shl nuw nsw i64 %370, 1 - %406 = icmp ult i64 %405, %69 - tail call void @llvm.assume(i1 %406) - %407 = getelementptr inbounds i16, ptr %170, i64 %405 - store i16 %404, ptr %407, align 2, !tbaa !32 - %408 = trunc i32 %403 to i16 - %409 = or disjoint i64 %405, 1 - %410 = icmp ult i64 %409, %69 - tail call void @llvm.assume(i1 %410) - %411 = getelementptr inbounds i16, ptr %170, i64 %409 - store i16 %408, ptr %411, align 2, !tbaa !32 - %412 = add nuw nsw i64 %371, 1 - %413 = add nuw nsw i64 %370, 1 - %414 = icmp eq i64 %413, %77 - br i1 %414, label %.loopexit, label %369, !llvm.loop !117 - -415: ; preds = %.preheader23, %415 - %416 = phi i64 [ %455, %415 ], [ %.ph24, %.preheader23 ] - %417 = phi i64 [ %454, %415 ], [ %.ph25, %.preheader23 ] - %418 = icmp ult i64 %416, %70 - tail call void @llvm.assume(i1 %418) - %419 = getelementptr inbounds i16, ptr %126, i64 %416 - %420 = load i16, ptr %419, align 2, !tbaa !32 - %421 = sext i16 %420 to i32 - %422 = getelementptr i16, ptr %183, i64 %416 - %423 = load i16, ptr %422, align 2, !tbaa !32 - %424 = sext i16 %423 to i32 - %425 = getelementptr inbounds i16, ptr %134, i64 %416 - %426 = load i16, ptr %425, align 2, !tbaa !32 - %427 = sext i16 %426 to i32 - %428 = shl nsw i32 %427, 3 - %429 = icmp ult i64 %417, %68 - tail call void @llvm.assume(i1 %429) - %430 = getelementptr inbounds i16, ptr %134, i64 %417 - %431 = load i16, ptr %430, align 2, !tbaa !32 - %432 = sext i16 %431 to i32 - %433 = add nsw i32 %424, 4 - %434 = add nsw i32 %433, %428 - %435 = sub nsw i32 %434, %432 - %436 = lshr i32 %435, 3 - %437 = add nsw i32 %436, %421 - %438 = shl i32 %437, %3 - %439 = lshr i32 %438, 1 - %reass.sub15 = sub nsw i32 %428, %424 - %440 = add nsw i32 %reass.sub15, 4 - %441 = add nsw i32 %440, %432 - %442 = lshr i32 %441, 3 - %443 = sub nsw i32 %442, %421 - %444 = shl i32 %443, %3 - %445 = lshr i32 %444, 1 - %446 = trunc i32 %439 to i16 - %447 = shl nuw nsw i64 %416, 1 - %448 = icmp ult i64 %447, %69 - tail call void @llvm.assume(i1 %448) - %449 = getelementptr inbounds i16, ptr %179, i64 %447 - store i16 %446, ptr %449, align 2, !tbaa !32 - %450 = trunc i32 %445 to i16 - %451 = or disjoint i64 %447, 1 - %452 = icmp ult i64 %451, %69 - tail call void @llvm.assume(i1 %452) - %453 = getelementptr inbounds i16, ptr %179, i64 %451 - store i16 %450, ptr %453, align 2, !tbaa !32 - %454 = add nuw nsw i64 %417, 1 - %455 = add nuw nsw i64 %416, 1 - %456 = icmp eq i64 %455, %77 - br i1 %456, label %.loopexit13, label %415, !llvm.loop !118 - -.loopexit: ; preds = %369, %368 - %457 = phi i64 [ %101, %368 ], [ %371, %369 ] + %402 = trunc i32 %399 to i16 + %403 = shl nuw nsw i64 %368, 1 + %404 = icmp ult i64 %403, %69 + tail call void @llvm.assume(i1 %404) + %405 = getelementptr inbounds i16, ptr %170, i64 %403 + store i16 %402, ptr %405, align 2, !tbaa !32 + %406 = trunc i32 %401 to i16 + %407 = or disjoint i64 %403, 1 + %408 = icmp ult i64 %407, %69 + tail call void @llvm.assume(i1 %408) + %409 = getelementptr inbounds i16, ptr %170, i64 %407 + store i16 %406, ptr %409, align 2, !tbaa !32 + %410 = add nuw nsw i64 %369, 1 + %411 = add nuw nsw i64 %368, 1 + %412 = icmp eq i64 %411, %77 + br i1 %412, label %.loopexit, label %367, !llvm.loop !117 + +413: ; preds = %.preheader23, %413 + %414 = phi i64 [ %453, %413 ], [ %.ph24, %.preheader23 ] + %415 = phi i64 [ %452, %413 ], [ %.ph25, %.preheader23 ] + %416 = icmp ult i64 %414, %70 + tail call void @llvm.assume(i1 %416) + %417 = getelementptr inbounds i16, ptr %126, i64 %414 + %418 = load i16, ptr %417, align 2, !tbaa !32 + %419 = sext i16 %418 to i32 + %420 = getelementptr i16, ptr %183, i64 %414 + %421 = load i16, ptr %420, align 2, !tbaa !32 + %422 = sext i16 %421 to i32 + %423 = getelementptr inbounds i16, ptr %134, i64 %414 + %424 = load i16, ptr %423, align 2, !tbaa !32 + %425 = sext i16 %424 to i32 + %426 = shl nsw i32 %425, 3 + %427 = icmp ult i64 %415, %68 + tail call void @llvm.assume(i1 %427) + %428 = getelementptr inbounds i16, ptr %134, i64 %415 + %429 = load i16, ptr %428, align 2, !tbaa !32 + %430 = sext i16 %429 to i32 + %431 = add nsw i32 %422, 4 + %432 = add nsw i32 %431, %426 + %433 = sub nsw i32 %432, %430 + %434 = lshr i32 %433, 3 + %435 = add nsw i32 %434, %419 + %436 = shl i32 %435, %3 + %437 = lshr i32 %436, 1 + %reass.sub15 = sub nsw i32 %426, %422 + %438 = add nsw i32 %reass.sub15, 4 + %439 = add nsw i32 %438, %430 + %440 = lshr i32 %439, 3 + %441 = sub nsw i32 %440, %419 + %442 = shl i32 %441, %3 + %443 = lshr i32 %442, 1 + %444 = trunc i32 %437 to i16 + %445 = shl nuw nsw i64 %414, 1 + %446 = icmp ult i64 %445, %69 + tail call void @llvm.assume(i1 %446) + %447 = getelementptr inbounds i16, ptr %179, i64 %445 + store i16 %444, ptr %447, align 2, !tbaa !32 + %448 = trunc i32 %443 to i16 + %449 = or disjoint i64 %445, 1 + %450 = icmp ult i64 %449, %69 + tail call void @llvm.assume(i1 %450) + %451 = getelementptr inbounds i16, ptr %179, i64 %449 + store i16 %448, ptr %451, align 2, !tbaa !32 + %452 = add nuw nsw i64 %415, 1 + %453 = add nuw nsw i64 %414, 1 + %454 = icmp eq i64 %453, %77 + br i1 %454, label %.loopexit13, label %413, !llvm.loop !118 + +.loopexit: ; preds = %367, %366 + %455 = phi i64 [ %101, %366 ], [ %369, %367 ] + %456 = trunc i64 %455 to i32 + br label %459 + +.loopexit13: ; preds = %413, %279 + %457 = phi i64 [ %101, %279 ], [ %415, %413 ] %458 = trunc i64 %457 to i32 - br label %461 - -.loopexit13: ; preds = %415, %280 - %459 = phi i64 [ %101, %280 ], [ %417, %415 ] - %460 = trunc i64 %459 to i32 - br label %461 - -461: ; preds = %.loopexit13, %.loopexit, %173, %160 - %462 = phi ptr [ %170, %160 ], [ %170, %.loopexit ], [ %179, %.loopexit13 ], [ %179, %173 ] - %463 = phi i32 [ 1, %160 ], [ %458, %.loopexit ], [ %460, %.loopexit13 ], [ 1, %173 ] - %464 = icmp ugt i32 %12, %463 - tail call void @llvm.assume(i1 %464) - %465 = zext nneg i32 %463 to i64 - %466 = getelementptr inbounds i16, ptr %126, i64 %465 - %467 = load i16, ptr %466, align 2, !tbaa !32 - %468 = sext i16 %467 to i32 - %469 = add nsw i32 %463, -2 - %470 = icmp ugt i32 %57, %469 - tail call void @llvm.assume(i1 %470) - %471 = zext nneg i32 %469 to i64 - %472 = getelementptr inbounds i16, ptr %134, i64 %471 - %473 = load i16, ptr %472, align 2, !tbaa !32 - %474 = sext i16 %473 to i32 - %475 = add nsw i32 %463, -1 - %476 = icmp ugt i32 %57, %475 - tail call void @llvm.assume(i1 %476) - %477 = zext nneg i32 %475 to i64 - %478 = getelementptr inbounds i16, ptr %134, i64 %477 - %479 = load i16, ptr %478, align 2, !tbaa !32 - %480 = sext i16 %479 to i32 - %481 = shl nsw i32 %480, 2 - %482 = getelementptr inbounds i16, ptr %134, i64 %465 - %483 = load i16, ptr %482, align 2, !tbaa !32 - %484 = sext i16 %483 to i32 - %485 = mul nsw i32 %484, 5 - %reass.sub18 = sub nsw i32 %481, %474 - %486 = add nsw i32 %reass.sub18, 4 - %487 = add nsw i32 %486, %485 - %488 = ashr i32 %487, 3 - %489 = add nsw i32 %488, %468 - %490 = shl i32 %489, %3 - %491 = ashr i32 %490, 1 - %492 = mul nsw i32 %484, 11 - %493 = add nsw i32 %474, 4 - %494 = sub nsw i32 %493, %481 - %495 = add nsw i32 %494, %492 - %496 = ashr i32 %495, 3 - %497 = sub nsw i32 %496, %468 - %498 = shl i32 %497, %3 - %499 = ashr i32 %498, 1 - br i1 %4, label %500, label %505 - -500: ; preds = %461 - %501 = tail call i32 @llvm.smax.i32(i32 %491, i32 0) + br label %459 + +459: ; preds = %.loopexit13, %.loopexit, %173, %160 + %460 = phi ptr [ %170, %160 ], [ %170, %.loopexit ], [ %179, %.loopexit13 ], [ %179, %173 ] + %461 = phi i32 [ 1, %160 ], [ %456, %.loopexit ], [ %458, %.loopexit13 ], [ 1, %173 ] + %462 = icmp ugt i32 %12, %461 + tail call void @llvm.assume(i1 %462) + %463 = zext nneg i32 %461 to i64 + %464 = getelementptr inbounds i16, ptr %126, i64 %463 + %465 = load i16, ptr %464, align 2, !tbaa !32 + %466 = sext i16 %465 to i32 + %467 = add nsw i32 %461, -2 + %468 = icmp ugt i32 %57, %467 + tail call void @llvm.assume(i1 %468) + %469 = zext nneg i32 %467 to i64 + %470 = getelementptr inbounds i16, ptr %134, i64 %469 + %471 = load i16, ptr %470, align 2, !tbaa !32 + %472 = sext i16 %471 to i32 + %473 = add nsw i32 %461, -1 + %474 = icmp ugt i32 %57, %473 + tail call void @llvm.assume(i1 %474) + %475 = zext nneg i32 %473 to i64 + %476 = getelementptr inbounds i16, ptr %134, i64 %475 + %477 = load i16, ptr %476, align 2, !tbaa !32 + %478 = sext i16 %477 to i32 + %479 = shl nsw i32 %478, 2 + %480 = getelementptr inbounds i16, ptr %134, i64 %463 + %481 = load i16, ptr %480, align 2, !tbaa !32 + %482 = sext i16 %481 to i32 + %483 = mul nsw i32 %482, 5 + %reass.sub18 = sub nsw i32 %479, %472 + %484 = add nsw i32 %reass.sub18, 4 + %485 = add nsw i32 %484, %483 + %486 = ashr i32 %485, 3 + %487 = add nsw i32 %486, %466 + %488 = shl i32 %487, %3 + %489 = ashr i32 %488, 1 + %490 = mul nsw i32 %482, 11 + %491 = add nsw i32 %472, 4 + %492 = sub nsw i32 %491, %479 + %493 = add nsw i32 %492, %490 + %494 = ashr i32 %493, 3 + %495 = sub nsw i32 %494, %466 + %496 = shl i32 %495, %3 + %497 = ashr i32 %496, 1 + br i1 %4, label %498, label %503 + +498: ; preds = %459 + %499 = tail call i32 @llvm.smax.i32(i32 %489, i32 0) + %500 = tail call i32 @llvm.umin.i32(i32 %499, i32 16383) + %501 = tail call i32 @llvm.smax.i32(i32 %497, i32 0) %502 = tail call i32 @llvm.umin.i32(i32 %501, i32 16383) - %503 = tail call i32 @llvm.smax.i32(i32 %499, i32 0) - %504 = tail call i32 @llvm.umin.i32(i32 %503, i32 16383) - br label %505 - -505: ; preds = %500, %461 - %506 = phi i32 [ %504, %500 ], [ %499, %461 ] - %507 = phi i32 [ %502, %500 ], [ %491, %461 ] - %508 = trunc i32 %507 to i16 - %509 = shl nuw nsw i32 %463, 1 - %510 = zext nneg i32 %509 to i64 - %511 = getelementptr inbounds i16, ptr %462, i64 %510 - store i16 %508, ptr %511, align 2, !tbaa !32 - %512 = trunc i32 %506 to i16 - %513 = or disjoint i32 %509, 1 - %514 = icmp ugt i32 %27, %513 - tail call void @llvm.assume(i1 %514) - %515 = zext nneg i32 %513 to i64 - %516 = getelementptr inbounds i16, ptr %462, i64 %515 - store i16 %512, ptr %516, align 2, !tbaa !32 - %517 = add nuw nsw i64 %122, 1 - %518 = icmp eq i64 %517, %76 - br i1 %518, label %120, label %121, !llvm.loop !119 - -519: ; preds = %32 - %520 = landingpad { ptr, i32 } + br label %503 + +503: ; preds = %498, %459 + %504 = phi i32 [ %502, %498 ], [ %497, %459 ] + %505 = phi i32 [ %500, %498 ], [ %489, %459 ] + %506 = trunc i32 %505 to i16 + %507 = shl nuw nsw i32 %461, 1 + %508 = zext nneg i32 %507 to i64 + %509 = getelementptr inbounds i16, ptr %460, i64 %508 + store i16 %506, ptr %509, align 2, !tbaa !32 + %510 = trunc i32 %504 to i16 + %511 = or disjoint i32 %507, 1 + %512 = icmp ugt i32 %27, %511 + tail call void @llvm.assume(i1 %512) + %513 = zext nneg i32 %511 to i64 + %514 = getelementptr inbounds i16, ptr %460, i64 %513 + store i16 %510, ptr %514, align 2, !tbaa !32 + %515 = add nuw nsw i64 %122, 1 + %516 = icmp eq i64 %515, %76 + br i1 %516, label %120, label %121, !llvm.loop !119 + +517: ; preds = %32 + %518 = landingpad { ptr, i32 } catch ptr null - %521 = extractvalue { ptr, i32 } %520, 0 - tail call void @__clang_call_terminate(ptr %521) #29 + %519 = extractvalue { ptr, i32 } %518, 0 + tail call void @__clang_call_terminate(ptr %519) #29 unreachable } @@ -7326,7 +7324,7 @@ define linkonce_odr hidden void @_ZNK8rawspeed15VC5Decompressor28combineFinalLow br label %259 259: ; preds = %.loopexit, %139 - %260 = phi i64 [ 0, %139 ], [ %479, %.loopexit ] + %260 = phi i64 [ 0, %139 ], [ %477, %.loopexit ] %261 = icmp ult i64 %260, %148 tail call void @llvm.assume(i1 %261) %262 = mul nuw nsw i64 %260, %149 @@ -7402,8 +7400,8 @@ define linkonce_odr hidden void @_ZNK8rawspeed15VC5Decompressor28combineFinalLow br label %317 317: ; preds = %317, %314 - %318 = phi i64 [ 0, %314 ], [ %416, %317 ] - %319 = phi <8 x i64> [ , %314 ], [ %417, %317 ] + %318 = phi i64 [ 0, %314 ], [ %414, %317 ] + %319 = phi <8 x i64> [ , %314 ], [ %415, %317 ] %320 = icmp ult <8 x i64> %319, %249 %321 = extractelement <8 x i1> %320, i64 0 tail call void @llvm.assume(i1 %321) @@ -7513,121 +7511,119 @@ define linkonce_odr hidden void @_ZNK8rawspeed15VC5Decompressor28combineFinalLow %394 = getelementptr inbounds i32, ptr %138, <8 x i64> %393 %395 = tail call <8 x i32> @llvm.masked.gather.v8i32.v8p0(<8 x ptr> %394, i32 4, <8 x i1> , <8 x i32> poison), !tbaa !19 %396 = shl nuw nsw <8 x i64> %319, - %397 = trunc <8 x i32> %380 to <8 x i16> - %398 = or disjoint <8 x i64> %396, - %399 = icmp ult <8 x i64> %398, %257 - %400 = extractelement <8 x i1> %399, i64 0 + %397 = or disjoint <8 x i64> %396, + %398 = icmp ult <8 x i64> %397, %257 + %399 = extractelement <8 x i1> %398, i64 0 + tail call void @llvm.assume(i1 %399) + %400 = extractelement <8 x i1> %398, i64 1 tail call void @llvm.assume(i1 %400) - %401 = extractelement <8 x i1> %399, i64 1 + %401 = extractelement <8 x i1> %398, i64 2 tail call void @llvm.assume(i1 %401) - %402 = extractelement <8 x i1> %399, i64 2 + %402 = extractelement <8 x i1> %398, i64 3 tail call void @llvm.assume(i1 %402) - %403 = extractelement <8 x i1> %399, i64 3 + %403 = extractelement <8 x i1> %398, i64 4 tail call void @llvm.assume(i1 %403) - %404 = extractelement <8 x i1> %399, i64 4 + %404 = extractelement <8 x i1> %398, i64 5 tail call void @llvm.assume(i1 %404) - %405 = extractelement <8 x i1> %399, i64 5 + %405 = extractelement <8 x i1> %398, i64 6 tail call void @llvm.assume(i1 %405) - %406 = extractelement <8 x i1> %399, i64 6 + %406 = extractelement <8 x i1> %398, i64 7 tail call void @llvm.assume(i1 %406) - %407 = extractelement <8 x i1> %399, i64 7 - tail call void @llvm.assume(i1 %407) - %408 = extractelement <8 x i64> %398, i64 0 - %409 = trunc <8 x i32> %385 to <8 x i16> - %410 = getelementptr i16, ptr %315, i64 %408 - %411 = shufflevector <8 x i16> %397, <8 x i16> %409, <16 x i32> - store <16 x i16> %411, ptr %410, align 2, !tbaa !32 - %412 = trunc <8 x i32> %390 to <8 x i16> - %413 = trunc <8 x i32> %395 to <8 x i16> - %414 = getelementptr i16, ptr %316, i64 %408 - %415 = shufflevector <8 x i16> %412, <8 x i16> %413, <16 x i32> - store <16 x i16> %415, ptr %414, align 2, !tbaa !32 - %416 = add nuw i64 %318, 8 - %417 = add <8 x i64> %319, - %418 = icmp eq i64 %416, %247 - br i1 %418, label %419, label %317, !llvm.loop !397 - -419: ; preds = %317 + %407 = extractelement <8 x i64> %397, i64 0 + %408 = getelementptr i16, ptr %315, i64 %407 + %409 = shufflevector <8 x i32> %380, <8 x i32> %385, <16 x i32> + %410 = trunc <16 x i32> %409 to <16 x i16> + store <16 x i16> %410, ptr %408, align 2, !tbaa !32 + %411 = getelementptr i16, ptr %316, i64 %407 + %412 = shufflevector <8 x i32> %390, <8 x i32> %395, <16 x i32> + %413 = trunc <16 x i32> %412 to <16 x i16> + store <16 x i16> %413, ptr %411, align 2, !tbaa !32 + %414 = add nuw i64 %318, 8 + %415 = add <8 x i64> %319, + %416 = icmp eq i64 %414, %247 + br i1 %416, label %417, label %317, !llvm.loop !397 + +417: ; preds = %317 br i1 %258, label %.loopexit, label %.preheader -.preheader: ; preds = %419, %295, %259 - %.ph = phi i64 [ %247, %419 ], [ 0, %259 ], [ 0, %295 ] - br label %420 - -420: ; preds = %.preheader, %420 - %421 = phi i64 [ %477, %420 ], [ %.ph, %.preheader ] - %422 = icmp ult i64 %421, %143 - tail call void @llvm.assume(i1 %422) - %423 = getelementptr inbounds i16, ptr %265, i64 %421 - %424 = load i16, ptr %423, align 2, !tbaa !32 - %425 = sext i16 %424 to i32 - %426 = icmp ult i64 %421, %144 - tail call void @llvm.assume(i1 %426) - %427 = getelementptr inbounds i16, ptr %270, i64 %421 - %428 = load i16, ptr %427, align 2, !tbaa !32 - %429 = sext i16 %428 to i32 - %430 = icmp ult i64 %421, %145 - tail call void @llvm.assume(i1 %430) - %431 = getelementptr inbounds i16, ptr %275, i64 %421 - %432 = load i16, ptr %431, align 2, !tbaa !32 - %433 = icmp ult i64 %421, %146 - tail call void @llvm.assume(i1 %433) - %434 = getelementptr inbounds i16, ptr %280, i64 %421 - %435 = sext i16 %432 to i32 - %436 = load i16, ptr %434, align 2, !tbaa !32 - %437 = sext i16 %436 to i32 - %438 = add nsw i32 %437, -2048 - %439 = shl nsw i32 %429, 1 - %440 = add nsw i32 %425, -4096 - %441 = add nsw i32 %439, %440 - %442 = shl nsw i32 %435, 1 - %443 = add nsw i32 %442, %440 - %444 = add nsw i32 %438, %425 - %445 = sub nsw i32 %425, %438 - %446 = tail call i32 @llvm.smax.i32(i32 %441, i32 0) - %447 = tail call i32 @llvm.umin.i32(i32 %446, i32 4095) - %448 = zext nneg i32 %447 to i64 - %449 = getelementptr inbounds i32, ptr %138, i64 %448 - %450 = load i32, ptr %449, align 4, !tbaa !19 - %451 = tail call i32 @llvm.smax.i32(i32 %444, i32 0) - %452 = tail call i32 @llvm.umin.i32(i32 %451, i32 4095) - %453 = zext nneg i32 %452 to i64 - %454 = getelementptr inbounds i32, ptr %138, i64 %453 - %455 = load i32, ptr %454, align 4, !tbaa !19 - %456 = tail call i32 @llvm.smax.i32(i32 %445, i32 0) - %457 = tail call i32 @llvm.umin.i32(i32 %456, i32 4095) - %458 = zext nneg i32 %457 to i64 - %459 = getelementptr inbounds i32, ptr %138, i64 %458 - %460 = load i32, ptr %459, align 4, !tbaa !19 - %461 = tail call i32 @llvm.smax.i32(i32 %443, i32 0) - %462 = tail call i32 @llvm.umin.i32(i32 %461, i32 4095) - %463 = zext nneg i32 %462 to i64 - %464 = getelementptr inbounds i32, ptr %138, i64 %463 - %465 = load i32, ptr %464, align 4, !tbaa !19 - %466 = shl nuw nsw i64 %421, 1 - %467 = getelementptr inbounds i16, ptr %287, i64 %466 - %468 = trunc i32 %450 to i16 - store i16 %468, ptr %467, align 2, !tbaa !32 - %469 = or disjoint i64 %466, 1 - %470 = icmp ult i64 %469, %140 - tail call void @llvm.assume(i1 %470) - %471 = getelementptr inbounds i16, ptr %287, i64 %469 - %472 = trunc i32 %455 to i16 +.preheader: ; preds = %417, %295, %259 + %.ph = phi i64 [ %247, %417 ], [ 0, %259 ], [ 0, %295 ] + br label %418 + +418: ; preds = %.preheader, %418 + %419 = phi i64 [ %475, %418 ], [ %.ph, %.preheader ] + %420 = icmp ult i64 %419, %143 + tail call void @llvm.assume(i1 %420) + %421 = getelementptr inbounds i16, ptr %265, i64 %419 + %422 = load i16, ptr %421, align 2, !tbaa !32 + %423 = sext i16 %422 to i32 + %424 = icmp ult i64 %419, %144 + tail call void @llvm.assume(i1 %424) + %425 = getelementptr inbounds i16, ptr %270, i64 %419 + %426 = load i16, ptr %425, align 2, !tbaa !32 + %427 = sext i16 %426 to i32 + %428 = icmp ult i64 %419, %145 + tail call void @llvm.assume(i1 %428) + %429 = getelementptr inbounds i16, ptr %275, i64 %419 + %430 = load i16, ptr %429, align 2, !tbaa !32 + %431 = icmp ult i64 %419, %146 + tail call void @llvm.assume(i1 %431) + %432 = getelementptr inbounds i16, ptr %280, i64 %419 + %433 = sext i16 %430 to i32 + %434 = load i16, ptr %432, align 2, !tbaa !32 + %435 = sext i16 %434 to i32 + %436 = add nsw i32 %435, -2048 + %437 = shl nsw i32 %427, 1 + %438 = add nsw i32 %423, -4096 + %439 = add nsw i32 %437, %438 + %440 = shl nsw i32 %433, 1 + %441 = add nsw i32 %440, %438 + %442 = add nsw i32 %436, %423 + %443 = sub nsw i32 %423, %436 + %444 = tail call i32 @llvm.smax.i32(i32 %439, i32 0) + %445 = tail call i32 @llvm.umin.i32(i32 %444, i32 4095) + %446 = zext nneg i32 %445 to i64 + %447 = getelementptr inbounds i32, ptr %138, i64 %446 + %448 = load i32, ptr %447, align 4, !tbaa !19 + %449 = tail call i32 @llvm.smax.i32(i32 %442, i32 0) + %450 = tail call i32 @llvm.umin.i32(i32 %449, i32 4095) + %451 = zext nneg i32 %450 to i64 + %452 = getelementptr inbounds i32, ptr %138, i64 %451 + %453 = load i32, ptr %452, align 4, !tbaa !19 + %454 = tail call i32 @llvm.smax.i32(i32 %443, i32 0) + %455 = tail call i32 @llvm.umin.i32(i32 %454, i32 4095) + %456 = zext nneg i32 %455 to i64 + %457 = getelementptr inbounds i32, ptr %138, i64 %456 + %458 = load i32, ptr %457, align 4, !tbaa !19 + %459 = tail call i32 @llvm.smax.i32(i32 %441, i32 0) + %460 = tail call i32 @llvm.umin.i32(i32 %459, i32 4095) + %461 = zext nneg i32 %460 to i64 + %462 = getelementptr inbounds i32, ptr %138, i64 %461 + %463 = load i32, ptr %462, align 4, !tbaa !19 + %464 = shl nuw nsw i64 %419, 1 + %465 = getelementptr inbounds i16, ptr %287, i64 %464 + %466 = trunc i32 %448 to i16 + store i16 %466, ptr %465, align 2, !tbaa !32 + %467 = or disjoint i64 %464, 1 + %468 = icmp ult i64 %467, %140 + tail call void @llvm.assume(i1 %468) + %469 = getelementptr inbounds i16, ptr %287, i64 %467 + %470 = trunc i32 %453 to i16 + store i16 %470, ptr %469, align 2, !tbaa !32 + %471 = getelementptr inbounds i16, ptr %294, i64 %464 + %472 = trunc i32 %458 to i16 store i16 %472, ptr %471, align 2, !tbaa !32 - %473 = getelementptr inbounds i16, ptr %294, i64 %466 - %474 = trunc i32 %460 to i16 + %473 = getelementptr inbounds i16, ptr %294, i64 %467 + %474 = trunc i32 %463 to i16 store i16 %474, ptr %473, align 2, !tbaa !32 - %475 = getelementptr inbounds i16, ptr %294, i64 %469 - %476 = trunc i32 %465 to i16 - store i16 %476, ptr %475, align 2, !tbaa !32 - %477 = add nuw nsw i64 %421, 1 - %478 = icmp eq i64 %477, %161 - br i1 %478, label %.loopexit, label %420, !llvm.loop !398 - -.loopexit: ; preds = %420, %419 - %479 = add nuw nsw i64 %260, 1 - %480 = icmp eq i64 %479, %160 - br i1 %480, label %.loopexit4, label %259, !llvm.loop !399 + %475 = add nuw nsw i64 %419, 1 + %476 = icmp eq i64 %475, %161 + br i1 %476, label %.loopexit, label %418, !llvm.loop !398 + +.loopexit: ; preds = %418, %417 + %477 = add nuw nsw i64 %260, 1 + %478 = icmp eq i64 %477, %160 + br i1 %478, label %.loopexit4, label %259, !llvm.loop !399 .loopexit4: ; preds = %.loopexit, %135, %1 ret void diff --git a/bench/darktable/optimized/avif.c.ll b/bench/darktable/optimized/avif.c.ll index fe290daf3c5..bed7e38259f 100644 --- a/bench/darktable/optimized/avif.c.ll +++ b/bench/darktable/optimized/avif.c.ll @@ -172,11 +172,11 @@ define noundef i32 @write_image(ptr nocapture noundef readonly %0, ptr noundef % br i1 %43, label %47, label %49 47: ; preds = %39 - br i1 %46, label %525, label %48 + br i1 %46, label %523, label %48 48: ; preds = %47 tail call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.1, ptr noundef %1) #17 - br label %525 + br label %523 49: ; preds = %39 br i1 %46, label %59, label %50 @@ -310,7 +310,7 @@ define noundef i32 @write_image(ptr nocapture noundef readonly %0, ptr noundef % 112: ; preds = %104, %100 call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %14) #17 - br label %525 + br label %523 113: ; preds = %110, %89 %114 = phi ptr [ null, %89 ], [ %111, %110 ] @@ -328,9 +328,9 @@ define noundef i32 @write_image(ptr nocapture noundef readonly %0, ptr noundef % %122 = zext i32 %121 to i64 %123 = getelementptr inbounds i8, ptr %13, i64 32 %124 = load ptr, ptr %123, align 8, !tbaa !48 - switch i32 %23, label %390 [ - i32 12, label %265 - i32 10, label %265 + switch i32 %23, label %388 [ + i32 12, label %264 + i32 10, label %264 i32 8, label %125 ] @@ -369,7 +369,7 @@ define noundef i32 @write_image(ptr nocapture noundef readonly %0, ptr noundef % br label %155 155: ; preds = %.loopexit27, %129 - %156 = phi i64 [ %263, %.loopexit27 ], [ 0, %129 ] + %156 = phi i64 [ %262, %.loopexit27 ], [ 0, %129 ] %157 = mul i64 %156, %18 %158 = mul i64 %156, %122 %159 = getelementptr i8, ptr %124, i64 %158 @@ -396,8 +396,8 @@ define noundef i32 @write_image(ptr nocapture noundef readonly %0, ptr noundef % br label %176 176: ; preds = %176, %173 - %177 = phi i64 [ 0, %173 ], [ %216, %176 ] - %178 = phi <8 x i64> [ , %173 ], [ %217, %176 ] + %177 = phi i64 [ 0, %173 ], [ %215, %176 ] + %178 = phi <8 x i64> [ , %173 ], [ %216, %176 ] %179 = add <8 x i64> %178, %175 %180 = shl <8 x i64> %179, %181 = getelementptr inbounds float, ptr %2, <8 x i64> %180 @@ -411,509 +411,507 @@ define noundef i32 @write_image(ptr nocapture noundef readonly %0, ptr noundef % %189 = select <8 x i1> %188, <8 x float> %185, <8 x float> zeroinitializer %190 = select <8 x i1> %186, <8 x float> %153, <8 x float> %189 %191 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %190) - %192 = fptoui <8 x float> %191 to <8 x i8> - %193 = getelementptr inbounds i8, <8 x ptr> %181, i64 4 - %194 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %193, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49, !alias.scope !51 - %195 = fmul reassoc nsz arcp contract afn <8 x float> %194, %153 - %196 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %195, %153 - %197 = fcmp reassoc nsz arcp contract afn uge <8 x float> %195, zeroinitializer - %198 = or <8 x i1> %197, %196 - %199 = select <8 x i1> %198, <8 x float> %195, <8 x float> zeroinitializer - %200 = select <8 x i1> %196, <8 x float> %153, <8 x float> %199 - %201 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %200) - %202 = fptoui <8 x float> %201 to <8 x i8> - %203 = getelementptr inbounds i8, <8 x ptr> %181, i64 8 - %204 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %203, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49, !alias.scope !51 - %205 = fmul reassoc nsz arcp contract afn <8 x float> %204, %153 - %206 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %205, %153 - %207 = fcmp reassoc nsz arcp contract afn uge <8 x float> %205, zeroinitializer - %208 = or <8 x i1> %207, %206 - %209 = select <8 x i1> %208, <8 x float> %205, <8 x float> zeroinitializer - %210 = select <8 x i1> %206, <8 x float> %153, <8 x float> %209 - %211 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %210) - %212 = fptoui <8 x float> %211 to <8 x i8> - %213 = shufflevector <8 x i8> %192, <8 x i8> %202, <16 x i32> - %214 = shufflevector <8 x i8> %212, <8 x i8> poison, <16 x i32> - %215 = shufflevector <16 x i8> %213, <16 x i8> %214, <24 x i32> - store <24 x i8> %215, ptr %183, align 1, !tbaa !54 - %216 = add nuw i64 %177, 8 - %217 = add <8 x i64> %178, - %218 = icmp eq i64 %216, %151 - br i1 %218, label %219, label %176, !llvm.loop !55 - -219: ; preds = %176 + %192 = getelementptr inbounds i8, <8 x ptr> %181, i64 4 + %193 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %192, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49, !alias.scope !51 + %194 = fmul reassoc nsz arcp contract afn <8 x float> %193, %153 + %195 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %194, %153 + %196 = fcmp reassoc nsz arcp contract afn uge <8 x float> %194, zeroinitializer + %197 = or <8 x i1> %196, %195 + %198 = select <8 x i1> %197, <8 x float> %194, <8 x float> zeroinitializer + %199 = select <8 x i1> %195, <8 x float> %153, <8 x float> %198 + %200 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %199) + %201 = getelementptr inbounds i8, <8 x ptr> %181, i64 8 + %202 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %201, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49, !alias.scope !51 + %203 = fmul reassoc nsz arcp contract afn <8 x float> %202, %153 + %204 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %203, %153 + %205 = fcmp reassoc nsz arcp contract afn uge <8 x float> %203, zeroinitializer + %206 = or <8 x i1> %205, %204 + %207 = select <8 x i1> %206, <8 x float> %203, <8 x float> zeroinitializer + %208 = select <8 x i1> %204, <8 x float> %153, <8 x float> %207 + %209 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %208) + %210 = fptoui <8 x float> %209 to <8 x i8> + %211 = shufflevector <8 x float> %191, <8 x float> %200, <16 x i32> + %212 = fptoui <16 x float> %211 to <16 x i8> + %213 = shufflevector <8 x i8> %210, <8 x i8> poison, <16 x i32> + %214 = shufflevector <16 x i8> %212, <16 x i8> %213, <24 x i32> + store <24 x i8> %214, ptr %183, align 1, !tbaa !54 + %215 = add nuw i64 %177, 8 + %216 = add <8 x i64> %178, + %217 = icmp eq i64 %215, %151 + br i1 %217, label %218, label %176, !llvm.loop !55 + +218: ; preds = %176 br i1 %154, label %.loopexit27, label %.preheader32 -.preheader32: ; preds = %219, %160, %155 - %.ph33 = phi i64 [ %151, %219 ], [ 0, %155 ], [ 0, %160 ] - br label %220 - -220: ; preds = %.preheader32, %256 - %221 = phi i64 [ %261, %256 ], [ %.ph33, %.preheader32 ] - %222 = add i64 %221, %157 - %223 = shl i64 %222, 2 - %224 = getelementptr inbounds float, ptr %2, i64 %223 - %225 = mul i64 %221, 3 - %226 = getelementptr i8, ptr %159, i64 %225 - %227 = load float, ptr %224, align 4, !tbaa !49 - %228 = fmul reassoc nsz arcp contract afn float %227, %119 - %229 = fcmp reassoc nsz arcp contract afn ogt float %228, %119 - br i1 %229, label %233, label %230 - -230: ; preds = %220 - %231 = fcmp reassoc nsz arcp contract afn olt float %228, 0.000000e+00 - br i1 %231, label %233, label %232 - -232: ; preds = %230 - br label %233 - -233: ; preds = %232, %230, %220 - %234 = phi reassoc nsz arcp contract afn float [ %228, %232 ], [ 0.000000e+00, %230 ], [ %119, %220 ] - %235 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %234) - %236 = fptoui float %235 to i8 - store i8 %236, ptr %226, align 1, !tbaa !54 - %237 = getelementptr inbounds i8, ptr %224, i64 4 - %238 = load float, ptr %237, align 4, !tbaa !49 - %239 = fmul reassoc nsz arcp contract afn float %238, %119 - %240 = fcmp reassoc nsz arcp contract afn ogt float %239, %119 - br i1 %240, label %244, label %241 - -241: ; preds = %233 - %242 = fcmp reassoc nsz arcp contract afn olt float %239, 0.000000e+00 - br i1 %242, label %244, label %243 - -243: ; preds = %241 - br label %244 - -244: ; preds = %243, %241, %233 - %245 = phi reassoc nsz arcp contract afn float [ %239, %243 ], [ 0.000000e+00, %241 ], [ %119, %233 ] - %246 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %245) - %247 = fptoui float %246 to i8 - %248 = getelementptr inbounds i8, ptr %226, i64 1 - store i8 %247, ptr %248, align 1, !tbaa !54 - %249 = getelementptr inbounds i8, ptr %224, i64 8 - %250 = load float, ptr %249, align 4, !tbaa !49 - %251 = fmul reassoc nsz arcp contract afn float %250, %119 - %252 = fcmp reassoc nsz arcp contract afn ogt float %251, %119 - br i1 %252, label %256, label %253 - -253: ; preds = %244 - %254 = fcmp reassoc nsz arcp contract afn olt float %251, 0.000000e+00 - br i1 %254, label %256, label %255 - -255: ; preds = %253 - br label %256 - -256: ; preds = %255, %253, %244 - %257 = phi reassoc nsz arcp contract afn float [ %251, %255 ], [ 0.000000e+00, %253 ], [ %119, %244 ] - %258 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %257) - %259 = fptoui float %258 to i8 - %260 = getelementptr inbounds i8, ptr %226, i64 2 - store i8 %259, ptr %260, align 1, !tbaa !54 - %261 = add nuw i64 %221, 1 - %262 = icmp eq i64 %261, %18 - br i1 %262, label %.loopexit27, label %220, !llvm.loop !58 - -.loopexit27: ; preds = %256, %219 - %263 = add nuw i64 %156, 1 - %264 = icmp eq i64 %263, %21 - br i1 %264, label %.loopexit26, label %155 - -265: ; preds = %113, %113 - %266 = icmp eq i32 %20, 0 - %267 = icmp eq i32 %17, 0 - %268 = select i1 %266, i1 true, i1 %267 - br i1 %268, label %.loopexit26, label %269 - -269: ; preds = %265 - %270 = add nsw i64 %18, -1 - %271 = icmp ult i32 %17, 8 - %272 = getelementptr i8, ptr %124, i64 4 - %273 = getelementptr i8, ptr %124, i64 2 - %274 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %270, i64 6) - %275 = extractvalue { i64, i1 } %274, 0 - %276 = extractvalue { i64, i1 } %274, 1 - %277 = and i64 %18, -8 - %278 = insertelement <8 x float> poison, float %119, i64 0 - %279 = shufflevector <8 x float> %278, <8 x float> poison, <8 x i32> zeroinitializer - %280 = icmp eq i64 %277, %18 - br label %281 - -281: ; preds = %.loopexit, %269 - %282 = phi i64 [ %388, %.loopexit ], [ 0, %269 ] - %283 = mul i64 %282, %18 - %284 = mul i64 %282, %122 - %285 = getelementptr i8, ptr %124, i64 %284 - br i1 %271, label %.preheader, label %286 - -286: ; preds = %281 - %287 = getelementptr i8, ptr %272, i64 %284 - %288 = getelementptr i8, ptr %273, i64 %284 - %289 = getelementptr i8, ptr %288, i64 %275 - %290 = icmp ult ptr %289, %288 - %291 = getelementptr i8, ptr %287, i64 %275 - %292 = icmp ult ptr %291, %287 - %293 = getelementptr i8, ptr %285, i64 %275 - %294 = icmp ult ptr %293, %285 - %295 = or i1 %276, %294 - %296 = or i1 %292, %290 - %297 = or i1 %296, %295 - br i1 %297, label %.preheader, label %298 - -298: ; preds = %286 - %299 = insertelement <8 x i64> poison, i64 %283, i64 0 - %300 = shufflevector <8 x i64> %299, <8 x i64> poison, <8 x i32> zeroinitializer - br label %301 - -301: ; preds = %301, %298 - %302 = phi i64 [ 0, %298 ], [ %341, %301 ] - %303 = phi <8 x i64> [ , %298 ], [ %342, %301 ] - %304 = add <8 x i64> %303, %300 - %305 = shl <8 x i64> %304, - %306 = getelementptr inbounds float, ptr %2, <8 x i64> %305 - %307 = mul i64 %302, 6 - %308 = getelementptr i8, ptr %285, i64 %307 - %309 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %306, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49 - %310 = fmul reassoc nsz arcp contract afn <8 x float> %309, %279 - %311 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %310, %279 - %312 = fcmp reassoc nsz arcp contract afn uge <8 x float> %310, zeroinitializer - %313 = or <8 x i1> %312, %311 - %314 = select <8 x i1> %313, <8 x float> %310, <8 x float> zeroinitializer - %315 = select <8 x i1> %311, <8 x float> %279, <8 x float> %314 - %316 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %315) - %317 = fptoui <8 x float> %316 to <8 x i16> - %318 = getelementptr inbounds i8, <8 x ptr> %306, i64 4 - %319 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %318, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49 - %320 = fmul reassoc nsz arcp contract afn <8 x float> %319, %279 - %321 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %320, %279 - %322 = fcmp reassoc nsz arcp contract afn uge <8 x float> %320, zeroinitializer - %323 = or <8 x i1> %322, %321 - %324 = select <8 x i1> %323, <8 x float> %320, <8 x float> zeroinitializer - %325 = select <8 x i1> %321, <8 x float> %279, <8 x float> %324 - %326 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %325) - %327 = fptoui <8 x float> %326 to <8 x i16> - %328 = getelementptr inbounds i8, <8 x ptr> %306, i64 8 - %329 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %328, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49 - %330 = fmul reassoc nsz arcp contract afn <8 x float> %329, %279 - %331 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %330, %279 - %332 = fcmp reassoc nsz arcp contract afn uge <8 x float> %330, zeroinitializer - %333 = or <8 x i1> %332, %331 - %334 = select <8 x i1> %333, <8 x float> %330, <8 x float> zeroinitializer - %335 = select <8 x i1> %331, <8 x float> %279, <8 x float> %334 - %336 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %335) - %337 = fptoui <8 x float> %336 to <8 x i16> - %338 = shufflevector <8 x i16> %317, <8 x i16> %327, <16 x i32> - %339 = shufflevector <8 x i16> %337, <8 x i16> poison, <16 x i32> - %340 = shufflevector <16 x i16> %338, <16 x i16> %339, <24 x i32> - store <24 x i16> %340, ptr %308, align 2, !tbaa !33 - %341 = add nuw i64 %302, 8 - %342 = add <8 x i64> %303, - %343 = icmp eq i64 %341, %277 - br i1 %343, label %344, label %301, !llvm.loop !59 - -344: ; preds = %301 - br i1 %280, label %.loopexit, label %.preheader - -.preheader: ; preds = %344, %286, %281 - %.ph = phi i64 [ %277, %344 ], [ 0, %281 ], [ 0, %286 ] - br label %345 - -345: ; preds = %.preheader, %381 - %346 = phi i64 [ %386, %381 ], [ %.ph, %.preheader ] - %347 = add i64 %346, %283 - %348 = shl i64 %347, 2 - %349 = getelementptr inbounds float, ptr %2, i64 %348 - %350 = mul i64 %346, 6 - %351 = getelementptr i8, ptr %285, i64 %350 - %352 = load float, ptr %349, align 4, !tbaa !49 - %353 = fmul reassoc nsz arcp contract afn float %352, %119 - %354 = fcmp reassoc nsz arcp contract afn ogt float %353, %119 - br i1 %354, label %358, label %355 - -355: ; preds = %345 - %356 = fcmp reassoc nsz arcp contract afn olt float %353, 0.000000e+00 - br i1 %356, label %358, label %357 - -357: ; preds = %355 - br label %358 - -358: ; preds = %357, %355, %345 - %359 = phi reassoc nsz arcp contract afn float [ %353, %357 ], [ 0.000000e+00, %355 ], [ %119, %345 ] - %360 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %359) - %361 = fptoui float %360 to i16 - store i16 %361, ptr %351, align 2, !tbaa !33 - %362 = getelementptr inbounds i8, ptr %349, i64 4 - %363 = load float, ptr %362, align 4, !tbaa !49 - %364 = fmul reassoc nsz arcp contract afn float %363, %119 - %365 = fcmp reassoc nsz arcp contract afn ogt float %364, %119 - br i1 %365, label %369, label %366 - -366: ; preds = %358 - %367 = fcmp reassoc nsz arcp contract afn olt float %364, 0.000000e+00 - br i1 %367, label %369, label %368 - -368: ; preds = %366 - br label %369 - -369: ; preds = %368, %366, %358 - %370 = phi reassoc nsz arcp contract afn float [ %364, %368 ], [ 0.000000e+00, %366 ], [ %119, %358 ] - %371 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %370) - %372 = fptoui float %371 to i16 - %373 = getelementptr inbounds i8, ptr %351, i64 2 - store i16 %372, ptr %373, align 2, !tbaa !33 - %374 = getelementptr inbounds i8, ptr %349, i64 8 - %375 = load float, ptr %374, align 4, !tbaa !49 - %376 = fmul reassoc nsz arcp contract afn float %375, %119 - %377 = fcmp reassoc nsz arcp contract afn ogt float %376, %119 - br i1 %377, label %381, label %378 - -378: ; preds = %369 - %379 = fcmp reassoc nsz arcp contract afn olt float %376, 0.000000e+00 - br i1 %379, label %381, label %380 - -380: ; preds = %378 - br label %381 - -381: ; preds = %380, %378, %369 - %382 = phi reassoc nsz arcp contract afn float [ %376, %380 ], [ 0.000000e+00, %378 ], [ %119, %369 ] - %383 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %382) - %384 = fptoui float %383 to i16 - %385 = getelementptr inbounds i8, ptr %351, i64 4 - store i16 %384, ptr %385, align 2, !tbaa !33 - %386 = add nuw i64 %346, 1 - %387 = icmp eq i64 %386, %18 - br i1 %387, label %.loopexit, label %345, !llvm.loop !60 - -.loopexit: ; preds = %381, %344 - %388 = add nuw i64 %282, 1 - %389 = icmp eq i64 %388, %21 - br i1 %389, label %.loopexit26, label %281 - -390: ; preds = %113 - %391 = call ptr @dcgettext(ptr noundef null, ptr noundef nonnull @.str.5, i32 noundef 5) #17 - call void (ptr, ...) @dt_control_log(ptr noundef %391) #17 - br label %525 - -.loopexit26: ; preds = %.loopexit27, %.loopexit, %265, %125 - %392 = call i32 @avifImageRGBToYUV(ptr noundef nonnull %42, ptr noundef nonnull %13) #17 - %393 = icmp ne ptr %5, null - %394 = icmp sgt i32 %6, 0 - %395 = and i1 %393, %394 - br i1 %395, label %396, label %404 - -396: ; preds = %.loopexit26 - %397 = zext nneg i32 %6 to i64 - call void @avifImageSetMetadataExif(ptr noundef nonnull %42, ptr noundef nonnull %5, i64 noundef %397) #17 - %398 = call ptr @dt_exif_xmp_read_string(i32 noundef %7) #17 - %399 = icmp eq ptr %398, null - br i1 %399, label %404, label %400 - -400: ; preds = %396 - %401 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %398) #19 - %402 = icmp eq i64 %401, 0 - br i1 %402, label %404, label %403 - -403: ; preds = %400 - call void @avifImageSetMetadataXMP(ptr noundef nonnull %42, ptr noundef nonnull %398, i64 noundef %401) #17 - call void @g_free(ptr noundef nonnull %398) #17 - br label %404 - -404: ; preds = %403, %400, %396, %.loopexit26 - %405 = call ptr @avifEncoderCreate() #17 - %406 = icmp eq ptr %405, null - br i1 %406, label %407, label %412 - -407: ; preds = %404 - %408 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 - %409 = and i32 %408, 262144 - %410 = icmp eq i32 %409, 0 - br i1 %410, label %525, label %411 - -411: ; preds = %407 +.preheader32: ; preds = %218, %160, %155 + %.ph33 = phi i64 [ %151, %218 ], [ 0, %155 ], [ 0, %160 ] + br label %219 + +219: ; preds = %.preheader32, %255 + %220 = phi i64 [ %260, %255 ], [ %.ph33, %.preheader32 ] + %221 = add i64 %220, %157 + %222 = shl i64 %221, 2 + %223 = getelementptr inbounds float, ptr %2, i64 %222 + %224 = mul i64 %220, 3 + %225 = getelementptr i8, ptr %159, i64 %224 + %226 = load float, ptr %223, align 4, !tbaa !49 + %227 = fmul reassoc nsz arcp contract afn float %226, %119 + %228 = fcmp reassoc nsz arcp contract afn ogt float %227, %119 + br i1 %228, label %232, label %229 + +229: ; preds = %219 + %230 = fcmp reassoc nsz arcp contract afn olt float %227, 0.000000e+00 + br i1 %230, label %232, label %231 + +231: ; preds = %229 + br label %232 + +232: ; preds = %231, %229, %219 + %233 = phi reassoc nsz arcp contract afn float [ %227, %231 ], [ 0.000000e+00, %229 ], [ %119, %219 ] + %234 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %233) + %235 = fptoui float %234 to i8 + store i8 %235, ptr %225, align 1, !tbaa !54 + %236 = getelementptr inbounds i8, ptr %223, i64 4 + %237 = load float, ptr %236, align 4, !tbaa !49 + %238 = fmul reassoc nsz arcp contract afn float %237, %119 + %239 = fcmp reassoc nsz arcp contract afn ogt float %238, %119 + br i1 %239, label %243, label %240 + +240: ; preds = %232 + %241 = fcmp reassoc nsz arcp contract afn olt float %238, 0.000000e+00 + br i1 %241, label %243, label %242 + +242: ; preds = %240 + br label %243 + +243: ; preds = %242, %240, %232 + %244 = phi reassoc nsz arcp contract afn float [ %238, %242 ], [ 0.000000e+00, %240 ], [ %119, %232 ] + %245 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %244) + %246 = fptoui float %245 to i8 + %247 = getelementptr inbounds i8, ptr %225, i64 1 + store i8 %246, ptr %247, align 1, !tbaa !54 + %248 = getelementptr inbounds i8, ptr %223, i64 8 + %249 = load float, ptr %248, align 4, !tbaa !49 + %250 = fmul reassoc nsz arcp contract afn float %249, %119 + %251 = fcmp reassoc nsz arcp contract afn ogt float %250, %119 + br i1 %251, label %255, label %252 + +252: ; preds = %243 + %253 = fcmp reassoc nsz arcp contract afn olt float %250, 0.000000e+00 + br i1 %253, label %255, label %254 + +254: ; preds = %252 + br label %255 + +255: ; preds = %254, %252, %243 + %256 = phi reassoc nsz arcp contract afn float [ %250, %254 ], [ 0.000000e+00, %252 ], [ %119, %243 ] + %257 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %256) + %258 = fptoui float %257 to i8 + %259 = getelementptr inbounds i8, ptr %225, i64 2 + store i8 %258, ptr %259, align 1, !tbaa !54 + %260 = add nuw i64 %220, 1 + %261 = icmp eq i64 %260, %18 + br i1 %261, label %.loopexit27, label %219, !llvm.loop !58 + +.loopexit27: ; preds = %255, %218 + %262 = add nuw i64 %156, 1 + %263 = icmp eq i64 %262, %21 + br i1 %263, label %.loopexit26, label %155 + +264: ; preds = %113, %113 + %265 = icmp eq i32 %20, 0 + %266 = icmp eq i32 %17, 0 + %267 = select i1 %265, i1 true, i1 %266 + br i1 %267, label %.loopexit26, label %268 + +268: ; preds = %264 + %269 = add nsw i64 %18, -1 + %270 = icmp ult i32 %17, 8 + %271 = getelementptr i8, ptr %124, i64 4 + %272 = getelementptr i8, ptr %124, i64 2 + %273 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %269, i64 6) + %274 = extractvalue { i64, i1 } %273, 0 + %275 = extractvalue { i64, i1 } %273, 1 + %276 = and i64 %18, -8 + %277 = insertelement <8 x float> poison, float %119, i64 0 + %278 = shufflevector <8 x float> %277, <8 x float> poison, <8 x i32> zeroinitializer + %279 = icmp eq i64 %276, %18 + br label %280 + +280: ; preds = %.loopexit, %268 + %281 = phi i64 [ %386, %.loopexit ], [ 0, %268 ] + %282 = mul i64 %281, %18 + %283 = mul i64 %281, %122 + %284 = getelementptr i8, ptr %124, i64 %283 + br i1 %270, label %.preheader, label %285 + +285: ; preds = %280 + %286 = getelementptr i8, ptr %271, i64 %283 + %287 = getelementptr i8, ptr %272, i64 %283 + %288 = getelementptr i8, ptr %287, i64 %274 + %289 = icmp ult ptr %288, %287 + %290 = getelementptr i8, ptr %286, i64 %274 + %291 = icmp ult ptr %290, %286 + %292 = getelementptr i8, ptr %284, i64 %274 + %293 = icmp ult ptr %292, %284 + %294 = or i1 %275, %293 + %295 = or i1 %291, %289 + %296 = or i1 %295, %294 + br i1 %296, label %.preheader, label %297 + +297: ; preds = %285 + %298 = insertelement <8 x i64> poison, i64 %282, i64 0 + %299 = shufflevector <8 x i64> %298, <8 x i64> poison, <8 x i32> zeroinitializer + br label %300 + +300: ; preds = %300, %297 + %301 = phi i64 [ 0, %297 ], [ %339, %300 ] + %302 = phi <8 x i64> [ , %297 ], [ %340, %300 ] + %303 = add <8 x i64> %302, %299 + %304 = shl <8 x i64> %303, + %305 = getelementptr inbounds float, ptr %2, <8 x i64> %304 + %306 = mul i64 %301, 6 + %307 = getelementptr i8, ptr %284, i64 %306 + %308 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %305, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49 + %309 = fmul reassoc nsz arcp contract afn <8 x float> %308, %278 + %310 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %309, %278 + %311 = fcmp reassoc nsz arcp contract afn uge <8 x float> %309, zeroinitializer + %312 = or <8 x i1> %311, %310 + %313 = select <8 x i1> %312, <8 x float> %309, <8 x float> zeroinitializer + %314 = select <8 x i1> %310, <8 x float> %278, <8 x float> %313 + %315 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %314) + %316 = getelementptr inbounds i8, <8 x ptr> %305, i64 4 + %317 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %316, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49 + %318 = fmul reassoc nsz arcp contract afn <8 x float> %317, %278 + %319 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %318, %278 + %320 = fcmp reassoc nsz arcp contract afn uge <8 x float> %318, zeroinitializer + %321 = or <8 x i1> %320, %319 + %322 = select <8 x i1> %321, <8 x float> %318, <8 x float> zeroinitializer + %323 = select <8 x i1> %319, <8 x float> %278, <8 x float> %322 + %324 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %323) + %325 = getelementptr inbounds i8, <8 x ptr> %305, i64 8 + %326 = call <8 x float> @llvm.masked.gather.v8f32.v8p0(<8 x ptr> %325, i32 4, <8 x i1> , <8 x float> poison), !tbaa !49 + %327 = fmul reassoc nsz arcp contract afn <8 x float> %326, %278 + %328 = fcmp reassoc nsz arcp contract afn ogt <8 x float> %327, %278 + %329 = fcmp reassoc nsz arcp contract afn uge <8 x float> %327, zeroinitializer + %330 = or <8 x i1> %329, %328 + %331 = select <8 x i1> %330, <8 x float> %327, <8 x float> zeroinitializer + %332 = select <8 x i1> %328, <8 x float> %278, <8 x float> %331 + %333 = call reassoc nsz arcp contract afn <8 x float> @llvm.round.v8f32(<8 x float> %332) + %334 = fptoui <8 x float> %333 to <8 x i16> + %335 = shufflevector <8 x float> %315, <8 x float> %324, <16 x i32> + %336 = fptoui <16 x float> %335 to <16 x i16> + %337 = shufflevector <8 x i16> %334, <8 x i16> poison, <16 x i32> + %338 = shufflevector <16 x i16> %336, <16 x i16> %337, <24 x i32> + store <24 x i16> %338, ptr %307, align 2, !tbaa !33 + %339 = add nuw i64 %301, 8 + %340 = add <8 x i64> %302, + %341 = icmp eq i64 %339, %276 + br i1 %341, label %342, label %300, !llvm.loop !59 + +342: ; preds = %300 + br i1 %279, label %.loopexit, label %.preheader + +.preheader: ; preds = %342, %285, %280 + %.ph = phi i64 [ %276, %342 ], [ 0, %280 ], [ 0, %285 ] + br label %343 + +343: ; preds = %.preheader, %379 + %344 = phi i64 [ %384, %379 ], [ %.ph, %.preheader ] + %345 = add i64 %344, %282 + %346 = shl i64 %345, 2 + %347 = getelementptr inbounds float, ptr %2, i64 %346 + %348 = mul i64 %344, 6 + %349 = getelementptr i8, ptr %284, i64 %348 + %350 = load float, ptr %347, align 4, !tbaa !49 + %351 = fmul reassoc nsz arcp contract afn float %350, %119 + %352 = fcmp reassoc nsz arcp contract afn ogt float %351, %119 + br i1 %352, label %356, label %353 + +353: ; preds = %343 + %354 = fcmp reassoc nsz arcp contract afn olt float %351, 0.000000e+00 + br i1 %354, label %356, label %355 + +355: ; preds = %353 + br label %356 + +356: ; preds = %355, %353, %343 + %357 = phi reassoc nsz arcp contract afn float [ %351, %355 ], [ 0.000000e+00, %353 ], [ %119, %343 ] + %358 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %357) + %359 = fptoui float %358 to i16 + store i16 %359, ptr %349, align 2, !tbaa !33 + %360 = getelementptr inbounds i8, ptr %347, i64 4 + %361 = load float, ptr %360, align 4, !tbaa !49 + %362 = fmul reassoc nsz arcp contract afn float %361, %119 + %363 = fcmp reassoc nsz arcp contract afn ogt float %362, %119 + br i1 %363, label %367, label %364 + +364: ; preds = %356 + %365 = fcmp reassoc nsz arcp contract afn olt float %362, 0.000000e+00 + br i1 %365, label %367, label %366 + +366: ; preds = %364 + br label %367 + +367: ; preds = %366, %364, %356 + %368 = phi reassoc nsz arcp contract afn float [ %362, %366 ], [ 0.000000e+00, %364 ], [ %119, %356 ] + %369 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %368) + %370 = fptoui float %369 to i16 + %371 = getelementptr inbounds i8, ptr %349, i64 2 + store i16 %370, ptr %371, align 2, !tbaa !33 + %372 = getelementptr inbounds i8, ptr %347, i64 8 + %373 = load float, ptr %372, align 4, !tbaa !49 + %374 = fmul reassoc nsz arcp contract afn float %373, %119 + %375 = fcmp reassoc nsz arcp contract afn ogt float %374, %119 + br i1 %375, label %379, label %376 + +376: ; preds = %367 + %377 = fcmp reassoc nsz arcp contract afn olt float %374, 0.000000e+00 + br i1 %377, label %379, label %378 + +378: ; preds = %376 + br label %379 + +379: ; preds = %378, %376, %367 + %380 = phi reassoc nsz arcp contract afn float [ %374, %378 ], [ 0.000000e+00, %376 ], [ %119, %367 ] + %381 = call reassoc nsz arcp contract afn float @llvm.round.f32(float %380) + %382 = fptoui float %381 to i16 + %383 = getelementptr inbounds i8, ptr %349, i64 4 + store i16 %382, ptr %383, align 2, !tbaa !33 + %384 = add nuw i64 %344, 1 + %385 = icmp eq i64 %384, %18 + br i1 %385, label %.loopexit, label %343, !llvm.loop !60 + +.loopexit: ; preds = %379, %342 + %386 = add nuw i64 %281, 1 + %387 = icmp eq i64 %386, %21 + br i1 %387, label %.loopexit26, label %280 + +388: ; preds = %113 + %389 = call ptr @dcgettext(ptr noundef null, ptr noundef nonnull @.str.5, i32 noundef 5) #17 + call void (ptr, ...) @dt_control_log(ptr noundef %389) #17 + br label %523 + +.loopexit26: ; preds = %.loopexit27, %.loopexit, %264, %125 + %390 = call i32 @avifImageRGBToYUV(ptr noundef nonnull %42, ptr noundef nonnull %13) #17 + %391 = icmp ne ptr %5, null + %392 = icmp sgt i32 %6, 0 + %393 = and i1 %391, %392 + br i1 %393, label %394, label %402 + +394: ; preds = %.loopexit26 + %395 = zext nneg i32 %6 to i64 + call void @avifImageSetMetadataExif(ptr noundef nonnull %42, ptr noundef nonnull %5, i64 noundef %395) #17 + %396 = call ptr @dt_exif_xmp_read_string(i32 noundef %7) #17 + %397 = icmp eq ptr %396, null + br i1 %397, label %402, label %398 + +398: ; preds = %394 + %399 = call i64 @strlen(ptr noundef nonnull dereferenceable(1) %396) #19 + %400 = icmp eq i64 %399, 0 + br i1 %400, label %402, label %401 + +401: ; preds = %398 + call void @avifImageSetMetadataXMP(ptr noundef nonnull %42, ptr noundef nonnull %396, i64 noundef %399) #17 + call void @g_free(ptr noundef nonnull %396) #17 + br label %402 + +402: ; preds = %401, %398, %394, %.loopexit26 + %403 = call ptr @avifEncoderCreate() #17 + %404 = icmp eq ptr %403, null + br i1 %404, label %405, label %410 + +405: ; preds = %402 + %406 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 + %407 = and i32 %406, 262144 + %408 = icmp eq i32 %407, 0 + br i1 %408, label %523, label %409 + +409: ; preds = %405 call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.6, ptr noundef %1) #17 - br label %525 - -412: ; preds = %404 - %413 = getelementptr inbounds i8, ptr %0, i64 156 - %414 = load i32, ptr %413, align 4, !tbaa !29 - switch i32 %414, label %437 [ - i32 0, label %415 - i32 1, label %418 + br label %523 + +410: ; preds = %402 + %411 = getelementptr inbounds i8, ptr %0, i64 156 + %412 = load i32, ptr %411, align 4, !tbaa !29 + switch i32 %412, label %435 [ + i32 0, label %413 + i32 1, label %416 ] -415: ; preds = %412 - %416 = getelementptr inbounds i8, ptr %405, i64 32 - store i32 1, ptr %416, align 8, !tbaa !61 - %417 = getelementptr inbounds i8, ptr %405, i64 8 - store i32 0, ptr %417, align 8, !tbaa !65 - br label %434 - -418: ; preds = %412 - %419 = getelementptr inbounds i8, ptr %405, i64 32 - store i32 -1, ptr %419, align 8, !tbaa !61 - %420 = getelementptr inbounds i8, ptr %0, i64 160 - %421 = load i32, ptr %420, align 4, !tbaa !30 - %422 = sub i32 100, %421 - %423 = mul i32 %422, 63 - %424 = add i32 %423, 50 - %425 = udiv i32 %424, 100 - %426 = icmp ugt i32 %424, 6899 - %427 = call i32 @llvm.umax.i32(i32 %425, i32 5) - %428 = add nsw i32 %427, -5 - %429 = select i1 %426, i32 63, i32 %428 - %430 = getelementptr inbounds i8, ptr %405, i64 8 - store i32 %429, ptr %430, align 8, !tbaa !65 - %431 = icmp ugt i32 %424, 5899 - %432 = add nuw nsw i32 %425, 5 - %433 = select i1 %431, i32 63, i32 %432 - br label %434 - -434: ; preds = %418, %415 - %435 = phi i32 [ %433, %418 ], [ 0, %415 ] - %436 = getelementptr inbounds i8, ptr %405, i64 12 - store i32 %435, ptr %436, align 4, !tbaa !66 - br label %437 - -437: ; preds = %434, %412 - %438 = getelementptr inbounds i8, ptr %0, i64 164 - %439 = load i32, ptr %438, align 4, !tbaa !67 - %440 = icmp eq i32 %439, 0 - br i1 %440, label %441, label %475 - -441: ; preds = %437 - %442 = icmp ugt i32 %17, 6143 - %443 = icmp ugt i32 %20, 6143 - %444 = select i1 %442, i64 11, i64 10 - %445 = lshr i64 %18, %444 - %446 = trunc i64 %445 to i32 - %447 = icmp sgt i32 %446, 63 - br i1 %447, label %454, label %448 - -448: ; preds = %441 - %449 = shl i64 %445, 32 - %450 = ashr exact i64 %449, 32 - %451 = getelementptr inbounds [64 x i32], ptr @floor_log2.floor_log2_table, i64 0, i64 %450 - %452 = load i32, ptr %451, align 4, !tbaa !43 - %453 = sdiv i32 %452, 2 - br label %454 - -454: ; preds = %448, %441 - %455 = phi i32 [ %453, %448 ], [ 32, %441 ] - %456 = getelementptr inbounds i8, ptr %405, i64 28 - store i32 %455, ptr %456, align 4, !tbaa !68 - %457 = select i1 %443, i64 11, i64 10 - %458 = lshr i64 %21, %457 - %459 = trunc i64 %458 to i32 - %460 = icmp sgt i32 %459, 63 - br i1 %460, label %467, label %461 - -461: ; preds = %454 - %462 = shl i64 %458, 32 - %463 = ashr exact i64 %462, 32 - %464 = getelementptr inbounds [64 x i32], ptr @floor_log2.floor_log2_table, i64 0, i64 %463 - %465 = load i32, ptr %464, align 4, !tbaa !43 - %466 = sdiv i32 %465, 2 - br label %467 - -467: ; preds = %461, %454 - %468 = phi i32 [ %466, %461 ], [ 32, %454 ] - %469 = getelementptr inbounds i8, ptr %405, i64 24 - store i32 %468, ptr %469, align 8, !tbaa !69 - %470 = shl nuw i32 1, %468 - %471 = shl i32 %470, %455 - %472 = icmp ne i32 %471, 0 - %473 = zext i1 %472 to i32 - %474 = getelementptr inbounds i8, ptr %405, i64 4 - store i32 %473, ptr %474, align 4, !tbaa !70 - br label %475 - -475: ; preds = %467, %437 - %476 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 - %477 = and i32 %476, 262144 - %478 = icmp eq i32 %477, 0 - br i1 %478, label %492, label %479 - -479: ; preds = %475 - %480 = getelementptr inbounds i8, ptr %0, i64 160 - %481 = load i32, ptr %480, align 4, !tbaa !30 - %482 = getelementptr inbounds i8, ptr %405, i64 12 - %483 = load i32, ptr %482, align 4, !tbaa !66 - %484 = getelementptr inbounds i8, ptr %405, i64 8 - %485 = load i32, ptr %484, align 8, !tbaa !65 - %486 = getelementptr inbounds i8, ptr %405, i64 28 - %487 = load i32, ptr %486, align 4, !tbaa !68 - %488 = getelementptr inbounds i8, ptr %405, i64 24 - %489 = load i32, ptr %488, align 8, !tbaa !69 - %490 = getelementptr inbounds i8, ptr %405, i64 4 - %491 = load i32, ptr %490, align 4, !tbaa !70 - call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.7, i32 noundef %481, i32 noundef %483, i32 noundef %485, i32 noundef %487, i32 noundef %489, i32 noundef %491) #17 - br label %492 - -492: ; preds = %479, %475 +413: ; preds = %410 + %414 = getelementptr inbounds i8, ptr %403, i64 32 + store i32 1, ptr %414, align 8, !tbaa !61 + %415 = getelementptr inbounds i8, ptr %403, i64 8 + store i32 0, ptr %415, align 8, !tbaa !65 + br label %432 + +416: ; preds = %410 + %417 = getelementptr inbounds i8, ptr %403, i64 32 + store i32 -1, ptr %417, align 8, !tbaa !61 + %418 = getelementptr inbounds i8, ptr %0, i64 160 + %419 = load i32, ptr %418, align 4, !tbaa !30 + %420 = sub i32 100, %419 + %421 = mul i32 %420, 63 + %422 = add i32 %421, 50 + %423 = udiv i32 %422, 100 + %424 = icmp ugt i32 %422, 6899 + %425 = call i32 @llvm.umax.i32(i32 %423, i32 5) + %426 = add nsw i32 %425, -5 + %427 = select i1 %424, i32 63, i32 %426 + %428 = getelementptr inbounds i8, ptr %403, i64 8 + store i32 %427, ptr %428, align 8, !tbaa !65 + %429 = icmp ugt i32 %422, 5899 + %430 = add nuw nsw i32 %423, 5 + %431 = select i1 %429, i32 63, i32 %430 + br label %432 + +432: ; preds = %416, %413 + %433 = phi i32 [ %431, %416 ], [ 0, %413 ] + %434 = getelementptr inbounds i8, ptr %403, i64 12 + store i32 %433, ptr %434, align 4, !tbaa !66 + br label %435 + +435: ; preds = %432, %410 + %436 = getelementptr inbounds i8, ptr %0, i64 164 + %437 = load i32, ptr %436, align 4, !tbaa !67 + %438 = icmp eq i32 %437, 0 + br i1 %438, label %439, label %473 + +439: ; preds = %435 + %440 = icmp ugt i32 %17, 6143 + %441 = icmp ugt i32 %20, 6143 + %442 = select i1 %440, i64 11, i64 10 + %443 = lshr i64 %18, %442 + %444 = trunc i64 %443 to i32 + %445 = icmp sgt i32 %444, 63 + br i1 %445, label %452, label %446 + +446: ; preds = %439 + %447 = shl i64 %443, 32 + %448 = ashr exact i64 %447, 32 + %449 = getelementptr inbounds [64 x i32], ptr @floor_log2.floor_log2_table, i64 0, i64 %448 + %450 = load i32, ptr %449, align 4, !tbaa !43 + %451 = sdiv i32 %450, 2 + br label %452 + +452: ; preds = %446, %439 + %453 = phi i32 [ %451, %446 ], [ 32, %439 ] + %454 = getelementptr inbounds i8, ptr %403, i64 28 + store i32 %453, ptr %454, align 4, !tbaa !68 + %455 = select i1 %441, i64 11, i64 10 + %456 = lshr i64 %21, %455 + %457 = trunc i64 %456 to i32 + %458 = icmp sgt i32 %457, 63 + br i1 %458, label %465, label %459 + +459: ; preds = %452 + %460 = shl i64 %456, 32 + %461 = ashr exact i64 %460, 32 + %462 = getelementptr inbounds [64 x i32], ptr @floor_log2.floor_log2_table, i64 0, i64 %461 + %463 = load i32, ptr %462, align 4, !tbaa !43 + %464 = sdiv i32 %463, 2 + br label %465 + +465: ; preds = %459, %452 + %466 = phi i32 [ %464, %459 ], [ 32, %452 ] + %467 = getelementptr inbounds i8, ptr %403, i64 24 + store i32 %466, ptr %467, align 8, !tbaa !69 + %468 = shl nuw i32 1, %466 + %469 = shl i32 %468, %453 + %470 = icmp ne i32 %469, 0 + %471 = zext i1 %470 to i32 + %472 = getelementptr inbounds i8, ptr %403, i64 4 + store i32 %471, ptr %472, align 4, !tbaa !70 + br label %473 + +473: ; preds = %465, %435 + %474 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 + %475 = and i32 %474, 262144 + %476 = icmp eq i32 %475, 0 + br i1 %476, label %490, label %477 + +477: ; preds = %473 + %478 = getelementptr inbounds i8, ptr %0, i64 160 + %479 = load i32, ptr %478, align 4, !tbaa !30 + %480 = getelementptr inbounds i8, ptr %403, i64 12 + %481 = load i32, ptr %480, align 4, !tbaa !66 + %482 = getelementptr inbounds i8, ptr %403, i64 8 + %483 = load i32, ptr %482, align 8, !tbaa !65 + %484 = getelementptr inbounds i8, ptr %403, i64 28 + %485 = load i32, ptr %484, align 4, !tbaa !68 + %486 = getelementptr inbounds i8, ptr %403, i64 24 + %487 = load i32, ptr %486, align 8, !tbaa !69 + %488 = getelementptr inbounds i8, ptr %403, i64 4 + %489 = load i32, ptr %488, align 4, !tbaa !70 + call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.7, i32 noundef %479, i32 noundef %481, i32 noundef %483, i32 noundef %485, i32 noundef %487, i32 noundef %489) #17 + br label %490 + +490: ; preds = %477, %473 call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %15, i8 0, i64 16, i1 false) - %493 = call i32 @avifEncoderWrite(ptr noundef nonnull %405, ptr noundef nonnull %42, ptr noundef nonnull %15) #17 - %494 = icmp eq i32 %493, 0 - br i1 %494, label %501, label %495 - -495: ; preds = %492 - %496 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 - %497 = and i32 %496, 262144 - %498 = icmp eq i32 %497, 0 - br i1 %498, label %525, label %499 - -499: ; preds = %495 - %500 = call ptr @avifResultToString(i32 noundef %493) #17 - call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.8, ptr noundef %1, ptr noundef %500) #17 - br label %525 - -501: ; preds = %492 - %502 = getelementptr inbounds i8, ptr %15, i64 8 - %503 = load i64, ptr %502, align 8, !tbaa !71 - %504 = icmp eq i64 %503, 0 - %505 = load ptr, ptr %15, align 8 - %506 = icmp eq ptr %505, null - %507 = select i1 %504, i1 true, i1 %506 - br i1 %507, label %508, label %513 - -508: ; preds = %501 - %509 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 - %510 = and i32 %509, 262144 - %511 = icmp eq i32 %510, 0 - br i1 %511, label %525, label %512 - -512: ; preds = %508 + %491 = call i32 @avifEncoderWrite(ptr noundef nonnull %403, ptr noundef nonnull %42, ptr noundef nonnull %15) #17 + %492 = icmp eq i32 %491, 0 + br i1 %492, label %499, label %493 + +493: ; preds = %490 + %494 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 + %495 = and i32 %494, 262144 + %496 = icmp eq i32 %495, 0 + br i1 %496, label %523, label %497 + +497: ; preds = %493 + %498 = call ptr @avifResultToString(i32 noundef %491) #17 + call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.8, ptr noundef %1, ptr noundef %498) #17 + br label %523 + +499: ; preds = %490 + %500 = getelementptr inbounds i8, ptr %15, i64 8 + %501 = load i64, ptr %500, align 8, !tbaa !71 + %502 = icmp eq i64 %501, 0 + %503 = load ptr, ptr %15, align 8 + %504 = icmp eq ptr %503, null + %505 = select i1 %502, i1 true, i1 %504 + br i1 %505, label %506, label %511 + +506: ; preds = %499 + %507 = load i32, ptr getelementptr inbounds (%struct.darktable_t, ptr @darktable, i64 0, i32 2), align 8, !tbaa !6 + %508 = and i32 %507, 262144 + %509 = icmp eq i32 %508, 0 + br i1 %509, label %523, label %510 + +510: ; preds = %506 call void (ptr, ...) @dt_print_ext(ptr noundef nonnull @.str.9, ptr noundef %1) #17 - br label %525 - -513: ; preds = %501 - %514 = call noalias ptr @fopen(ptr noundef %1, ptr noundef nonnull @.str.10) - %515 = icmp eq ptr %514, null - br i1 %515, label %525, label %516 - -516: ; preds = %513 - %517 = load ptr, ptr %15, align 8, !tbaa !72 - %518 = load i64, ptr %502, align 8, !tbaa !71 - %519 = call i64 @fwrite(ptr noundef %517, i64 noundef 1, i64 noundef %518, ptr noundef nonnull %514) - %520 = call i32 @fclose(ptr noundef nonnull %514) - %521 = load i64, ptr %502, align 8, !tbaa !71 - %522 = icmp eq i64 %519, %521 - br i1 %522, label %525, label %523 - -523: ; preds = %516 - %524 = call i32 @g_unlink(ptr noundef %1) #17 - br label %525 - -525: ; preds = %523, %516, %513, %512, %508, %499, %495, %411, %407, %390, %112, %48, %47 - %526 = phi i32 [ 1, %390 ], [ 1, %523 ], [ 1, %112 ], [ 1, %48 ], [ 1, %47 ], [ 1, %411 ], [ 1, %407 ], [ 1, %499 ], [ 1, %495 ], [ 1, %512 ], [ 1, %508 ], [ 1, %513 ], [ 0, %516 ] - %527 = phi ptr [ %114, %390 ], [ %114, %523 ], [ null, %112 ], [ null, %48 ], [ null, %47 ], [ %114, %411 ], [ %114, %407 ], [ %114, %499 ], [ %114, %495 ], [ %114, %512 ], [ %114, %508 ], [ %114, %513 ], [ %114, %516 ] - %528 = phi ptr [ null, %390 ], [ %405, %523 ], [ null, %112 ], [ null, %48 ], [ null, %47 ], [ null, %411 ], [ null, %407 ], [ %405, %499 ], [ %405, %495 ], [ %405, %512 ], [ %405, %508 ], [ %405, %513 ], [ %405, %516 ] + br label %523 + +511: ; preds = %499 + %512 = call noalias ptr @fopen(ptr noundef %1, ptr noundef nonnull @.str.10) + %513 = icmp eq ptr %512, null + br i1 %513, label %523, label %514 + +514: ; preds = %511 + %515 = load ptr, ptr %15, align 8, !tbaa !72 + %516 = load i64, ptr %500, align 8, !tbaa !71 + %517 = call i64 @fwrite(ptr noundef %515, i64 noundef 1, i64 noundef %516, ptr noundef nonnull %512) + %518 = call i32 @fclose(ptr noundef nonnull %512) + %519 = load i64, ptr %500, align 8, !tbaa !71 + %520 = icmp eq i64 %517, %519 + br i1 %520, label %523, label %521 + +521: ; preds = %514 + %522 = call i32 @g_unlink(ptr noundef %1) #17 + br label %523 + +523: ; preds = %521, %514, %511, %510, %506, %497, %493, %409, %405, %388, %112, %48, %47 + %524 = phi i32 [ 1, %388 ], [ 1, %521 ], [ 1, %112 ], [ 1, %48 ], [ 1, %47 ], [ 1, %409 ], [ 1, %405 ], [ 1, %497 ], [ 1, %493 ], [ 1, %510 ], [ 1, %506 ], [ 1, %511 ], [ 0, %514 ] + %525 = phi ptr [ %114, %388 ], [ %114, %521 ], [ null, %112 ], [ null, %48 ], [ null, %47 ], [ %114, %409 ], [ %114, %405 ], [ %114, %497 ], [ %114, %493 ], [ %114, %510 ], [ %114, %506 ], [ %114, %511 ], [ %114, %514 ] + %526 = phi ptr [ null, %388 ], [ %403, %521 ], [ null, %112 ], [ null, %48 ], [ null, %47 ], [ null, %409 ], [ null, %405 ], [ %403, %497 ], [ %403, %493 ], [ %403, %510 ], [ %403, %506 ], [ %403, %511 ], [ %403, %514 ] call void @avifRGBImageFreePixels(ptr noundef nonnull %13) #17 call void @avifImageDestroy(ptr noundef %42) #17 - call void @avifEncoderDestroy(ptr noundef %528) #17 + call void @avifEncoderDestroy(ptr noundef %526) #17 call void @avifRWDataFree(ptr noundef nonnull %15) #17 - call void @free(ptr noundef %527) #17 + call void @free(ptr noundef %525) #17 call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %13) #17 - ret i32 %526 + ret i32 %524 } ; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write) diff --git a/bench/duckdb/optimized/ub_duckdb_func_compressed_materialization.cpp.ll b/bench/duckdb/optimized/ub_duckdb_func_compressed_materialization.cpp.ll index 77c1118da70..75de070add4 100644 --- a/bench/duckdb/optimized/ub_duckdb_func_compressed_materialization.cpp.ll +++ b/bench/duckdb/optimized/ub_duckdb_func_compressed_materialization.cpp.ll @@ -60952,24 +60952,23 @@ vector.body46: ; preds = %vector.body46, %vec %29 = shl <2 x i64> %wide.load48, %30 = and <2 x i64> %29, %31 = or disjoint <2 x i64> %28, %30 - %32 = inttoptr <2 x i64> %31 to <2 x ptr> - %33 = shl <2 x i64> %wide.load48, - %34 = and <2 x i64> %33, - %35 = and <2 x i64> %29, - %36 = and <2 x i64> %26, - %37 = and <2 x i64> %24, - %38 = and <2 x i64> %wide.load48, - %39 = or disjoint <2 x i64> %37, %38 - %40 = or disjoint <2 x i64> %39, %36 - %41 = or disjoint <2 x i64> %40, %35 - %42 = or disjoint <2 x i64> %41, %34 - %43 = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %index47 - %44 = inttoptr <2 x i64> %42 to <2 x ptr> - %interleaved.vec49 = shufflevector <2 x ptr> %44, <2 x ptr> %32, <4 x i32> - store <4 x ptr> %interleaved.vec49, ptr %43, align 8, !alias.scope !1962, !noalias !1959 + %32 = shl <2 x i64> %wide.load48, + %33 = and <2 x i64> %32, + %34 = and <2 x i64> %29, + %35 = and <2 x i64> %26, + %36 = and <2 x i64> %24, + %37 = and <2 x i64> %wide.load48, + %38 = or disjoint <2 x i64> %36, %37 + %39 = or disjoint <2 x i64> %38, %35 + %40 = or disjoint <2 x i64> %39, %34 + %41 = or disjoint <2 x i64> %40, %33 + %42 = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %index47 + %43 = shufflevector <2 x i64> %41, <2 x i64> %31, <4 x i32> + %interleaved.vec49 = inttoptr <4 x i64> %43 to <4 x ptr> + store <4 x ptr> %interleaved.vec49, ptr %42, align 8, !alias.scope !1962, !noalias !1959 %index.next50 = add nuw nsw i64 %index47, 2 - %45 = icmp eq i64 %index.next50, %n.vec43 - br i1 %45, label %middle.block38, label %vector.body46, !llvm.loop !1965 + %44 = icmp eq i64 %index.next50, %n.vec43 + br i1 %44, label %middle.block38, label %vector.body46, !llvm.loop !1965 middle.block38: ; preds = %vector.body46 %cmp.n45 = icmp eq i64 %2, %n.vec43 @@ -60980,102 +60979,102 @@ if.then2.i.i.i: ; preds = %sw.bb7.i.i store ptr %15, ptr %validity.i51.i.i, align 8, !tbaa !187, !noalias !1964 %validity_data.i.i.i.i = getelementptr inbounds i8, ptr %call4, i64 48 %validity_data3.i.i.i.i = getelementptr inbounds i8, ptr %result, i64 48 - %46 = load ptr, ptr %validity_data.i.i.i.i, align 8, !tbaa !197, !noalias !1964 - store ptr %46, ptr %validity_data3.i.i.i.i, align 8, !tbaa !197, !noalias !1964 + %45 = load ptr, ptr %validity_data.i.i.i.i, align 8, !tbaa !197, !noalias !1964 + store ptr %45, ptr %validity_data3.i.i.i.i, align 8, !tbaa !197, !noalias !1964 %_M_refcount.i.i.i.i.i.i = getelementptr inbounds i8, ptr %result, i64 56 %_M_refcount3.i.i.i.i.i.i = getelementptr inbounds i8, ptr %call4, i64 56 - %47 = load ptr, ptr %_M_refcount3.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 - %48 = load ptr, ptr %_M_refcount.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 - %cmp.not.i.i.i.i.i.i.i = icmp eq ptr %47, %48 + %46 = load ptr, ptr %_M_refcount3.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 + %47 = load ptr, ptr %_M_refcount.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 + %cmp.not.i.i.i.i.i.i.i = icmp eq ptr %46, %47 br i1 %cmp.not.i.i.i.i.i.i.i, label %_ZN6duckdb21TemplatedValidityMaskImE10InitializeERKS1_.exit.i.i.i, label %if.then.i.i.i.i.i.i.i if.then.i.i.i.i.i.i.i: ; preds = %if.then2.i.i.i - %cmp3.not.i.i.i.i.i.i.i = icmp eq ptr %47, null + %cmp3.not.i.i.i.i.i.i.i = icmp eq ptr %46, null br i1 %cmp3.not.i.i.i.i.i.i.i, label %if.end.i.i.i.i.i.i.i, label %if.then4.i.i.i.i.i.i.i if.then4.i.i.i.i.i.i.i: ; preds = %if.then.i.i.i.i.i.i.i - %_M_use_count.i.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %47, i64 8 - %49 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41, !noalias !1964 - %tobool.i.not.i.i.i.i.i.i.i.i = icmp eq i8 %49, 0 + %_M_use_count.i.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %46, i64 8 + %48 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41, !noalias !1964 + %tobool.i.not.i.i.i.i.i.i.i.i = icmp eq i8 %48, 0 br i1 %tobool.i.not.i.i.i.i.i.i.i.i, label %if.else.i.i.i.i.i.i.i.i.i, label %if.then.i.i.i.i.i.i.i.i.i if.then.i.i.i.i.i.i.i.i.i: ; preds = %if.then4.i.i.i.i.i.i.i - %50 = load i32, ptr %_M_use_count.i.i.i.i.i.i.i.i, align 4, !tbaa !199, !noalias !1964 - %add.i.i.i.i.i.i.i.i.i = add nsw i32 %50, 1 + %49 = load i32, ptr %_M_use_count.i.i.i.i.i.i.i.i, align 4, !tbaa !199, !noalias !1964 + %add.i.i.i.i.i.i.i.i.i = add nsw i32 %49, 1 store i32 %add.i.i.i.i.i.i.i.i.i, ptr %_M_use_count.i.i.i.i.i.i.i.i, align 4, !tbaa !199, !noalias !1964 br label %if.end.i.i.i.i.i.i.i if.else.i.i.i.i.i.i.i.i.i: ; preds = %if.then4.i.i.i.i.i.i.i - %51 = atomicrmw volatile add ptr %_M_use_count.i.i.i.i.i.i.i.i, i32 1 acq_rel, align 4, !noalias !1964 + %50 = atomicrmw volatile add ptr %_M_use_count.i.i.i.i.i.i.i.i, i32 1 acq_rel, align 4, !noalias !1964 %.pr.pre.i.i.i.i.i.i.i = load ptr, ptr %_M_refcount.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 br label %if.end.i.i.i.i.i.i.i if.end.i.i.i.i.i.i.i: ; preds = %if.else.i.i.i.i.i.i.i.i.i, %if.then.i.i.i.i.i.i.i.i.i, %if.then.i.i.i.i.i.i.i - %52 = phi ptr [ %48, %if.then.i.i.i.i.i.i.i ], [ %48, %if.then.i.i.i.i.i.i.i.i.i ], [ %.pr.pre.i.i.i.i.i.i.i, %if.else.i.i.i.i.i.i.i.i.i ] - %cmp6.not.i.i.i.i.i.i.i = icmp eq ptr %52, null + %51 = phi ptr [ %47, %if.then.i.i.i.i.i.i.i ], [ %47, %if.then.i.i.i.i.i.i.i.i.i ], [ %.pr.pre.i.i.i.i.i.i.i, %if.else.i.i.i.i.i.i.i.i.i ] + %cmp6.not.i.i.i.i.i.i.i = icmp eq ptr %51, null br i1 %cmp6.not.i.i.i.i.i.i.i, label %if.end9.i.i.i.i.i.i.i, label %if.then7.i.i.i.i.i.i.i if.then7.i.i.i.i.i.i.i: ; preds = %if.end.i.i.i.i.i.i.i - %_M_use_count.i16.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %52, i64 8 - %53 = load atomic i64, ptr %_M_use_count.i16.i.i.i.i.i.i.i acquire, align 8, !noalias !1964 - %cmp.i.i.i.i.i.i.i.i = icmp eq i64 %53, 4294967297 - %54 = trunc i64 %53 to i32 + %_M_use_count.i16.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %51, i64 8 + %52 = load atomic i64, ptr %_M_use_count.i16.i.i.i.i.i.i.i acquire, align 8, !noalias !1964 + %cmp.i.i.i.i.i.i.i.i = icmp eq i64 %52, 4294967297 + %53 = trunc i64 %52 to i32 br i1 %cmp.i.i.i.i.i.i.i.i, label %if.then.i.i.i.i.i.i.i.i, label %if.end.i.i.i.i.i.i.i.i if.then.i.i.i.i.i.i.i.i: ; preds = %if.then7.i.i.i.i.i.i.i store i32 0, ptr %_M_use_count.i16.i.i.i.i.i.i.i, align 8, !tbaa !201, !noalias !1964 - %_M_weak_count.i.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %52, i64 12 + %_M_weak_count.i.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %51, i64 12 store i32 0, ptr %_M_weak_count.i.i.i.i.i.i.i.i, align 4, !tbaa !203, !noalias !1964 - %vtable.i.i.i.i.i.i.i.i = load ptr, ptr %52, align 8, !tbaa !65, !noalias !1964 + %vtable.i.i.i.i.i.i.i.i = load ptr, ptr %51, align 8, !tbaa !65, !noalias !1964 %vfn.i.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %vtable.i.i.i.i.i.i.i.i, i64 16 - %55 = load ptr, ptr %vfn.i.i.i.i.i.i.i.i, align 8, !noalias !1964 - call void %55(ptr noundef nonnull align 8 dereferenceable(16) %52) #21, !noalias !1964 - %vtable3.i.i.i.i.i.i.i.i = load ptr, ptr %52, align 8, !tbaa !65, !noalias !1964 + %54 = load ptr, ptr %vfn.i.i.i.i.i.i.i.i, align 8, !noalias !1964 + call void %54(ptr noundef nonnull align 8 dereferenceable(16) %51) #21, !noalias !1964 + %vtable3.i.i.i.i.i.i.i.i = load ptr, ptr %51, align 8, !tbaa !65, !noalias !1964 %vfn4.i.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %vtable3.i.i.i.i.i.i.i.i, i64 24 - %56 = load ptr, ptr %vfn4.i.i.i.i.i.i.i.i, align 8, !noalias !1964 - call void %56(ptr noundef nonnull align 8 dereferenceable(16) %52) #21, !noalias !1964 + %55 = load ptr, ptr %vfn4.i.i.i.i.i.i.i.i, align 8, !noalias !1964 + call void %55(ptr noundef nonnull align 8 dereferenceable(16) %51) #21, !noalias !1964 br label %if.end9.i.i.i.i.i.i.i if.end.i.i.i.i.i.i.i.i: ; preds = %if.then7.i.i.i.i.i.i.i - %57 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41, !noalias !1964 - %tobool.i.i.not.i.i.i.i.i.i.i.i = icmp eq i8 %57, 0 + %56 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41, !noalias !1964 + %tobool.i.i.not.i.i.i.i.i.i.i.i = icmp eq i8 %56, 0 br i1 %tobool.i.i.not.i.i.i.i.i.i.i.i, label %if.else.i.i19.i.i.i.i.i.i.i, label %if.then.i.i17.i.i.i.i.i.i.i if.then.i.i17.i.i.i.i.i.i.i: ; preds = %if.end.i.i.i.i.i.i.i.i - %add.i.i18.i.i.i.i.i.i.i = add nsw i32 %54, -1 + %add.i.i18.i.i.i.i.i.i.i = add nsw i32 %53, -1 store i32 %add.i.i18.i.i.i.i.i.i.i, ptr %_M_use_count.i16.i.i.i.i.i.i.i, align 4, !tbaa !199, !noalias !1964 br label %invoke.cont.i.i.i.i.i.i.i.i if.else.i.i19.i.i.i.i.i.i.i: ; preds = %if.end.i.i.i.i.i.i.i.i - %58 = atomicrmw volatile add ptr %_M_use_count.i16.i.i.i.i.i.i.i, i32 -1 acq_rel, align 4, !noalias !1964 + %57 = atomicrmw volatile add ptr %_M_use_count.i16.i.i.i.i.i.i.i, i32 -1 acq_rel, align 4, !noalias !1964 br label %invoke.cont.i.i.i.i.i.i.i.i invoke.cont.i.i.i.i.i.i.i.i: ; preds = %if.else.i.i19.i.i.i.i.i.i.i, %if.then.i.i17.i.i.i.i.i.i.i - %retval.0.i.i.i.i.i.i.i.i.i = phi i32 [ %54, %if.then.i.i17.i.i.i.i.i.i.i ], [ %58, %if.else.i.i19.i.i.i.i.i.i.i ] + %retval.0.i.i.i.i.i.i.i.i.i = phi i32 [ %53, %if.then.i.i17.i.i.i.i.i.i.i ], [ %57, %if.else.i.i19.i.i.i.i.i.i.i ] %cmp6.i.i.i.i.i.i.i.i = icmp eq i32 %retval.0.i.i.i.i.i.i.i.i.i, 1 br i1 %cmp6.i.i.i.i.i.i.i.i, label %if.then7.i.i.i.i.i.i.i.i, label %if.end9.i.i.i.i.i.i.i, !prof !85 if.then7.i.i.i.i.i.i.i.i: ; preds = %invoke.cont.i.i.i.i.i.i.i.i - call void @_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv(ptr noundef nonnull align 8 dereferenceable(16) %52) #21, !noalias !1964 + call void @_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv(ptr noundef nonnull align 8 dereferenceable(16) %51) #21, !noalias !1964 br label %if.end9.i.i.i.i.i.i.i if.end9.i.i.i.i.i.i.i: ; preds = %if.then7.i.i.i.i.i.i.i.i, %invoke.cont.i.i.i.i.i.i.i.i, %if.then.i.i.i.i.i.i.i.i, %if.end.i.i.i.i.i.i.i - store ptr %47, ptr %_M_refcount.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 + store ptr %46, ptr %_M_refcount.i.i.i.i.i.i, align 8, !tbaa !198, !noalias !1964 br label %_ZN6duckdb21TemplatedValidityMaskImE10InitializeERKS1_.exit.i.i.i _ZN6duckdb21TemplatedValidityMaskImE10InitializeERKS1_.exit.i.i.i: ; preds = %if.end9.i.i.i.i.i.i.i, %if.then2.i.i.i %target_count.i.i.i.i = getelementptr inbounds i8, ptr %call4, i64 64 - %59 = load i64, ptr %target_count.i.i.i.i, align 8, !tbaa !204, !noalias !1964 + %58 = load i64, ptr %target_count.i.i.i.i, align 8, !tbaa !204, !noalias !1964 %target_count4.i.i.i.i = getelementptr inbounds i8, ptr %result, i64 64 - store i64 %59, ptr %target_count4.i.i.i.i, align 8, !tbaa !204, !noalias !1964 + store i64 %58, ptr %target_count4.i.i.i.i, align 8, !tbaa !204, !noalias !1964 %add.i.i.i.i.i = add i64 %2, 63 %div1.i.i.i.i.i = lshr i64 %add.i.i.i.i.i, 6 %cmp10.not.i.i.i = icmp ult i64 %add.i.i.i.i.i, 64 br i1 %cmp10.not.i.i.i, label %_ZN6duckdb13UnaryExecutor7ExecuteImNS_8string_tEZNS_L24StringDecompressFunctionImEEvRNS_9DataChunkERNS_15ExpressionStateERNS_6VectorEEUlRKmE_EEvS9_S9_mT1_.exit, label %for.body.lr.ph.i.i.i for.body.lr.ph.i.i.i: ; preds = %_ZN6duckdb21TemplatedValidityMaskImE10InitializeERKS1_.exit.i.i.i - %60 = load ptr, ptr %validity.i50.i.i, align 8, !tbaa !187, !noalias !1964 - %tobool.not.i104.i.i.i = icmp eq ptr %60, null + %59 = load ptr, ptr %validity.i50.i.i, align 8, !tbaa !187, !noalias !1964 + %tobool.not.i104.i.i.i = icmp eq ptr %59, null %scevgep25 = getelementptr i8, ptr %13, i64 8 br label %for.body.i.i.i @@ -61090,11 +61089,11 @@ _ZNK6duckdb21TemplatedValidityMaskImE16GetValidityEntryEm.exit.thread.i.i.i: ; p br label %for.cond8.preheader.i.i.i _ZNK6duckdb21TemplatedValidityMaskImE16GetValidityEntryEm.exit.i.i.i: ; preds = %for.body.i.i.i - %arrayidx.i.i.i.i.i = getelementptr inbounds i64, ptr %60, i64 %entry_idx.011.i.i.i - %61 = load i64, ptr %arrayidx.i.i.i.i.i, align 8, !tbaa !40, !noalias !1964 + %arrayidx.i.i.i.i.i = getelementptr inbounds i64, ptr %59, i64 %entry_idx.011.i.i.i + %60 = load i64, ptr %arrayidx.i.i.i.i.i, align 8, !tbaa !40, !noalias !1964 %add.i.i.i = add i64 %base_idx.012.i.i.i, 64 %cond.i.i.i.i = call noundef i64 @llvm.umin.i64(i64 %add.i.i.i, i64 %2) - switch i64 %61, label %for.cond18.preheader.i.i.i [ + switch i64 %60, label %for.cond18.preheader.i.i.i [ i64 -1, label %for.cond8.preheader.i.i.i i64 0, label %cleanup.i.i.i ] @@ -61105,8 +61104,8 @@ for.cond8.preheader.i.i.i: ; preds = %_ZNK6duckdb21Templa br i1 %cmp95.i.i.i, label %for.body10.i.i.i.preheader, label %cleanup.i.i.i for.body10.i.i.i.preheader: ; preds = %for.cond8.preheader.i.i.i - %62 = sub i64 %cond.i23.i.i.i, %base_idx.012.i.i.i - %min.iters.check = icmp ult i64 %62, 8 + %61 = sub i64 %cond.i23.i.i.i, %base_idx.012.i.i.i + %min.iters.check = icmp ult i64 %61, 8 br i1 %min.iters.check, label %for.body10.i.i.i.preheader35, label %vector.scevcheck for.body10.i.i.i.preheader35: ; preds = %middle.block, %vector.scevcheck, %for.body10.i.i.i.preheader @@ -61114,60 +61113,59 @@ for.body10.i.i.i.preheader35: ; preds = %middle.block, %vect br label %for.body10.i.i.i vector.scevcheck: ; preds = %for.body10.i.i.i.preheader - %63 = xor i64 %base_idx.012.i.i.i, -1 - %64 = add i64 %cond.i23.i.i.i, %63 - %65 = shl i64 %base_idx.012.i.i.i, 4 - %scevgep = getelementptr i8, ptr %13, i64 %65 - %mul.result = shl i64 %64, 4 - %66 = getelementptr i8, ptr %scevgep, i64 %mul.result - %67 = icmp ult ptr %66, %scevgep - %scevgep26 = getelementptr i8, ptr %scevgep25, i64 %65 - %mul.overflow29 = icmp ugt i64 %64, 1152921504606846975 - %68 = getelementptr i8, ptr %scevgep26, i64 %mul.result - %69 = icmp ult ptr %68, %scevgep26 - %70 = or i1 %mul.overflow29, %69 - %71 = or i1 %67, %70 - br i1 %71, label %for.body10.i.i.i.preheader35, label %vector.ph + %62 = xor i64 %base_idx.012.i.i.i, -1 + %63 = add i64 %cond.i23.i.i.i, %62 + %64 = shl i64 %base_idx.012.i.i.i, 4 + %scevgep = getelementptr i8, ptr %13, i64 %64 + %mul.result = shl i64 %63, 4 + %65 = getelementptr i8, ptr %scevgep, i64 %mul.result + %66 = icmp ult ptr %65, %scevgep + %scevgep26 = getelementptr i8, ptr %scevgep25, i64 %64 + %mul.overflow29 = icmp ugt i64 %63, 1152921504606846975 + %67 = getelementptr i8, ptr %scevgep26, i64 %mul.result + %68 = icmp ult ptr %67, %scevgep26 + %69 = or i1 %mul.overflow29, %68 + %70 = or i1 %66, %69 + br i1 %70, label %for.body10.i.i.i.preheader35, label %vector.ph vector.ph: ; preds = %vector.scevcheck - %n.vec = and i64 %62, -2 + %n.vec = and i64 %61, -2 br label %vector.body vector.body: ; preds = %vector.body, %vector.ph %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ] %offset.idx = add i64 %index, %base_idx.012.i.i.i - %72 = getelementptr inbounds i64, ptr %14, i64 %offset.idx - %wide.load = load <2 x i64>, ptr %72, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 - %73 = lshr <2 x i64> %wide.load, - %74 = and <2 x i64> %73, - %75 = lshr <2 x i64> %wide.load, - %76 = and <2 x i64> %75, - %77 = or disjoint <2 x i64> %76, %74 - %78 = shl <2 x i64> %wide.load, - %79 = and <2 x i64> %78, - %80 = or disjoint <2 x i64> %77, %79 - %81 = inttoptr <2 x i64> %80 to <2 x ptr> - %82 = shl <2 x i64> %wide.load, - %83 = and <2 x i64> %82, - %84 = and <2 x i64> %78, - %85 = and <2 x i64> %75, - %86 = and <2 x i64> %73, - %87 = and <2 x i64> %wide.load, - %88 = or disjoint <2 x i64> %86, %87 - %89 = or disjoint <2 x i64> %88, %85 - %90 = or disjoint <2 x i64> %89, %84 - %91 = or disjoint <2 x i64> %90, %83 - %92 = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %offset.idx - %93 = inttoptr <2 x i64> %91 to <2 x ptr> - %interleaved.vec = shufflevector <2 x ptr> %93, <2 x ptr> %81, <4 x i32> - store <4 x ptr> %interleaved.vec, ptr %92, align 8, !alias.scope !1962, !noalias !1959 + %71 = getelementptr inbounds i64, ptr %14, i64 %offset.idx + %wide.load = load <2 x i64>, ptr %71, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 + %72 = lshr <2 x i64> %wide.load, + %73 = and <2 x i64> %72, + %74 = lshr <2 x i64> %wide.load, + %75 = and <2 x i64> %74, + %76 = or disjoint <2 x i64> %75, %73 + %77 = shl <2 x i64> %wide.load, + %78 = and <2 x i64> %77, + %79 = or disjoint <2 x i64> %76, %78 + %80 = shl <2 x i64> %wide.load, + %81 = and <2 x i64> %80, + %82 = and <2 x i64> %77, + %83 = and <2 x i64> %74, + %84 = and <2 x i64> %72, + %85 = and <2 x i64> %wide.load, + %86 = or disjoint <2 x i64> %84, %85 + %87 = or disjoint <2 x i64> %86, %83 + %88 = or disjoint <2 x i64> %87, %82 + %89 = or disjoint <2 x i64> %88, %81 + %90 = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %offset.idx + %91 = shufflevector <2 x i64> %89, <2 x i64> %79, <4 x i32> + %interleaved.vec = inttoptr <4 x i64> %91 to <4 x ptr> + store <4 x ptr> %interleaved.vec, ptr %90, align 8, !alias.scope !1962, !noalias !1959 %index.next = add nuw i64 %index, 2 - %94 = icmp eq i64 %index.next, %n.vec - br i1 %94, label %middle.block, label %vector.body, !llvm.loop !1966 + %92 = icmp eq i64 %index.next, %n.vec + br i1 %92, label %middle.block, label %vector.body, !llvm.loop !1966 middle.block: ; preds = %vector.body %ind.end = add i64 %n.vec, %base_idx.012.i.i.i - %cmp.n = icmp eq i64 %62, %n.vec + %cmp.n = icmp eq i64 %61, %n.vec br i1 %cmp.n, label %cleanup.i.i.i, label %for.body10.i.i.i.preheader35 for.cond18.preheader.i.i.i: ; preds = %_ZNK6duckdb21TemplatedValidityMaskImE16GetValidityEntryEm.exit.i.i.i @@ -61177,22 +61175,22 @@ for.cond18.preheader.i.i.i: ; preds = %_ZNK6duckdb21Templa for.body10.i.i.i: ; preds = %for.body10.i.i.i.preheader35, %for.body10.i.i.i %base_idx.16.i.i.i = phi i64 [ %inc.i.i.i, %for.body10.i.i.i ], [ %base_idx.16.i.i.i.ph, %for.body10.i.i.i.preheader35 ] %arrayidx.i.i.i = getelementptr inbounds i64, ptr %14, i64 %base_idx.16.i.i.i - %95 = load i64, ptr %arrayidx.i.i.i, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 - %input.addr.sroa.4.0.extract.shift.i.i.i.i = lshr i64 %95, 24 + %93 = load i64, ptr %arrayidx.i.i.i, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 + %input.addr.sroa.4.0.extract.shift.i.i.i.i = lshr i64 %93, 24 %retval.sroa.6.8.insert.ext.i.i.i.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i.i.i.i, 255 - %96 = lshr i64 %95, 8 - %retval.sroa.6.9.insert.shift.i.i.i.i.i.i = and i64 %96, 65280 + %94 = lshr i64 %93, 8 + %retval.sroa.6.9.insert.shift.i.i.i.i.i.i = and i64 %94, 65280 %retval.sroa.6.9.insert.insert.i.i.i.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.shift.i.i.i.i.i.i, %retval.sroa.6.8.insert.ext.i.i.i.i.i.i - %97 = shl i64 %95, 8 - %retval.sroa.6.10.insert.shift.i.i.i.i.i.i = and i64 %97, 16711680 + %95 = shl i64 %93, 8 + %retval.sroa.6.10.insert.shift.i.i.i.i.i.i = and i64 %95, 16711680 %retval.sroa.6.10.insert.insert.i.i.i.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.insert.i.i.i.i.i.i, %retval.sroa.6.10.insert.shift.i.i.i.i.i.i - %98 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i.i.i.i to ptr - %99 = shl i64 %95, 24 - %retval.sroa.5.0.insert.ext.i.i.i.i.i.i = and i64 %99, -72057594037927936 - %retval.sroa.4.0.insert.shift.i.i.i.i.i.i = and i64 %97, 71776119061217280 - %retval.sroa.3.0.insert.shift.i.i.i.i.i.i = and i64 %96, 280375465082880 + %96 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i.i.i.i to ptr + %97 = shl i64 %93, 24 + %retval.sroa.5.0.insert.ext.i.i.i.i.i.i = and i64 %97, -72057594037927936 + %retval.sroa.4.0.insert.shift.i.i.i.i.i.i = and i64 %95, 71776119061217280 + %retval.sroa.3.0.insert.shift.i.i.i.i.i.i = and i64 %94, 280375465082880 %retval.sroa.2.0.insert.shift.i.i.i.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i.i.i.i, 1095216660480 - %retval.sroa.0.0.insert.ext.i.i.i.i.i.i = and i64 %95, 255 + %retval.sroa.0.0.insert.ext.i.i.i.i.i.i = and i64 %93, 255 %retval.sroa.4.0.insert.insert.i.i.i.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.shift.i.i.i.i.i.i, %retval.sroa.0.0.insert.ext.i.i.i.i.i.i %retval.sroa.3.0.insert.insert.i.i.i.i.i.i = or disjoint i64 %retval.sroa.4.0.insert.insert.i.i.i.i.i.i, %retval.sroa.3.0.insert.shift.i.i.i.i.i.i %retval.sroa.2.0.insert.insert.i.i.i.i.i.i = or disjoint i64 %retval.sroa.3.0.insert.insert.i.i.i.i.i.i, %retval.sroa.4.0.insert.shift.i.i.i.i.i.i @@ -61200,7 +61198,7 @@ for.body10.i.i.i: ; preds = %for.body10.i.i.i.pr %arrayidx13.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %base_idx.16.i.i.i store i64 %retval.sroa.0.0.insert.insert.i.i.i.i.i.i, ptr %arrayidx13.i.i.i, align 8, !tbaa.struct !76, !alias.scope !1962, !noalias !1959 %ref.tmp.sroa.4.0.arrayidx13.sroa_idx.i.i.i = getelementptr inbounds i8, ptr %arrayidx13.i.i.i, i64 8 - store ptr %98, ptr %ref.tmp.sroa.4.0.arrayidx13.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1962, !noalias !1959 + store ptr %96, ptr %ref.tmp.sroa.4.0.arrayidx13.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1962, !noalias !1959 %inc.i.i.i = add nuw i64 %base_idx.16.i.i.i, 1 %exitcond.not.i.i.i = icmp eq i64 %inc.i.i.i, %cond.i23.i.i.i br i1 %exitcond.not.i.i.i, label %cleanup.i.i.i, label %for.body10.i.i.i, !llvm.loop !1967 @@ -61209,28 +61207,28 @@ for.body20.i.i.i: ; preds = %for.cond18.preheade %base_idx.28.i.i.i = phi i64 [ %inc32.i.i.i, %for.inc31.i.i.i ], [ %base_idx.012.i.i.i, %for.cond18.preheader.i.i.i ] %sub.i.i.i = sub nuw i64 %base_idx.28.i.i.i, %base_idx.012.i.i.i %shl.i.i.i.i = shl nuw i64 1, %sub.i.i.i - %and.i.i.i.i = and i64 %shl.i.i.i.i, %61 + %and.i.i.i.i = and i64 %shl.i.i.i.i, %60 %tobool.i.not.i.i.i = icmp eq i64 %and.i.i.i.i, 0 br i1 %tobool.i.not.i.i.i, label %for.inc31.i.i.i, label %if.then23.i.i.i if.then23.i.i.i: ; preds = %for.body20.i.i.i %arrayidx25.i.i.i = getelementptr inbounds i64, ptr %14, i64 %base_idx.28.i.i.i - %100 = load i64, ptr %arrayidx25.i.i.i, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 - %input.addr.sroa.4.0.extract.shift.i106.i.i.i = lshr i64 %100, 24 + %98 = load i64, ptr %arrayidx25.i.i.i, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 + %input.addr.sroa.4.0.extract.shift.i106.i.i.i = lshr i64 %98, 24 %retval.sroa.6.8.insert.ext.i.i.i107.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i106.i.i.i, 255 - %101 = lshr i64 %100, 8 - %retval.sroa.6.9.insert.shift.i.i.i108.i.i.i = and i64 %101, 65280 + %99 = lshr i64 %98, 8 + %retval.sroa.6.9.insert.shift.i.i.i108.i.i.i = and i64 %99, 65280 %retval.sroa.6.9.insert.insert.i.i.i109.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.shift.i.i.i108.i.i.i, %retval.sroa.6.8.insert.ext.i.i.i107.i.i.i - %102 = shl i64 %100, 8 - %retval.sroa.6.10.insert.shift.i.i.i110.i.i.i = and i64 %102, 16711680 + %100 = shl i64 %98, 8 + %retval.sroa.6.10.insert.shift.i.i.i110.i.i.i = and i64 %100, 16711680 %retval.sroa.6.10.insert.insert.i.i.i111.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.insert.i.i.i109.i.i.i, %retval.sroa.6.10.insert.shift.i.i.i110.i.i.i - %103 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i111.i.i.i to ptr - %104 = shl i64 %100, 24 - %retval.sroa.5.0.insert.ext.i.i.i112.i.i.i = and i64 %104, -72057594037927936 - %retval.sroa.4.0.insert.shift.i.i.i113.i.i.i = and i64 %102, 71776119061217280 - %retval.sroa.3.0.insert.shift.i.i.i114.i.i.i = and i64 %101, 280375465082880 + %101 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i111.i.i.i to ptr + %102 = shl i64 %98, 24 + %retval.sroa.5.0.insert.ext.i.i.i112.i.i.i = and i64 %102, -72057594037927936 + %retval.sroa.4.0.insert.shift.i.i.i113.i.i.i = and i64 %100, 71776119061217280 + %retval.sroa.3.0.insert.shift.i.i.i114.i.i.i = and i64 %99, 280375465082880 %retval.sroa.2.0.insert.shift.i.i.i115.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i106.i.i.i, 1095216660480 - %retval.sroa.0.0.insert.ext.i.i.i116.i.i.i = and i64 %100, 255 + %retval.sroa.0.0.insert.ext.i.i.i116.i.i.i = and i64 %98, 255 %retval.sroa.4.0.insert.insert.i.i.i117.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.shift.i.i.i115.i.i.i, %retval.sroa.0.0.insert.ext.i.i.i116.i.i.i %retval.sroa.3.0.insert.insert.i.i.i118.i.i.i = or disjoint i64 %retval.sroa.4.0.insert.insert.i.i.i117.i.i.i, %retval.sroa.3.0.insert.shift.i.i.i114.i.i.i %retval.sroa.2.0.insert.insert.i.i.i119.i.i.i = or disjoint i64 %retval.sroa.3.0.insert.insert.i.i.i118.i.i.i, %retval.sroa.4.0.insert.shift.i.i.i113.i.i.i @@ -61238,7 +61236,7 @@ if.then23.i.i.i: ; preds = %for.body20.i.i.i %arrayidx29.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %base_idx.28.i.i.i store i64 %retval.sroa.0.0.insert.insert.i.i.i120.i.i.i, ptr %arrayidx29.i.i.i, align 8, !tbaa.struct !76, !alias.scope !1962, !noalias !1959 %ref.tmp24.sroa.4.0.arrayidx29.sroa_idx.i.i.i = getelementptr inbounds i8, ptr %arrayidx29.i.i.i, i64 8 - store ptr %103, ptr %ref.tmp24.sroa.4.0.arrayidx29.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1962, !noalias !1959 + store ptr %101, ptr %ref.tmp24.sroa.4.0.arrayidx29.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1962, !noalias !1959 br label %for.inc31.i.i.i for.inc31.i.i.i: ; preds = %if.then23.i.i.i, %for.body20.i.i.i @@ -61255,22 +61253,22 @@ cleanup.i.i.i: ; preds = %for.inc31.i.i.i, %f for.body48.i.i.i: ; preds = %for.body48.i.i.i.preheader34, %for.body48.i.i.i %i.014.i.i.i = phi i64 [ %inc56.i.i.i, %for.body48.i.i.i ], [ %i.014.i.i.i.ph, %for.body48.i.i.i.preheader34 ] %arrayidx50.i.i.i = getelementptr inbounds i64, ptr %14, i64 %i.014.i.i.i - %105 = load i64, ptr %arrayidx50.i.i.i, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 - %input.addr.sroa.4.0.extract.shift.i123.i.i.i = lshr i64 %105, 24 + %103 = load i64, ptr %arrayidx50.i.i.i, align 8, !tbaa !40, !alias.scope !1959, !noalias !1962 + %input.addr.sroa.4.0.extract.shift.i123.i.i.i = lshr i64 %103, 24 %retval.sroa.6.8.insert.ext.i.i.i124.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i123.i.i.i, 255 - %106 = lshr i64 %105, 8 - %retval.sroa.6.9.insert.shift.i.i.i125.i.i.i = and i64 %106, 65280 + %104 = lshr i64 %103, 8 + %retval.sroa.6.9.insert.shift.i.i.i125.i.i.i = and i64 %104, 65280 %retval.sroa.6.9.insert.insert.i.i.i126.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.shift.i.i.i125.i.i.i, %retval.sroa.6.8.insert.ext.i.i.i124.i.i.i - %107 = shl i64 %105, 8 - %retval.sroa.6.10.insert.shift.i.i.i127.i.i.i = and i64 %107, 16711680 + %105 = shl i64 %103, 8 + %retval.sroa.6.10.insert.shift.i.i.i127.i.i.i = and i64 %105, 16711680 %retval.sroa.6.10.insert.insert.i.i.i128.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.insert.i.i.i126.i.i.i, %retval.sroa.6.10.insert.shift.i.i.i127.i.i.i - %108 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i128.i.i.i to ptr - %109 = shl i64 %105, 24 - %retval.sroa.5.0.insert.ext.i.i.i129.i.i.i = and i64 %109, -72057594037927936 - %retval.sroa.4.0.insert.shift.i.i.i130.i.i.i = and i64 %107, 71776119061217280 - %retval.sroa.3.0.insert.shift.i.i.i131.i.i.i = and i64 %106, 280375465082880 + %106 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i128.i.i.i to ptr + %107 = shl i64 %103, 24 + %retval.sroa.5.0.insert.ext.i.i.i129.i.i.i = and i64 %107, -72057594037927936 + %retval.sroa.4.0.insert.shift.i.i.i130.i.i.i = and i64 %105, 71776119061217280 + %retval.sroa.3.0.insert.shift.i.i.i131.i.i.i = and i64 %104, 280375465082880 %retval.sroa.2.0.insert.shift.i.i.i132.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i123.i.i.i, 1095216660480 - %retval.sroa.0.0.insert.ext.i.i.i133.i.i.i = and i64 %105, 255 + %retval.sroa.0.0.insert.ext.i.i.i133.i.i.i = and i64 %103, 255 %retval.sroa.4.0.insert.insert.i.i.i134.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.shift.i.i.i132.i.i.i, %retval.sroa.0.0.insert.ext.i.i.i133.i.i.i %retval.sroa.3.0.insert.insert.i.i.i135.i.i.i = or disjoint i64 %retval.sroa.4.0.insert.insert.i.i.i134.i.i.i, %retval.sroa.3.0.insert.shift.i.i.i131.i.i.i %retval.sroa.2.0.insert.insert.i.i.i136.i.i.i = or disjoint i64 %retval.sroa.3.0.insert.insert.i.i.i135.i.i.i, %retval.sroa.4.0.insert.shift.i.i.i130.i.i.i @@ -61278,7 +61276,7 @@ for.body48.i.i.i: ; preds = %for.body48.i.i.i.pr %arrayidx54.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %13, i64 %i.014.i.i.i store i64 %retval.sroa.0.0.insert.insert.i.i.i137.i.i.i, ptr %arrayidx54.i.i.i, align 8, !tbaa.struct !76, !alias.scope !1962, !noalias !1959 %ref.tmp49.sroa.4.0.arrayidx54.sroa_idx.i.i.i = getelementptr inbounds i8, ptr %arrayidx54.i.i.i, i64 8 - store ptr %108, ptr %ref.tmp49.sroa.4.0.arrayidx54.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1962, !noalias !1959 + store ptr %106, ptr %ref.tmp49.sroa.4.0.arrayidx54.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1962, !noalias !1959 %inc56.i.i.i = add nuw i64 %i.014.i.i.i, 1 %exitcond19.not.i.i.i = icmp eq i64 %inc56.i.i.i, %2 br i1 %exitcond19.not.i.i.i, label %_ZN6duckdb13UnaryExecutor7ExecuteImNS_8string_tEZNS_L24StringDecompressFunctionImEEvRNS_9DataChunkERNS_15ExpressionStateERNS_6VectorEEUlRKmE_EEvS9_S9_mT1_.exit, label %for.body48.i.i.i, !llvm.loop !1970 @@ -61300,16 +61298,16 @@ invoke.cont.i.i: ; preds = %sw.default.i.i invoke.cont14.i.i: ; preds = %invoke.cont.i.i %data.i.i.i54.i.i = getelementptr inbounds i8, ptr %result, i64 32 - %110 = load ptr, ptr %data.i.i.i54.i.i, align 8, !tbaa !163 + %108 = load ptr, ptr %data.i.i.i54.i.i, align 8, !tbaa !163 %data.i.i.i = getelementptr inbounds i8, ptr %vdata.i.i, i64 8 - %111 = load ptr, ptr %data.i.i.i, align 8, !tbaa !212 - %112 = load ptr, ptr %vdata.i.i, align 8, !tbaa !217 + %109 = load ptr, ptr %data.i.i.i, align 8, !tbaa !212 + %110 = load ptr, ptr %vdata.i.i, align 8, !tbaa !217 %validity.i55.i.i = getelementptr inbounds i8, ptr %result, i64 40 call void @llvm.experimental.noalias.scope.decl(metadata !1971) call void @llvm.experimental.noalias.scope.decl(metadata !1974) call void @llvm.experimental.noalias.scope.decl(metadata !1976) - %113 = load ptr, ptr %validity.i53.i.i, align 8, !tbaa !187, !noalias !1978 - %tobool.not.i.i56.i.i = icmp eq ptr %113, null + %111 = load ptr, ptr %validity.i53.i.i, align 8, !tbaa !187, !noalias !1978 + %tobool.not.i.i56.i.i = icmp eq ptr %111, null br i1 %tobool.not.i.i56.i.i, label %for.cond11.preheader.i.i.i, label %if.then.i.i.i for.cond11.preheader.i.i.i: ; preds = %invoke.cont14.i.i @@ -61317,8 +61315,8 @@ for.cond11.preheader.i.i.i: ; preds = %invoke.cont14.i.i br i1 %cmp124.not.i.i.i, label %invoke.cont22.i.i, label %for.body14.lr.ph.i.i.i for.body14.lr.ph.i.i.i: ; preds = %for.cond11.preheader.i.i.i - %114 = load ptr, ptr %112, align 8, !tbaa !226, !alias.scope !1976, !noalias !1979 - %tobool.not.i52.i.i.i = icmp eq ptr %114, null + %112 = load ptr, ptr %110, align 8, !tbaa !226, !alias.scope !1976, !noalias !1979 + %tobool.not.i52.i.i.i = icmp eq ptr %112, null br i1 %tobool.not.i52.i.i.i, label %for.body14.us.i.i.i.preheader, label %for.body14.i.i.i for.body14.us.i.i.i.preheader: ; preds = %for.body14.lr.ph.i.i.i @@ -61326,17 +61324,17 @@ for.body14.us.i.i.i.preheader: ; preds = %for.body14.lr.ph.i. br i1 %min.iters.check61, label %for.body14.us.i.i.i.preheader31, label %vector.scevcheck51 vector.scevcheck51: ; preds = %for.body14.us.i.i.i.preheader - %115 = add i64 %2, -1 - %mul.result53 = shl i64 %115, 4 - %116 = getelementptr i8, ptr %110, i64 %mul.result53 - %117 = icmp ult ptr %116, %110 - %scevgep55 = getelementptr i8, ptr %110, i64 8 - %mul.overflow58 = icmp ugt i64 %115, 1152921504606846975 - %118 = getelementptr i8, ptr %scevgep55, i64 %mul.result53 - %119 = icmp ult ptr %118, %scevgep55 - %120 = or i1 %mul.overflow58, %119 - %121 = or i1 %117, %120 - br i1 %121, label %for.body14.us.i.i.i.preheader31, label %vector.ph62 + %113 = add i64 %2, -1 + %mul.result53 = shl i64 %113, 4 + %114 = getelementptr i8, ptr %108, i64 %mul.result53 + %115 = icmp ult ptr %114, %108 + %scevgep55 = getelementptr i8, ptr %108, i64 8 + %mul.overflow58 = icmp ugt i64 %113, 1152921504606846975 + %116 = getelementptr i8, ptr %scevgep55, i64 %mul.result53 + %117 = icmp ult ptr %116, %scevgep55 + %118 = or i1 %mul.overflow58, %117 + %119 = or i1 %115, %118 + br i1 %119, label %for.body14.us.i.i.i.preheader31, label %vector.ph62 vector.ph62: ; preds = %vector.scevcheck51 %n.vec64 = and i64 %2, 2305843009213693950 @@ -61344,34 +61342,33 @@ vector.ph62: ; preds = %vector.scevcheck51 vector.body67: ; preds = %vector.body67, %vector.ph62 %index68 = phi i64 [ 0, %vector.ph62 ], [ %index.next71, %vector.body67 ] - %122 = getelementptr inbounds i64, ptr %111, i64 %index68 - %wide.load69 = load <2 x i64>, ptr %122, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 - %123 = lshr <2 x i64> %wide.load69, - %124 = and <2 x i64> %123, - %125 = lshr <2 x i64> %wide.load69, - %126 = and <2 x i64> %125, - %127 = or disjoint <2 x i64> %126, %124 - %128 = shl <2 x i64> %wide.load69, - %129 = and <2 x i64> %128, - %130 = or disjoint <2 x i64> %127, %129 - %131 = inttoptr <2 x i64> %130 to <2 x ptr> - %132 = shl <2 x i64> %wide.load69, - %133 = and <2 x i64> %132, - %134 = and <2 x i64> %128, - %135 = and <2 x i64> %125, - %136 = and <2 x i64> %123, - %137 = and <2 x i64> %wide.load69, - %138 = or disjoint <2 x i64> %136, %137 - %139 = or disjoint <2 x i64> %138, %135 - %140 = or disjoint <2 x i64> %139, %134 - %141 = or disjoint <2 x i64> %140, %133 - %142 = getelementptr inbounds %"struct.duckdb::string_t", ptr %110, i64 %index68 - %143 = inttoptr <2 x i64> %141 to <2 x ptr> - %interleaved.vec70 = shufflevector <2 x ptr> %143, <2 x ptr> %131, <4 x i32> - store <4 x ptr> %interleaved.vec70, ptr %142, align 8, !alias.scope !1974, !noalias !1981 + %120 = getelementptr inbounds i64, ptr %109, i64 %index68 + %wide.load69 = load <2 x i64>, ptr %120, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 + %121 = lshr <2 x i64> %wide.load69, + %122 = and <2 x i64> %121, + %123 = lshr <2 x i64> %wide.load69, + %124 = and <2 x i64> %123, + %125 = or disjoint <2 x i64> %124, %122 + %126 = shl <2 x i64> %wide.load69, + %127 = and <2 x i64> %126, + %128 = or disjoint <2 x i64> %125, %127 + %129 = shl <2 x i64> %wide.load69, + %130 = and <2 x i64> %129, + %131 = and <2 x i64> %126, + %132 = and <2 x i64> %123, + %133 = and <2 x i64> %121, + %134 = and <2 x i64> %wide.load69, + %135 = or disjoint <2 x i64> %133, %134 + %136 = or disjoint <2 x i64> %135, %132 + %137 = or disjoint <2 x i64> %136, %131 + %138 = or disjoint <2 x i64> %137, %130 + %139 = getelementptr inbounds %"struct.duckdb::string_t", ptr %108, i64 %index68 + %140 = shufflevector <2 x i64> %138, <2 x i64> %128, <4 x i32> + %interleaved.vec70 = inttoptr <4 x i64> %140 to <4 x ptr> + store <4 x ptr> %interleaved.vec70, ptr %139, align 8, !alias.scope !1974, !noalias !1981 %index.next71 = add nuw nsw i64 %index68, 2 - %144 = icmp eq i64 %index.next71, %n.vec64 - br i1 %144, label %middle.block59, label %vector.body67, !llvm.loop !1982 + %141 = icmp eq i64 %index.next71, %n.vec64 + br i1 %141, label %middle.block59, label %vector.body67, !llvm.loop !1982 middle.block59: ; preds = %vector.body67 %cmp.n66 = icmp eq i64 %2, %n.vec64 @@ -61383,44 +61380,44 @@ for.body14.us.i.i.i.preheader31: ; preds = %middle.block59, %ve for.body14.us.i.i.i: ; preds = %for.body14.us.i.i.i.preheader31, %for.body14.us.i.i.i %i10.05.us.i.i.i = phi i64 [ %inc24.us.i.i.i, %for.body14.us.i.i.i ], [ %i10.05.us.i.i.i.ph, %for.body14.us.i.i.i.preheader31 ] - %arrayidx18.us.i.i.i = getelementptr inbounds i64, ptr %111, i64 %i10.05.us.i.i.i - %145 = load i64, ptr %arrayidx18.us.i.i.i, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 - %input.addr.sroa.4.0.extract.shift.i58.us.i.i.i = lshr i64 %145, 24 + %arrayidx18.us.i.i.i = getelementptr inbounds i64, ptr %109, i64 %i10.05.us.i.i.i + %142 = load i64, ptr %arrayidx18.us.i.i.i, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 + %input.addr.sroa.4.0.extract.shift.i58.us.i.i.i = lshr i64 %142, 24 %retval.sroa.6.8.insert.ext.i.i.i59.us.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i58.us.i.i.i, 255 - %146 = lshr i64 %145, 8 - %retval.sroa.6.9.insert.shift.i.i.i60.us.i.i.i = and i64 %146, 65280 + %143 = lshr i64 %142, 8 + %retval.sroa.6.9.insert.shift.i.i.i60.us.i.i.i = and i64 %143, 65280 %retval.sroa.6.9.insert.insert.i.i.i61.us.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.shift.i.i.i60.us.i.i.i, %retval.sroa.6.8.insert.ext.i.i.i59.us.i.i.i - %147 = shl i64 %145, 8 - %retval.sroa.6.10.insert.shift.i.i.i62.us.i.i.i = and i64 %147, 16711680 + %144 = shl i64 %142, 8 + %retval.sroa.6.10.insert.shift.i.i.i62.us.i.i.i = and i64 %144, 16711680 %retval.sroa.6.10.insert.insert.i.i.i63.us.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.insert.i.i.i61.us.i.i.i, %retval.sroa.6.10.insert.shift.i.i.i62.us.i.i.i - %148 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i63.us.i.i.i to ptr - %149 = shl i64 %145, 24 - %retval.sroa.5.0.insert.ext.i.i.i64.us.i.i.i = and i64 %149, -72057594037927936 - %retval.sroa.4.0.insert.shift.i.i.i65.us.i.i.i = and i64 %147, 71776119061217280 - %retval.sroa.3.0.insert.shift.i.i.i66.us.i.i.i = and i64 %146, 280375465082880 + %145 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i63.us.i.i.i to ptr + %146 = shl i64 %142, 24 + %retval.sroa.5.0.insert.ext.i.i.i64.us.i.i.i = and i64 %146, -72057594037927936 + %retval.sroa.4.0.insert.shift.i.i.i65.us.i.i.i = and i64 %144, 71776119061217280 + %retval.sroa.3.0.insert.shift.i.i.i66.us.i.i.i = and i64 %143, 280375465082880 %retval.sroa.2.0.insert.shift.i.i.i67.us.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i58.us.i.i.i, 1095216660480 - %retval.sroa.0.0.insert.ext.i.i.i68.us.i.i.i = and i64 %145, 255 + %retval.sroa.0.0.insert.ext.i.i.i68.us.i.i.i = and i64 %142, 255 %retval.sroa.4.0.insert.insert.i.i.i69.us.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.shift.i.i.i67.us.i.i.i, %retval.sroa.0.0.insert.ext.i.i.i68.us.i.i.i %retval.sroa.3.0.insert.insert.i.i.i70.us.i.i.i = or disjoint i64 %retval.sroa.4.0.insert.insert.i.i.i69.us.i.i.i, %retval.sroa.3.0.insert.shift.i.i.i66.us.i.i.i %retval.sroa.2.0.insert.insert.i.i.i71.us.i.i.i = or disjoint i64 %retval.sroa.3.0.insert.insert.i.i.i70.us.i.i.i, %retval.sroa.4.0.insert.shift.i.i.i65.us.i.i.i %retval.sroa.0.0.insert.insert.i.i.i72.us.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.insert.i.i.i71.us.i.i.i, %retval.sroa.5.0.insert.ext.i.i.i64.us.i.i.i - %arrayidx22.us.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %110, i64 %i10.05.us.i.i.i + %arrayidx22.us.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %108, i64 %i10.05.us.i.i.i store i64 %retval.sroa.0.0.insert.insert.i.i.i72.us.i.i.i, ptr %arrayidx22.us.i.i.i, align 8, !tbaa.struct !76, !alias.scope !1974, !noalias !1981 %ref.tmp17.sroa.4.0.arrayidx22.sroa_idx.us.i.i.i = getelementptr inbounds i8, ptr %arrayidx22.us.i.i.i, i64 8 - store ptr %148, ptr %ref.tmp17.sroa.4.0.arrayidx22.sroa_idx.us.i.i.i, align 8, !tbaa !41, !alias.scope !1974, !noalias !1981 + store ptr %145, ptr %ref.tmp17.sroa.4.0.arrayidx22.sroa_idx.us.i.i.i, align 8, !tbaa !41, !alias.scope !1974, !noalias !1981 %inc24.us.i.i.i = add nuw i64 %i10.05.us.i.i.i, 1 %exitcond9.not.i.i.i = icmp eq i64 %inc24.us.i.i.i, %2 br i1 %exitcond9.not.i.i.i, label %invoke.cont22.i.i, label %for.body14.us.i.i.i, !llvm.loop !1983 if.then.i.i.i: ; preds = %invoke.cont14.i.i - %150 = load ptr, ptr %validity.i55.i.i, align 8, !tbaa !187, !noalias !1978 - %tobool.not.i47.i.i.i = icmp eq ptr %150, null + %147 = load ptr, ptr %validity.i55.i.i, align 8, !tbaa !187, !noalias !1978 + %tobool.not.i47.i.i.i = icmp eq ptr %147, null br i1 %tobool.not.i47.i.i.i, label %if.then.i.i.i.i, label %_ZN6duckdb21TemplatedValidityMaskImE14EnsureWritableEv.exit.i.i.i if.then.i.i.i.i: ; preds = %if.then.i.i.i %target_count.i.i.i80.i.i = getelementptr inbounds i8, ptr %result, i64 64 - %151 = load i64, ptr %target_count.i.i.i80.i.i, align 8, !tbaa !204, !noalias !1978 - invoke void @_ZN6duckdb21TemplatedValidityMaskImE10InitializeEm(ptr noundef nonnull align 8 dereferenceable(32) %validity.i55.i.i, i64 noundef %151) + %148 = load i64, ptr %target_count.i.i.i80.i.i, align 8, !tbaa !204, !noalias !1978 + invoke void @_ZN6duckdb21TemplatedValidityMaskImE10InitializeEm(ptr noundef nonnull align 8 dereferenceable(32) %validity.i55.i.i, i64 noundef %148) to label %_ZN6duckdb21TemplatedValidityMaskImE14EnsureWritableEv.exit.i.i.i unwind label %lpad21.loopexit.split-lp.i.i _ZN6duckdb21TemplatedValidityMaskImE14EnsureWritableEv.exit.i.i.i: ; preds = %if.then.i.i.i.i, %if.then.i.i.i @@ -61428,8 +61425,8 @@ _ZN6duckdb21TemplatedValidityMaskImE14EnsureWritableEv.exit.i.i.i: ; preds = %if br i1 %cmp2.not.i.i.i, label %invoke.cont22.i.i, label %for.body.lr.ph.i57.i.i for.body.lr.ph.i57.i.i: ; preds = %_ZN6duckdb21TemplatedValidityMaskImE14EnsureWritableEv.exit.i.i.i - %152 = load ptr, ptr %112, align 8, !tbaa !226, !alias.scope !1976, !noalias !1979 - %tobool.not.i48.i.i.i = icmp eq ptr %152, null + %149 = load ptr, ptr %110, align 8, !tbaa !226, !alias.scope !1976, !noalias !1979 + %tobool.not.i48.i.i.i = icmp eq ptr %149, null %target_count.i.i58.i.i = getelementptr inbounds i8, ptr %result, i64 64 br label %for.body.i59.i.i @@ -61438,25 +61435,25 @@ for.body.i59.i.i: ; preds = %if.end.i.i.i, %for. br i1 %tobool.not.i48.i.i.i, label %_ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i, label %cond.true.i.i.i.i cond.true.i.i.i.i: ; preds = %for.body.i59.i.i - %arrayidx.i.i.i.i = getelementptr inbounds i32, ptr %152, i64 %i.03.i.i.i - %153 = load i32, ptr %arrayidx.i.i.i.i, align 4, !tbaa !199, !noalias !1978 - %conv.i.i.i.i = zext i32 %153 to i64 + %arrayidx.i.i.i.i = getelementptr inbounds i32, ptr %149, i64 %i.03.i.i.i + %150 = load i32, ptr %arrayidx.i.i.i.i, align 4, !tbaa !199, !noalias !1978 + %conv.i.i.i.i = zext i32 %150 to i64 br label %_ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i _ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i: ; preds = %cond.true.i.i.i.i, %for.body.i59.i.i %cond.i.i60.i.i = phi i64 [ %conv.i.i.i.i, %cond.true.i.i.i.i ], [ %i.03.i.i.i, %for.body.i59.i.i ] - %154 = load ptr, ptr %validity.i53.i.i, align 8, !tbaa !187, !noalias !1978 - %tobool.not.i.i.i.i.i = icmp eq ptr %154, null + %151 = load ptr, ptr %validity.i53.i.i, align 8, !tbaa !187, !noalias !1978 + %tobool.not.i.i.i.i.i = icmp eq ptr %151, null br i1 %tobool.not.i.i.i.i.i, label %_ZNK6duckdb21TemplatedValidityMaskImE16RowIsValidUnsafeEm.exit.i.i.i, label %if.end.i.i.i.i.i if.end.i.i.i.i.i: ; preds = %_ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i %div2.i.i.i.i.i = lshr i64 %cond.i.i60.i.i, 6 - %arrayidx.i.i.i.i.i.i = getelementptr inbounds i64, ptr %154, i64 %div2.i.i.i.i.i - %155 = load i64, ptr %arrayidx.i.i.i.i.i.i, align 8, !tbaa !40, !noalias !1978 + %arrayidx.i.i.i.i.i.i = getelementptr inbounds i64, ptr %151, i64 %div2.i.i.i.i.i + %152 = load i64, ptr %arrayidx.i.i.i.i.i.i, align 8, !tbaa !40, !noalias !1978 br label %_ZNK6duckdb21TemplatedValidityMaskImE16RowIsValidUnsafeEm.exit.i.i.i _ZNK6duckdb21TemplatedValidityMaskImE16RowIsValidUnsafeEm.exit.i.i.i: ; preds = %if.end.i.i.i.i.i, %_ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i - %retval.0.i.i.i.i.i = phi i64 [ %155, %if.end.i.i.i.i.i ], [ -1, %_ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i ] + %retval.0.i.i.i.i.i = phi i64 [ %152, %if.end.i.i.i.i.i ], [ -1, %_ZNK6duckdb15SelectionVector9get_indexEm.exit.i.i.i ] %rem.i.i.i.i.i = and i64 %cond.i.i60.i.i, 63 %shl.i.i.i.i.i = shl nuw i64 1, %rem.i.i.i.i.i %and.i.i.i.i.i = and i64 %retval.0.i.i.i.i.i, %shl.i.i.i.i.i @@ -61464,41 +61461,41 @@ _ZNK6duckdb21TemplatedValidityMaskImE16RowIsValidUnsafeEm.exit.i.i.i: ; preds = br i1 %tobool.i.i.not.i.i.i, label %if.else.i.i.i, label %if.then3.i.i.i if.then3.i.i.i: ; preds = %_ZNK6duckdb21TemplatedValidityMaskImE16RowIsValidUnsafeEm.exit.i.i.i - %arrayidx.i61.i.i = getelementptr inbounds i64, ptr %111, i64 %cond.i.i60.i.i - %156 = load i64, ptr %arrayidx.i61.i.i, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 - %input.addr.sroa.4.0.extract.shift.i.i62.i.i = lshr i64 %156, 24 + %arrayidx.i61.i.i = getelementptr inbounds i64, ptr %109, i64 %cond.i.i60.i.i + %153 = load i64, ptr %arrayidx.i61.i.i, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 + %input.addr.sroa.4.0.extract.shift.i.i62.i.i = lshr i64 %153, 24 %retval.sroa.6.8.insert.ext.i.i.i.i63.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i.i62.i.i, 255 - %157 = lshr i64 %156, 8 - %retval.sroa.6.9.insert.shift.i.i.i.i64.i.i = and i64 %157, 65280 + %154 = lshr i64 %153, 8 + %retval.sroa.6.9.insert.shift.i.i.i.i64.i.i = and i64 %154, 65280 %retval.sroa.6.9.insert.insert.i.i.i.i65.i.i = or disjoint i64 %retval.sroa.6.9.insert.shift.i.i.i.i64.i.i, %retval.sroa.6.8.insert.ext.i.i.i.i63.i.i - %158 = shl i64 %156, 8 - %retval.sroa.6.10.insert.shift.i.i.i.i66.i.i = and i64 %158, 16711680 + %155 = shl i64 %153, 8 + %retval.sroa.6.10.insert.shift.i.i.i.i66.i.i = and i64 %155, 16711680 %retval.sroa.6.10.insert.insert.i.i.i.i67.i.i = or disjoint i64 %retval.sroa.6.9.insert.insert.i.i.i.i65.i.i, %retval.sroa.6.10.insert.shift.i.i.i.i66.i.i - %159 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i.i67.i.i to ptr - %160 = shl i64 %156, 24 - %retval.sroa.5.0.insert.ext.i.i.i.i68.i.i = and i64 %160, -72057594037927936 - %retval.sroa.4.0.insert.shift.i.i.i.i69.i.i = and i64 %158, 71776119061217280 - %retval.sroa.3.0.insert.shift.i.i.i.i70.i.i = and i64 %157, 280375465082880 + %156 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i.i67.i.i to ptr + %157 = shl i64 %153, 24 + %retval.sroa.5.0.insert.ext.i.i.i.i68.i.i = and i64 %157, -72057594037927936 + %retval.sroa.4.0.insert.shift.i.i.i.i69.i.i = and i64 %155, 71776119061217280 + %retval.sroa.3.0.insert.shift.i.i.i.i70.i.i = and i64 %154, 280375465082880 %retval.sroa.2.0.insert.shift.i.i.i.i71.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i.i62.i.i, 1095216660480 - %retval.sroa.0.0.insert.ext.i.i.i.i72.i.i = and i64 %156, 255 + %retval.sroa.0.0.insert.ext.i.i.i.i72.i.i = and i64 %153, 255 %retval.sroa.4.0.insert.insert.i.i.i.i73.i.i = or disjoint i64 %retval.sroa.2.0.insert.shift.i.i.i.i71.i.i, %retval.sroa.0.0.insert.ext.i.i.i.i72.i.i %retval.sroa.3.0.insert.insert.i.i.i.i74.i.i = or disjoint i64 %retval.sroa.4.0.insert.insert.i.i.i.i73.i.i, %retval.sroa.3.0.insert.shift.i.i.i.i70.i.i %retval.sroa.2.0.insert.insert.i.i.i.i75.i.i = or disjoint i64 %retval.sroa.3.0.insert.insert.i.i.i.i74.i.i, %retval.sroa.4.0.insert.shift.i.i.i.i69.i.i %retval.sroa.0.0.insert.insert.i.i.i.i76.i.i = or disjoint i64 %retval.sroa.2.0.insert.insert.i.i.i.i75.i.i, %retval.sroa.5.0.insert.ext.i.i.i.i68.i.i - %arrayidx6.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %110, i64 %i.03.i.i.i + %arrayidx6.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %108, i64 %i.03.i.i.i store i64 %retval.sroa.0.0.insert.insert.i.i.i.i76.i.i, ptr %arrayidx6.i.i.i, align 8, !tbaa.struct !76, !alias.scope !1974, !noalias !1981 %ref.tmp.sroa.4.0.arrayidx6.sroa_idx.i.i.i = getelementptr inbounds i8, ptr %arrayidx6.i.i.i, i64 8 - store ptr %159, ptr %ref.tmp.sroa.4.0.arrayidx6.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1974, !noalias !1981 + store ptr %156, ptr %ref.tmp.sroa.4.0.arrayidx6.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1974, !noalias !1981 br label %if.end.i.i.i if.else.i.i.i: ; preds = %_ZNK6duckdb21TemplatedValidityMaskImE16RowIsValidUnsafeEm.exit.i.i.i - %161 = load ptr, ptr %validity.i55.i.i, align 8, !tbaa !187, !noalias !1978 - %tobool.not.i49.i.i.i = icmp eq ptr %161, null + %158 = load ptr, ptr %validity.i55.i.i, align 8, !tbaa !187, !noalias !1978 + %tobool.not.i49.i.i.i = icmp eq ptr %158, null br i1 %tobool.not.i49.i.i.i, label %if.then.i51.i.i.i, label %_ZN6duckdb21TemplatedValidityMaskImE10SetInvalidEm.exit.i.i.i if.then.i51.i.i.i: ; preds = %if.else.i.i.i - %162 = load i64, ptr %target_count.i.i58.i.i, align 8, !tbaa !204, !noalias !1978 - invoke void @_ZN6duckdb21TemplatedValidityMaskImE10InitializeEm(ptr noundef nonnull align 8 dereferenceable(32) %validity.i55.i.i, i64 noundef %162) + %159 = load i64, ptr %target_count.i.i58.i.i, align 8, !tbaa !204, !noalias !1978 + invoke void @_ZN6duckdb21TemplatedValidityMaskImE10InitializeEm(ptr noundef nonnull align 8 dereferenceable(32) %validity.i55.i.i, i64 noundef %159) to label %.noexc81.i.i unwind label %lpad21.loopexit.i.i .noexc81.i.i: ; preds = %if.then.i51.i.i.i @@ -61506,14 +61503,14 @@ if.then.i51.i.i.i: ; preds = %if.else.i.i.i br label %_ZN6duckdb21TemplatedValidityMaskImE10SetInvalidEm.exit.i.i.i _ZN6duckdb21TemplatedValidityMaskImE10SetInvalidEm.exit.i.i.i: ; preds = %.noexc81.i.i, %if.else.i.i.i - %163 = phi ptr [ %.pre.i.i.i.i, %.noexc81.i.i ], [ %161, %if.else.i.i.i ] + %160 = phi ptr [ %.pre.i.i.i.i, %.noexc81.i.i ], [ %158, %if.else.i.i.i ] %div2.i.i.i.i.i.i = lshr i64 %i.03.i.i.i, 6 %rem.i.i.i.i.i.i = and i64 %i.03.i.i.i, 63 %shl.i.i.i.i.i.i = shl nuw i64 1, %rem.i.i.i.i.i.i %not.i.i.i.i.i.i = xor i64 %shl.i.i.i.i.i.i, -1 - %arrayidx.i.i.i50.i.i.i = getelementptr inbounds i64, ptr %163, i64 %div2.i.i.i.i.i.i - %164 = load i64, ptr %arrayidx.i.i.i50.i.i.i, align 8, !tbaa !40, !noalias !1978 - %and.i.i.i.i79.i.i = and i64 %164, %not.i.i.i.i.i.i + %arrayidx.i.i.i50.i.i.i = getelementptr inbounds i64, ptr %160, i64 %div2.i.i.i.i.i.i + %161 = load i64, ptr %arrayidx.i.i.i50.i.i.i, align 8, !tbaa !40, !noalias !1978 + %and.i.i.i.i79.i.i = and i64 %161, %not.i.i.i.i.i.i store i64 %and.i.i.i.i79.i.i, ptr %arrayidx.i.i.i50.i.i.i, align 8, !tbaa !40, !noalias !1978 br label %if.end.i.i.i @@ -61524,136 +61521,136 @@ if.end.i.i.i: ; preds = %_ZN6duckdb21Templat for.body14.i.i.i: ; preds = %for.body14.lr.ph.i.i.i, %for.body14.i.i.i %i10.05.i.i.i = phi i64 [ %inc24.i.i.i, %for.body14.i.i.i ], [ 0, %for.body14.lr.ph.i.i.i ] - %arrayidx.i54.i.i.i = getelementptr inbounds i32, ptr %114, i64 %i10.05.i.i.i - %165 = load i32, ptr %arrayidx.i54.i.i.i, align 4, !tbaa !199, !noalias !1978 - %conv.i55.i.i.i = zext i32 %165 to i64 - %arrayidx18.i.i.i = getelementptr inbounds i64, ptr %111, i64 %conv.i55.i.i.i - %166 = load i64, ptr %arrayidx18.i.i.i, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 - %input.addr.sroa.4.0.extract.shift.i58.i.i.i = lshr i64 %166, 24 + %arrayidx.i54.i.i.i = getelementptr inbounds i32, ptr %112, i64 %i10.05.i.i.i + %162 = load i32, ptr %arrayidx.i54.i.i.i, align 4, !tbaa !199, !noalias !1978 + %conv.i55.i.i.i = zext i32 %162 to i64 + %arrayidx18.i.i.i = getelementptr inbounds i64, ptr %109, i64 %conv.i55.i.i.i + %163 = load i64, ptr %arrayidx18.i.i.i, align 8, !tbaa !40, !alias.scope !1971, !noalias !1980 + %input.addr.sroa.4.0.extract.shift.i58.i.i.i = lshr i64 %163, 24 %retval.sroa.6.8.insert.ext.i.i.i59.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i58.i.i.i, 255 - %167 = lshr i64 %166, 8 - %retval.sroa.6.9.insert.shift.i.i.i60.i.i.i = and i64 %167, 65280 + %164 = lshr i64 %163, 8 + %retval.sroa.6.9.insert.shift.i.i.i60.i.i.i = and i64 %164, 65280 %retval.sroa.6.9.insert.insert.i.i.i61.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.shift.i.i.i60.i.i.i, %retval.sroa.6.8.insert.ext.i.i.i59.i.i.i - %168 = shl i64 %166, 8 - %retval.sroa.6.10.insert.shift.i.i.i62.i.i.i = and i64 %168, 16711680 + %165 = shl i64 %163, 8 + %retval.sroa.6.10.insert.shift.i.i.i62.i.i.i = and i64 %165, 16711680 %retval.sroa.6.10.insert.insert.i.i.i63.i.i.i = or disjoint i64 %retval.sroa.6.9.insert.insert.i.i.i61.i.i.i, %retval.sroa.6.10.insert.shift.i.i.i62.i.i.i - %169 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i63.i.i.i to ptr - %170 = shl i64 %166, 24 - %retval.sroa.5.0.insert.ext.i.i.i64.i.i.i = and i64 %170, -72057594037927936 - %retval.sroa.4.0.insert.shift.i.i.i65.i.i.i = and i64 %168, 71776119061217280 - %retval.sroa.3.0.insert.shift.i.i.i66.i.i.i = and i64 %167, 280375465082880 + %166 = inttoptr i64 %retval.sroa.6.10.insert.insert.i.i.i63.i.i.i to ptr + %167 = shl i64 %163, 24 + %retval.sroa.5.0.insert.ext.i.i.i64.i.i.i = and i64 %167, -72057594037927936 + %retval.sroa.4.0.insert.shift.i.i.i65.i.i.i = and i64 %165, 71776119061217280 + %retval.sroa.3.0.insert.shift.i.i.i66.i.i.i = and i64 %164, 280375465082880 %retval.sroa.2.0.insert.shift.i.i.i67.i.i.i = and i64 %input.addr.sroa.4.0.extract.shift.i58.i.i.i, 1095216660480 - %retval.sroa.0.0.insert.ext.i.i.i68.i.i.i = and i64 %166, 255 + %retval.sroa.0.0.insert.ext.i.i.i68.i.i.i = and i64 %163, 255 %retval.sroa.4.0.insert.insert.i.i.i69.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.shift.i.i.i67.i.i.i, %retval.sroa.0.0.insert.ext.i.i.i68.i.i.i %retval.sroa.3.0.insert.insert.i.i.i70.i.i.i = or disjoint i64 %retval.sroa.4.0.insert.insert.i.i.i69.i.i.i, %retval.sroa.3.0.insert.shift.i.i.i66.i.i.i %retval.sroa.2.0.insert.insert.i.i.i71.i.i.i = or disjoint i64 %retval.sroa.3.0.insert.insert.i.i.i70.i.i.i, %retval.sroa.4.0.insert.shift.i.i.i65.i.i.i %retval.sroa.0.0.insert.insert.i.i.i72.i.i.i = or disjoint i64 %retval.sroa.2.0.insert.insert.i.i.i71.i.i.i, %retval.sroa.5.0.insert.ext.i.i.i64.i.i.i - %arrayidx22.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %110, i64 %i10.05.i.i.i + %arrayidx22.i.i.i = getelementptr inbounds %"struct.duckdb::string_t", ptr %108, i64 %i10.05.i.i.i store i64 %retval.sroa.0.0.insert.insert.i.i.i72.i.i.i, ptr %arrayidx22.i.i.i, align 8, !tbaa.struct !76, !alias.scope !1974, !noalias !1981 %ref.tmp17.sroa.4.0.arrayidx22.sroa_idx.i.i.i = getelementptr inbounds i8, ptr %arrayidx22.i.i.i, i64 8 - store ptr %169, ptr %ref.tmp17.sroa.4.0.arrayidx22.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1974, !noalias !1981 + store ptr %166, ptr %ref.tmp17.sroa.4.0.arrayidx22.sroa_idx.i.i.i, align 8, !tbaa !41, !alias.scope !1974, !noalias !1981 %inc24.i.i.i = add nuw i64 %i10.05.i.i.i, 1 %exitcond8.not.i.i.i = icmp eq i64 %inc24.i.i.i, %2 br i1 %exitcond8.not.i.i.i, label %invoke.cont22.i.i, label %for.body14.i.i.i, !llvm.loop !1985 invoke.cont22.i.i: ; preds = %if.end.i.i.i, %for.body14.i.i.i, %for.body14.us.i.i.i, %_ZN6duckdb21TemplatedValidityMaskImE14EnsureWritableEv.exit.i.i.i, %middle.block59, %for.cond11.preheader.i.i.i %_M_refcount.i.i.i.i.i = getelementptr inbounds i8, ptr %vdata.i.i, i64 64 - %171 = load ptr, ptr %_M_refcount.i.i.i.i.i, align 8, !tbaa !198 - %cmp.not.i.i.i.i.i.i = icmp eq ptr %171, null + %168 = load ptr, ptr %_M_refcount.i.i.i.i.i, align 8, !tbaa !198 + %cmp.not.i.i.i.i.i.i = icmp eq ptr %168, null br i1 %cmp.not.i.i.i.i.i.i, label %_ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i, label %if.then.i.i.i.i.i.i if.then.i.i.i.i.i.i: ; preds = %invoke.cont22.i.i - %_M_use_count.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %171, i64 8 - %172 = load atomic i64, ptr %_M_use_count.i.i.i.i.i.i.i acquire, align 8 - %cmp.i.i.i.i.i.i.i = icmp eq i64 %172, 4294967297 - %173 = trunc i64 %172 to i32 + %_M_use_count.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %168, i64 8 + %169 = load atomic i64, ptr %_M_use_count.i.i.i.i.i.i.i acquire, align 8 + %cmp.i.i.i.i.i.i.i = icmp eq i64 %169, 4294967297 + %170 = trunc i64 %169 to i32 br i1 %cmp.i.i.i.i.i.i.i, label %if.then.i.i.i.i.i85.i.i, label %if.end.i.i.i.i.i82.i.i if.then.i.i.i.i.i85.i.i: ; preds = %if.then.i.i.i.i.i.i store i32 0, ptr %_M_use_count.i.i.i.i.i.i.i, align 8, !tbaa !201 - %_M_weak_count.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %171, i64 12 + %_M_weak_count.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %168, i64 12 store i32 0, ptr %_M_weak_count.i.i.i.i.i.i.i, align 4, !tbaa !203 - %vtable.i.i.i.i.i.i.i = load ptr, ptr %171, align 8, !tbaa !65 + %vtable.i.i.i.i.i.i.i = load ptr, ptr %168, align 8, !tbaa !65 %vfn.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %vtable.i.i.i.i.i.i.i, i64 16 - %174 = load ptr, ptr %vfn.i.i.i.i.i.i.i, align 8 - call void %174(ptr noundef nonnull align 8 dereferenceable(16) %171) #21 - %vtable3.i.i.i.i.i.i.i = load ptr, ptr %171, align 8, !tbaa !65 + %171 = load ptr, ptr %vfn.i.i.i.i.i.i.i, align 8 + call void %171(ptr noundef nonnull align 8 dereferenceable(16) %168) #21 + %vtable3.i.i.i.i.i.i.i = load ptr, ptr %168, align 8, !tbaa !65 %vfn4.i.i.i.i.i.i.i = getelementptr inbounds i8, ptr %vtable3.i.i.i.i.i.i.i, i64 24 - %175 = load ptr, ptr %vfn4.i.i.i.i.i.i.i, align 8 - call void %175(ptr noundef nonnull align 8 dereferenceable(16) %171) #21 + %172 = load ptr, ptr %vfn4.i.i.i.i.i.i.i, align 8 + call void %172(ptr noundef nonnull align 8 dereferenceable(16) %168) #21 br label %_ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i if.end.i.i.i.i.i82.i.i: ; preds = %if.then.i.i.i.i.i.i - %176 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41 - %tobool.i.i.not.i.i.i.i.i.i.i = icmp eq i8 %176, 0 + %173 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41 + %tobool.i.i.not.i.i.i.i.i.i.i = icmp eq i8 %173, 0 br i1 %tobool.i.i.not.i.i.i.i.i.i.i, label %if.else.i.i.i.i.i.i.i.i, label %if.then.i.i.i.i.i.i83.i.i if.then.i.i.i.i.i.i83.i.i: ; preds = %if.end.i.i.i.i.i82.i.i - %add.i.i.i.i.i.i.i.i = add nsw i32 %173, -1 + %add.i.i.i.i.i.i.i.i = add nsw i32 %170, -1 store i32 %add.i.i.i.i.i.i.i.i, ptr %_M_use_count.i.i.i.i.i.i.i, align 4, !tbaa !199 br label %invoke.cont.i.i.i.i.i.i.i if.else.i.i.i.i.i.i.i.i: ; preds = %if.end.i.i.i.i.i82.i.i - %177 = atomicrmw volatile add ptr %_M_use_count.i.i.i.i.i.i.i, i32 -1 acq_rel, align 4 + %174 = atomicrmw volatile add ptr %_M_use_count.i.i.i.i.i.i.i, i32 -1 acq_rel, align 4 br label %invoke.cont.i.i.i.i.i.i.i invoke.cont.i.i.i.i.i.i.i: ; preds = %if.else.i.i.i.i.i.i.i.i, %if.then.i.i.i.i.i.i83.i.i - %retval.0.i.i.i.i.i.i.i.i = phi i32 [ %173, %if.then.i.i.i.i.i.i83.i.i ], [ %177, %if.else.i.i.i.i.i.i.i.i ] + %retval.0.i.i.i.i.i.i.i.i = phi i32 [ %170, %if.then.i.i.i.i.i.i83.i.i ], [ %174, %if.else.i.i.i.i.i.i.i.i ] %cmp6.i.i.i.i.i.i.i = icmp eq i32 %retval.0.i.i.i.i.i.i.i.i, 1 br i1 %cmp6.i.i.i.i.i.i.i, label %if.then7.i.i.i.i.i84.i.i, label %_ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i, !prof !85 if.then7.i.i.i.i.i84.i.i: ; preds = %invoke.cont.i.i.i.i.i.i.i - call void @_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv(ptr noundef nonnull align 8 dereferenceable(16) %171) #21 + call void @_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv(ptr noundef nonnull align 8 dereferenceable(16) %168) #21 br label %_ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i _ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i: ; preds = %if.then7.i.i.i.i.i84.i.i, %invoke.cont.i.i.i.i.i.i.i, %if.then.i.i.i.i.i85.i.i, %invoke.cont22.i.i %_M_refcount.i.i2.i.i.i = getelementptr inbounds i8, ptr %vdata.i.i, i64 32 - %178 = load ptr, ptr %_M_refcount.i.i2.i.i.i, align 8, !tbaa !198 - %cmp.not.i.i.i3.i.i.i = icmp eq ptr %178, null + %175 = load ptr, ptr %_M_refcount.i.i2.i.i.i, align 8, !tbaa !198 + %cmp.not.i.i.i3.i.i.i = icmp eq ptr %175, null br i1 %cmp.not.i.i.i3.i.i.i, label %_ZN6duckdb19UnifiedVectorFormatD2Ev.exit.i.i, label %if.then.i.i.i4.i.i.i if.then.i.i.i4.i.i.i: ; preds = %_ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i - %_M_use_count.i.i.i.i5.i.i.i = getelementptr inbounds i8, ptr %178, i64 8 - %179 = load atomic i64, ptr %_M_use_count.i.i.i.i5.i.i.i acquire, align 8 - %cmp.i.i.i.i6.i.i.i = icmp eq i64 %179, 4294967297 - %180 = trunc i64 %179 to i32 + %_M_use_count.i.i.i.i5.i.i.i = getelementptr inbounds i8, ptr %175, i64 8 + %176 = load atomic i64, ptr %_M_use_count.i.i.i.i5.i.i.i acquire, align 8 + %cmp.i.i.i.i6.i.i.i = icmp eq i64 %176, 4294967297 + %177 = trunc i64 %176 to i32 br i1 %cmp.i.i.i.i6.i.i.i, label %if.then.i.i.i.i16.i.i.i, label %if.end.i.i.i.i7.i.i.i if.then.i.i.i.i16.i.i.i: ; preds = %if.then.i.i.i4.i.i.i store i32 0, ptr %_M_use_count.i.i.i.i5.i.i.i, align 8, !tbaa !201 - %_M_weak_count.i.i.i.i17.i.i.i = getelementptr inbounds i8, ptr %178, i64 12 + %_M_weak_count.i.i.i.i17.i.i.i = getelementptr inbounds i8, ptr %175, i64 12 store i32 0, ptr %_M_weak_count.i.i.i.i17.i.i.i, align 4, !tbaa !203 - %vtable.i.i.i.i18.i.i.i = load ptr, ptr %178, align 8, !tbaa !65 + %vtable.i.i.i.i18.i.i.i = load ptr, ptr %175, align 8, !tbaa !65 %vfn.i.i.i.i19.i.i.i = getelementptr inbounds i8, ptr %vtable.i.i.i.i18.i.i.i, i64 16 - %181 = load ptr, ptr %vfn.i.i.i.i19.i.i.i, align 8 - call void %181(ptr noundef nonnull align 8 dereferenceable(16) %178) #21 - %vtable3.i.i.i.i20.i.i.i = load ptr, ptr %178, align 8, !tbaa !65 + %178 = load ptr, ptr %vfn.i.i.i.i19.i.i.i, align 8 + call void %178(ptr noundef nonnull align 8 dereferenceable(16) %175) #21 + %vtable3.i.i.i.i20.i.i.i = load ptr, ptr %175, align 8, !tbaa !65 %vfn4.i.i.i.i21.i.i.i = getelementptr inbounds i8, ptr %vtable3.i.i.i.i20.i.i.i, i64 24 - %182 = load ptr, ptr %vfn4.i.i.i.i21.i.i.i, align 8 - call void %182(ptr noundef nonnull align 8 dereferenceable(16) %178) #21 + %179 = load ptr, ptr %vfn4.i.i.i.i21.i.i.i, align 8 + call void %179(ptr noundef nonnull align 8 dereferenceable(16) %175) #21 br label %_ZN6duckdb19UnifiedVectorFormatD2Ev.exit.i.i if.end.i.i.i.i7.i.i.i: ; preds = %if.then.i.i.i4.i.i.i - %183 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41 - %tobool.i.i.not.i.i.i.i8.i.i.i = icmp eq i8 %183, 0 + %180 = load i8, ptr @__libc_single_threaded, align 1, !tbaa !41 + %tobool.i.i.not.i.i.i.i8.i.i.i = icmp eq i8 %180, 0 br i1 %tobool.i.i.not.i.i.i.i8.i.i.i, label %if.else.i.i.i.i.i15.i.i.i, label %if.then.i.i.i.i.i9.i.i.i if.then.i.i.i.i.i9.i.i.i: ; preds = %if.end.i.i.i.i7.i.i.i - %add.i.i.i.i.i10.i.i.i = add nsw i32 %180, -1 + %add.i.i.i.i.i10.i.i.i = add nsw i32 %177, -1 store i32 %add.i.i.i.i.i10.i.i.i, ptr %_M_use_count.i.i.i.i5.i.i.i, align 4, !tbaa !199 br label %invoke.cont.i.i.i.i11.i.i.i if.else.i.i.i.i.i15.i.i.i: ; preds = %if.end.i.i.i.i7.i.i.i - %184 = atomicrmw volatile add ptr %_M_use_count.i.i.i.i5.i.i.i, i32 -1 acq_rel, align 4 + %181 = atomicrmw volatile add ptr %_M_use_count.i.i.i.i5.i.i.i, i32 -1 acq_rel, align 4 br label %invoke.cont.i.i.i.i11.i.i.i invoke.cont.i.i.i.i11.i.i.i: ; preds = %if.else.i.i.i.i.i15.i.i.i, %if.then.i.i.i.i.i9.i.i.i - %retval.0.i.i.i.i.i12.i.i.i = phi i32 [ %180, %if.then.i.i.i.i.i9.i.i.i ], [ %184, %if.else.i.i.i.i.i15.i.i.i ] + %retval.0.i.i.i.i.i12.i.i.i = phi i32 [ %177, %if.then.i.i.i.i.i9.i.i.i ], [ %181, %if.else.i.i.i.i.i15.i.i.i ] %cmp6.i.i.i.i13.i.i.i = icmp eq i32 %retval.0.i.i.i.i.i12.i.i.i, 1 br i1 %cmp6.i.i.i.i13.i.i.i, label %if.then7.i.i.i.i14.i.i.i, label %_ZN6duckdb19UnifiedVectorFormatD2Ev.exit.i.i, !prof !85 if.then7.i.i.i.i14.i.i.i: ; preds = %invoke.cont.i.i.i.i11.i.i.i - call void @_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv(ptr noundef nonnull align 8 dereferenceable(16) %178) #21 + call void @_ZNSt16_Sp_counted_baseILN9__gnu_cxx12_Lock_policyE2EE24_M_release_last_use_coldEv(ptr noundef nonnull align 8 dereferenceable(16) %175) #21 br label %_ZN6duckdb19UnifiedVectorFormatD2Ev.exit.i.i _ZN6duckdb19UnifiedVectorFormatD2Ev.exit.i.i: ; preds = %if.then7.i.i.i.i14.i.i.i, %invoke.cont.i.i.i.i11.i.i.i, %if.then.i.i.i.i16.i.i.i, %_ZN6duckdb15SelectionVectorD2Ev.exit.i.i.i @@ -61661,7 +61658,7 @@ _ZN6duckdb19UnifiedVectorFormatD2Ev.exit.i.i: ; preds = %if.then7.i.i.i.i14. br label %_ZN6duckdb13UnaryExecutor7ExecuteImNS_8string_tEZNS_L24StringDecompressFunctionImEEvRNS_9DataChunkERNS_15ExpressionStateERNS_6VectorEEUlRKmE_EEvS9_S9_mT1_.exit lpad.i.i: ; preds = %invoke.cont.i.i, %sw.default.i.i - %185 = landingpad { ptr, i32 } + %182 = landingpad { ptr, i32 } cleanup br label %ehcleanup.i.i @@ -61676,7 +61673,7 @@ lpad21.loopexit.split-lp.i.i: ; preds = %if.then.i.i.i.i br label %ehcleanup.i.i ehcleanup.i.i: ; preds = %lpad21.loopexit.split-lp.i.i, %lpad21.loopexit.i.i, %lpad.i.i - %.pn.i.i = phi { ptr, i32 } [ %185, %lpad.i.i ], [ %lpad.loopexit.i.i, %lpad21.loopexit.i.i ], [ %lpad.loopexit.split-lp.i.i, %lpad21.loopexit.split-lp.i.i ] + %.pn.i.i = phi { ptr, i32 } [ %182, %lpad.i.i ], [ %lpad.loopexit.i.i, %lpad21.loopexit.i.i ], [ %lpad.loopexit.split-lp.i.i, %lpad21.loopexit.split-lp.i.i ] call void @_ZN6duckdb19UnifiedVectorFormatD2Ev(ptr noundef nonnull align 8 dereferenceable(72) %vdata.i.i) #21 call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %vdata.i.i) #21 resume { ptr, i32 } %.pn.i.i