Frank Winter
2013-Nov-10 04:50 UTC
[LLVMdev] loop vectorizer erroneously finds 256 bit vectors
The loop vectorizer is doing an amazing job so far. Most of the time. I just came across one function which led to unexpected behavior: On this function the loop vectorizer finds a 256 bit vector as the wides vector type for the x86-64 architecture. (!) This is strange, as it was always finding the correct size of 128 bit as the widest type. I isolated the IR of the function to check if this is reproducible outside of my application. And to my surprise it is! If I run opt -O1 -loop-vectorize -debug-only=loop-vectorize -vectorizer-min-trip-count=4 strange.ll -S on the IR found below I get: LV: Checking a loop in "main" LV: Found a loop: L3 LV: Found an induction variable. LV: We need to do 0 pointer comparisons. LV: We don't need a runtime memory check. LV: We can vectorize this loop! LV: Found trip count: 4 LV: The Widest type: 32 bits. LV: The Widest register is: 256 bits. Wow, a Sandybridge processor with 256 bit SIMD? The vectorizer carries on and figures that 8 would be the best to go for. LV: Vector loop of width 8 costs: 38. LV: Selecting VF = : 8. I didn't look into the machine code but I guess there is something going wrong earlier. I am wondering why it's reproducible and depending on the IR?! PS When running with -O3 it still find 256 bit, but later decides that it's not worth vectorizing. Frank target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" target triple = "x86_64-unknown-linux-elf" define void @main(i64 %arg0, i64 %arg1, i64 %arg2, i1 %arg3, i64 %arg4, float* noalias %arg5, float* noalias %arg6, float* noalias %arg7, double* noalias %arg8) { entrypoint: br i1 %arg3, label %L0, label %L1 L0: ; preds = %entrypoint %0 = add nsw i64 %arg0, %arg4 %1 = add nsw i64 %arg1, %arg4 br label %L2 L1: ; preds = %entrypoint br label %L2 L2: ; preds = %L0, %L1 %2 = phi i64 [ %arg0, %L1 ], [ %0, %L0 ] %3 = phi i64 [ %arg1, %L1 ], [ %1, %L0 ] %4 = sdiv i64 %2, 4 %5 = sdiv i64 %3, 4 br label %L5 L3: ; preds = %L7, %L5 %6 = phi i64 [ %528, %L7 ], [ 0, %L5 ] %7 = mul i64 %527, 4 %8 = add nsw i64 %7, %6 %9 = mul i64 %527, 1 %10 = add nsw i64 %9, 0 %11 = mul i64 %10, 9 %12 = add nsw i64 %11, 0 %13 = mul i64 %12, 2 %14 = add nsw i64 %13, 0 %15 = mul i64 %14, 4 %16 = add nsw i64 %15, %6 %17 = mul i64 %527, 4 %18 = add nsw i64 %17, %6 %19 = mul i64 %527, 1 %20 = add nsw i64 %19, 0 %21 = mul i64 %20, 9 %22 = add nsw i64 %21, 0 %23 = mul i64 %22, 2 %24 = add nsw i64 %23, 1 %25 = mul i64 %24, 4 %26 = add nsw i64 %25, %6 %27 = mul i64 %527, 4 %28 = add nsw i64 %27, %6 %29 = mul i64 %527, 1 %30 = add nsw i64 %29, 0 %31 = mul i64 %30, 9 %32 = add nsw i64 %31, 1 %33 = mul i64 %32, 2 %34 = add nsw i64 %33, 0 %35 = mul i64 %34, 4 %36 = add nsw i64 %35, %6 %37 = mul i64 %527, 4 %38 = add nsw i64 %37, %6 %39 = mul i64 %527, 1 %40 = add nsw i64 %39, 0 %41 = mul i64 %40, 9 %42 = add nsw i64 %41, 1 %43 = mul i64 %42, 2 %44 = add nsw i64 %43, 1 %45 = mul i64 %44, 4 %46 = add nsw i64 %45, %6 %47 = mul i64 %527, 4 %48 = add nsw i64 %47, %6 %49 = mul i64 %527, 1 %50 = add nsw i64 %49, 0 %51 = mul i64 %50, 9 %52 = add nsw i64 %51, 2 %53 = mul i64 %52, 2 %54 = add nsw i64 %53, 0 %55 = mul i64 %54, 4 %56 = add nsw i64 %55, %6 %57 = mul i64 %527, 4 %58 = add nsw i64 %57, %6 %59 = mul i64 %527, 1 %60 = add nsw i64 %59, 0 %61 = mul i64 %60, 9 %62 = add nsw i64 %61, 2 %63 = mul i64 %62, 2 %64 = add nsw i64 %63, 1 %65 = mul i64 %64, 4 %66 = add nsw i64 %65, %6 %67 = mul i64 %527, 4 %68 = add nsw i64 %67, %6 %69 = mul i64 %527, 1 %70 = add nsw i64 %69, 0 %71 = mul i64 %70, 9 %72 = add nsw i64 %71, 3 %73 = mul i64 %72, 2 %74 = add nsw i64 %73, 0 %75 = mul i64 %74, 4 %76 = add nsw i64 %75, %6 %77 = mul i64 %527, 4 %78 = add nsw i64 %77, %6 %79 = mul i64 %527, 1 %80 = add nsw i64 %79, 0 %81 = mul i64 %80, 9 %82 = add nsw i64 %81, 3 %83 = mul i64 %82, 2 %84 = add nsw i64 %83, 1 %85 = mul i64 %84, 4 %86 = add nsw i64 %85, %6 %87 = mul i64 %527, 4 %88 = add nsw i64 %87, %6 %89 = mul i64 %527, 1 %90 = add nsw i64 %89, 0 %91 = mul i64 %90, 9 %92 = add nsw i64 %91, 4 %93 = mul i64 %92, 2 %94 = add nsw i64 %93, 0 %95 = mul i64 %94, 4 %96 = add nsw i64 %95, %6 %97 = mul i64 %527, 4 %98 = add nsw i64 %97, %6 %99 = mul i64 %527, 1 %100 = add nsw i64 %99, 0 %101 = mul i64 %100, 9 %102 = add nsw i64 %101, 4 %103 = mul i64 %102, 2 %104 = add nsw i64 %103, 1 %105 = mul i64 %104, 4 %106 = add nsw i64 %105, %6 %107 = mul i64 %527, 4 %108 = add nsw i64 %107, %6 %109 = mul i64 %527, 1 %110 = add nsw i64 %109, 0 %111 = mul i64 %110, 9 %112 = add nsw i64 %111, 5 %113 = mul i64 %112, 2 %114 = add nsw i64 %113, 0 %115 = mul i64 %114, 4 %116 = add nsw i64 %115, %6 %117 = mul i64 %527, 4 %118 = add nsw i64 %117, %6 %119 = mul i64 %527, 1 %120 = add nsw i64 %119, 0 %121 = mul i64 %120, 9 %122 = add nsw i64 %121, 5 %123 = mul i64 %122, 2 %124 = add nsw i64 %123, 1 %125 = mul i64 %124, 4 %126 = add nsw i64 %125, %6 %127 = mul i64 %527, 4 %128 = add nsw i64 %127, %6 %129 = mul i64 %527, 1 %130 = add nsw i64 %129, 0 %131 = mul i64 %130, 9 %132 = add nsw i64 %131, 6 %133 = mul i64 %132, 2 %134 = add nsw i64 %133, 0 %135 = mul i64 %134, 4 %136 = add nsw i64 %135, %6 %137 = mul i64 %527, 4 %138 = add nsw i64 %137, %6 %139 = mul i64 %527, 1 %140 = add nsw i64 %139, 0 %141 = mul i64 %140, 9 %142 = add nsw i64 %141, 6 %143 = mul i64 %142, 2 %144 = add nsw i64 %143, 1 %145 = mul i64 %144, 4 %146 = add nsw i64 %145, %6 %147 = mul i64 %527, 4 %148 = add nsw i64 %147, %6 %149 = mul i64 %527, 1 %150 = add nsw i64 %149, 0 %151 = mul i64 %150, 9 %152 = add nsw i64 %151, 7 %153 = mul i64 %152, 2 %154 = add nsw i64 %153, 0 %155 = mul i64 %154, 4 %156 = add nsw i64 %155, %6 %157 = mul i64 %527, 4 %158 = add nsw i64 %157, %6 %159 = mul i64 %527, 1 %160 = add nsw i64 %159, 0 %161 = mul i64 %160, 9 %162 = add nsw i64 %161, 7 %163 = mul i64 %162, 2 %164 = add nsw i64 %163, 1 %165 = mul i64 %164, 4 %166 = add nsw i64 %165, %6 %167 = mul i64 %527, 4 %168 = add nsw i64 %167, %6 %169 = mul i64 %527, 1 %170 = add nsw i64 %169, 0 %171 = mul i64 %170, 9 %172 = add nsw i64 %171, 8 %173 = mul i64 %172, 2 %174 = add nsw i64 %173, 0 %175 = mul i64 %174, 4 %176 = add nsw i64 %175, %6 %177 = mul i64 %527, 4 %178 = add nsw i64 %177, %6 %179 = mul i64 %527, 1 %180 = add nsw i64 %179, 0 %181 = mul i64 %180, 9 %182 = add nsw i64 %181, 8 %183 = mul i64 %182, 2 %184 = add nsw i64 %183, 1 %185 = mul i64 %184, 4 %186 = add nsw i64 %185, %6 %187 = getelementptr float* %arg6, i64 %16 %188 = load float* %187 %189 = getelementptr float* %arg6, i64 %26 %190 = load float* %189 %191 = getelementptr float* %arg6, i64 %36 %192 = load float* %191 %193 = getelementptr float* %arg6, i64 %46 %194 = load float* %193 %195 = getelementptr float* %arg6, i64 %56 %196 = load float* %195 %197 = getelementptr float* %arg6, i64 %66 %198 = load float* %197 %199 = getelementptr float* %arg6, i64 %76 %200 = load float* %199 %201 = getelementptr float* %arg6, i64 %86 %202 = load float* %201 %203 = getelementptr float* %arg6, i64 %96 %204 = load float* %203 %205 = getelementptr float* %arg6, i64 %106 %206 = load float* %205 %207 = getelementptr float* %arg6, i64 %116 %208 = load float* %207 %209 = getelementptr float* %arg6, i64 %126 %210 = load float* %209 %211 = getelementptr float* %arg6, i64 %136 %212 = load float* %211 %213 = getelementptr float* %arg6, i64 %146 %214 = load float* %213 %215 = getelementptr float* %arg6, i64 %156 %216 = load float* %215 %217 = getelementptr float* %arg6, i64 %166 %218 = load float* %217 %219 = getelementptr float* %arg6, i64 %176 %220 = load float* %219 %221 = getelementptr float* %arg6, i64 %186 %222 = load float* %221 %223 = mul i64 %527, 4 %224 = add nsw i64 %223, %6 %225 = mul i64 %527, 1 %226 = add nsw i64 %225, 0 %227 = mul i64 %226, 9 %228 = add nsw i64 %227, 0 %229 = mul i64 %228, 2 %230 = add nsw i64 %229, 0 %231 = mul i64 %230, 4 %232 = add nsw i64 %231, %6 %233 = mul i64 %527, 4 %234 = add nsw i64 %233, %6 %235 = mul i64 %527, 1 %236 = add nsw i64 %235, 0 %237 = mul i64 %236, 9 %238 = add nsw i64 %237, 0 %239 = mul i64 %238, 2 %240 = add nsw i64 %239, 1 %241 = mul i64 %240, 4 %242 = add nsw i64 %241, %6 %243 = mul i64 %527, 4 %244 = add nsw i64 %243, %6 %245 = mul i64 %527, 1 %246 = add nsw i64 %245, 0 %247 = mul i64 %246, 9 %248 = add nsw i64 %247, 1 %249 = mul i64 %248, 2 %250 = add nsw i64 %249, 0 %251 = mul i64 %250, 4 %252 = add nsw i64 %251, %6 %253 = mul i64 %527, 4 %254 = add nsw i64 %253, %6 %255 = mul i64 %527, 1 %256 = add nsw i64 %255, 0 %257 = mul i64 %256, 9 %258 = add nsw i64 %257, 1 %259 = mul i64 %258, 2 %260 = add nsw i64 %259, 1 %261 = mul i64 %260, 4 %262 = add nsw i64 %261, %6 %263 = mul i64 %527, 4 %264 = add nsw i64 %263, %6 %265 = mul i64 %527, 1 %266 = add nsw i64 %265, 0 %267 = mul i64 %266, 9 %268 = add nsw i64 %267, 2 %269 = mul i64 %268, 2 %270 = add nsw i64 %269, 0 %271 = mul i64 %270, 4 %272 = add nsw i64 %271, %6 %273 = mul i64 %527, 4 %274 = add nsw i64 %273, %6 %275 = mul i64 %527, 1 %276 = add nsw i64 %275, 0 %277 = mul i64 %276, 9 %278 = add nsw i64 %277, 2 %279 = mul i64 %278, 2 %280 = add nsw i64 %279, 1 %281 = mul i64 %280, 4 %282 = add nsw i64 %281, %6 %283 = mul i64 %527, 4 %284 = add nsw i64 %283, %6 %285 = mul i64 %527, 1 %286 = add nsw i64 %285, 0 %287 = mul i64 %286, 9 %288 = add nsw i64 %287, 3 %289 = mul i64 %288, 2 %290 = add nsw i64 %289, 0 %291 = mul i64 %290, 4 %292 = add nsw i64 %291, %6 %293 = mul i64 %527, 4 %294 = add nsw i64 %293, %6 %295 = mul i64 %527, 1 %296 = add nsw i64 %295, 0 %297 = mul i64 %296, 9 %298 = add nsw i64 %297, 3 %299 = mul i64 %298, 2 %300 = add nsw i64 %299, 1 %301 = mul i64 %300, 4 %302 = add nsw i64 %301, %6 %303 = mul i64 %527, 4 %304 = add nsw i64 %303, %6 %305 = mul i64 %527, 1 %306 = add nsw i64 %305, 0 %307 = mul i64 %306, 9 %308 = add nsw i64 %307, 4 %309 = mul i64 %308, 2 %310 = add nsw i64 %309, 0 %311 = mul i64 %310, 4 %312 = add nsw i64 %311, %6 %313 = mul i64 %527, 4 %314 = add nsw i64 %313, %6 %315 = mul i64 %527, 1 %316 = add nsw i64 %315, 0 %317 = mul i64 %316, 9 %318 = add nsw i64 %317, 4 %319 = mul i64 %318, 2 %320 = add nsw i64 %319, 1 %321 = mul i64 %320, 4 %322 = add nsw i64 %321, %6 %323 = mul i64 %527, 4 %324 = add nsw i64 %323, %6 %325 = mul i64 %527, 1 %326 = add nsw i64 %325, 0 %327 = mul i64 %326, 9 %328 = add nsw i64 %327, 5 %329 = mul i64 %328, 2 %330 = add nsw i64 %329, 0 %331 = mul i64 %330, 4 %332 = add nsw i64 %331, %6 %333 = mul i64 %527, 4 %334 = add nsw i64 %333, %6 %335 = mul i64 %527, 1 %336 = add nsw i64 %335, 0 %337 = mul i64 %336, 9 %338 = add nsw i64 %337, 5 %339 = mul i64 %338, 2 %340 = add nsw i64 %339, 1 %341 = mul i64 %340, 4 %342 = add nsw i64 %341, %6 %343 = mul i64 %527, 4 %344 = add nsw i64 %343, %6 %345 = mul i64 %527, 1 %346 = add nsw i64 %345, 0 %347 = mul i64 %346, 9 %348 = add nsw i64 %347, 6 %349 = mul i64 %348, 2 %350 = add nsw i64 %349, 0 %351 = mul i64 %350, 4 %352 = add nsw i64 %351, %6 %353 = mul i64 %527, 4 %354 = add nsw i64 %353, %6 %355 = mul i64 %527, 1 %356 = add nsw i64 %355, 0 %357 = mul i64 %356, 9 %358 = add nsw i64 %357, 6 %359 = mul i64 %358, 2 %360 = add nsw i64 %359, 1 %361 = mul i64 %360, 4 %362 = add nsw i64 %361, %6 %363 = mul i64 %527, 4 %364 = add nsw i64 %363, %6 %365 = mul i64 %527, 1 %366 = add nsw i64 %365, 0 %367 = mul i64 %366, 9 %368 = add nsw i64 %367, 7 %369 = mul i64 %368, 2 %370 = add nsw i64 %369, 0 %371 = mul i64 %370, 4 %372 = add nsw i64 %371, %6 %373 = mul i64 %527, 4 %374 = add nsw i64 %373, %6 %375 = mul i64 %527, 1 %376 = add nsw i64 %375, 0 %377 = mul i64 %376, 9 %378 = add nsw i64 %377, 7 %379 = mul i64 %378, 2 %380 = add nsw i64 %379, 1 %381 = mul i64 %380, 4 %382 = add nsw i64 %381, %6 %383 = mul i64 %527, 4 %384 = add nsw i64 %383, %6 %385 = mul i64 %527, 1 %386 = add nsw i64 %385, 0 %387 = mul i64 %386, 9 %388 = add nsw i64 %387, 8 %389 = mul i64 %388, 2 %390 = add nsw i64 %389, 0 %391 = mul i64 %390, 4 %392 = add nsw i64 %391, %6 %393 = mul i64 %527, 4 %394 = add nsw i64 %393, %6 %395 = mul i64 %527, 1 %396 = add nsw i64 %395, 0 %397 = mul i64 %396, 9 %398 = add nsw i64 %397, 8 %399 = mul i64 %398, 2 %400 = add nsw i64 %399, 1 %401 = mul i64 %400, 4 %402 = add nsw i64 %401, %6 %403 = getelementptr float* %arg7, i64 %232 %404 = load float* %403 %405 = getelementptr float* %arg7, i64 %242 %406 = load float* %405 %407 = getelementptr float* %arg7, i64 %252 %408 = load float* %407 %409 = getelementptr float* %arg7, i64 %262 %410 = load float* %409 %411 = getelementptr float* %arg7, i64 %272 %412 = load float* %411 %413 = getelementptr float* %arg7, i64 %282 %414 = load float* %413 %415 = getelementptr float* %arg7, i64 %292 %416 = load float* %415 %417 = getelementptr float* %arg7, i64 %302 %418 = load float* %417 %419 = getelementptr float* %arg7, i64 %312 %420 = load float* %419 %421 = getelementptr float* %arg7, i64 %322 %422 = load float* %421 %423 = getelementptr float* %arg7, i64 %332 %424 = load float* %423 %425 = getelementptr float* %arg7, i64 %342 %426 = load float* %425 %427 = getelementptr float* %arg7, i64 %352 %428 = load float* %427 %429 = getelementptr float* %arg7, i64 %362 %430 = load float* %429 %431 = getelementptr float* %arg7, i64 %372 %432 = load float* %431 %433 = getelementptr float* %arg7, i64 %382 %434 = load float* %433 %435 = getelementptr float* %arg7, i64 %392 %436 = load float* %435 %437 = getelementptr float* %arg7, i64 %402 %438 = load float* %437 %439 = fmul float %406, %188 %440 = fmul float %404, %190 %441 = fadd float %440, %439 %442 = fmul float %406, %190 %443 = fmul float %404, %188 %444 = fsub float %443, %442 %445 = fmul float %410, %200 %446 = fmul float %408, %202 %447 = fadd float %446, %445 %448 = fmul float %410, %202 %449 = fmul float %408, %200 %450 = fsub float %449, %448 %451 = fadd float %444, %450 %452 = fadd float %441, %447 %453 = fmul float %414, %212 %454 = fmul float %412, %214 %455 = fadd float %454, %453 %456 = fmul float %414, %214 %457 = fmul float %412, %212 %458 = fsub float %457, %456 %459 = fadd float %451, %458 %460 = fadd float %452, %455 %461 = fmul float %418, %192 %462 = fmul float %416, %194 %463 = fadd float %462, %461 %464 = fmul float %418, %194 %465 = fmul float %416, %192 %466 = fsub float %465, %464 %467 = fadd float %459, %466 %468 = fadd float %460, %463 %469 = fmul float %422, %204 %470 = fmul float %420, %206 %471 = fadd float %470, %469 %472 = fmul float %422, %206 %473 = fmul float %420, %204 %474 = fsub float %473, %472 %475 = fadd float %467, %474 %476 = fadd float %468, %471 %477 = fmul float %426, %216 %478 = fmul float %424, %218 %479 = fadd float %478, %477 %480 = fmul float %426, %218 %481 = fmul float %424, %216 %482 = fsub float %481, %480 %483 = fadd float %475, %482 %484 = fadd float %476, %479 %485 = fmul float %430, %196 %486 = fmul float %428, %198 %487 = fadd float %486, %485 %488 = fmul float %430, %198 %489 = fmul float %428, %196 %490 = fsub float %489, %488 %491 = fadd float %483, %490 %492 = fadd float %484, %487 %493 = fmul float %434, %208 %494 = fmul float %432, %210 %495 = fadd float %494, %493 %496 = fmul float %434, %210 %497 = fmul float %432, %208 %498 = fsub float %497, %496 %499 = fadd float %491, %498 %500 = fadd float %492, %495 %501 = fmul float %438, %220 %502 = fmul float %436, %222 %503 = fadd float %502, %501 %504 = fmul float %438, %222 %505 = fmul float %436, %220 %506 = fsub float %505, %504 %507 = fadd float %499, %506 %508 = fadd float %500, %503 %509 = getelementptr double* %arg8, i32 0 %510 = load double* %509 %511 = fpext float %507 to double %512 = fmul double %510, %511 %513 = mul i64 %527, 4 %514 = add nsw i64 %513, %6 %515 = mul i64 %527, 1 %516 = add nsw i64 %515, 0 %517 = mul i64 %516, 1 %518 = add nsw i64 %517, 0 %519 = mul i64 %518, 1 %520 = add nsw i64 %519, 0 %521 = mul i64 %520, 4 %522 = add nsw i64 %521, %6 %523 = getelementptr float* %arg5, i64 %522 %524 = fptrunc double %512 to float store float %524, float* %523 br label %L7 L4: ; preds = %L7 %525 = add nsw i64 %527, 1 %526 = icmp sge i64 %525, %5 br i1 %526, label %L6, label %L5 L5: ; preds = %L4, %L2 %527 = phi i64 [ %525, %L4 ], [ %4, %L2 ] br label %L3 L6: ; preds = %L4 ret void L7: ; preds = %L3 %528 = add nsw i64 %6, 1 %529 = icmp sge i64 %528, 4 br i1 %529, label %L4, label %L3 }
Frank Winter
2013-Nov-10 14:05 UTC
[LLVMdev] loop vectorizer erroneously finds 256 bit vectors
I looked more into this. For the previously sent IR the vector width of 256 bit is found mistakenly (and reproducibly) on this hardware: model name : Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz For the same IR the loop vectorizer finds the correct vector width (128 bit) on: model name : Intel(R) Xeon(R) CPU E5630 @ 2.53GHz model name : Intel(R) Core(TM) i7 CPU M 640 @ 2.80GHz Thus, the behavior depends on which hardware I run on. I am using the JIT execution engine (original interface). Frank On 09/11/13 23:50, Frank Winter wrote:> The loop vectorizer is doing an amazing job so far. Most of the time. > I just came across one function which led to unexpected behavior: > > On this function the loop vectorizer finds a 256 bit vector as the > wides vector type for the x86-64 architecture. (!) > > This is strange, as it was always finding the correct size of 128 bit > as the widest type. I isolated the IR of the function to check if this > is reproducible outside of my application. And to my surprise it is! > > If I run > > opt -O1 -loop-vectorize -debug-only=loop-vectorize > -vectorizer-min-trip-count=4 strange.ll -S > > on the IR found below I get: > > LV: Checking a loop in "main" > LV: Found a loop: L3 > LV: Found an induction variable. > LV: We need to do 0 pointer comparisons. > LV: We don't need a runtime memory check. > LV: We can vectorize this loop! > LV: Found trip count: 4 > LV: The Widest type: 32 bits. > LV: The Widest register is: 256 bits. > > Wow, a Sandybridge processor with 256 bit SIMD? > > The vectorizer carries on and figures that 8 would be the best to go for. > > LV: Vector loop of width 8 costs: 38. > LV: Selecting VF = : 8. > > I didn't look into the machine code but I guess there is something > going wrong earlier. > > I am wondering why it's reproducible and depending on the IR?! > > PS When running with -O3 it still find 256 bit, but later decides that > it's not worth > vectorizing. > > Frank > > > > > > > target datalayout = > "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" > > target triple = "x86_64-unknown-linux-elf" > > define void @main(i64 %arg0, i64 %arg1, i64 %arg2, i1 %arg3, i64 > %arg4, float* noalias %arg5, float* noalias %arg6, float* noalias > %arg7, double* noalias %arg8) { > entrypoint: > br i1 %arg3, label %L0, label %L1 > > L0: ; preds = %entrypoint > %0 = add nsw i64 %arg0, %arg4 > %1 = add nsw i64 %arg1, %arg4 > br label %L2 > > L1: ; preds = %entrypoint > br label %L2 > > L2: ; preds = %L0, %L1 > %2 = phi i64 [ %arg0, %L1 ], [ %0, %L0 ] > %3 = phi i64 [ %arg1, %L1 ], [ %1, %L0 ] > %4 = sdiv i64 %2, 4 > %5 = sdiv i64 %3, 4 > br label %L5 > > L3: ; preds = %L7, %L5 > %6 = phi i64 [ %528, %L7 ], [ 0, %L5 ] > %7 = mul i64 %527, 4 > %8 = add nsw i64 %7, %6 > %9 = mul i64 %527, 1 > %10 = add nsw i64 %9, 0 > %11 = mul i64 %10, 9 > %12 = add nsw i64 %11, 0 > %13 = mul i64 %12, 2 > %14 = add nsw i64 %13, 0 > %15 = mul i64 %14, 4 > %16 = add nsw i64 %15, %6 > %17 = mul i64 %527, 4 > %18 = add nsw i64 %17, %6 > %19 = mul i64 %527, 1 > %20 = add nsw i64 %19, 0 > %21 = mul i64 %20, 9 > %22 = add nsw i64 %21, 0 > %23 = mul i64 %22, 2 > %24 = add nsw i64 %23, 1 > %25 = mul i64 %24, 4 > %26 = add nsw i64 %25, %6 > %27 = mul i64 %527, 4 > %28 = add nsw i64 %27, %6 > %29 = mul i64 %527, 1 > %30 = add nsw i64 %29, 0 > %31 = mul i64 %30, 9 > %32 = add nsw i64 %31, 1 > %33 = mul i64 %32, 2 > %34 = add nsw i64 %33, 0 > %35 = mul i64 %34, 4 > %36 = add nsw i64 %35, %6 > %37 = mul i64 %527, 4 > %38 = add nsw i64 %37, %6 > %39 = mul i64 %527, 1 > %40 = add nsw i64 %39, 0 > %41 = mul i64 %40, 9 > %42 = add nsw i64 %41, 1 > %43 = mul i64 %42, 2 > %44 = add nsw i64 %43, 1 > %45 = mul i64 %44, 4 > %46 = add nsw i64 %45, %6 > %47 = mul i64 %527, 4 > %48 = add nsw i64 %47, %6 > %49 = mul i64 %527, 1 > %50 = add nsw i64 %49, 0 > %51 = mul i64 %50, 9 > %52 = add nsw i64 %51, 2 > %53 = mul i64 %52, 2 > %54 = add nsw i64 %53, 0 > %55 = mul i64 %54, 4 > %56 = add nsw i64 %55, %6 > %57 = mul i64 %527, 4 > %58 = add nsw i64 %57, %6 > %59 = mul i64 %527, 1 > %60 = add nsw i64 %59, 0 > %61 = mul i64 %60, 9 > %62 = add nsw i64 %61, 2 > %63 = mul i64 %62, 2 > %64 = add nsw i64 %63, 1 > %65 = mul i64 %64, 4 > %66 = add nsw i64 %65, %6 > %67 = mul i64 %527, 4 > %68 = add nsw i64 %67, %6 > %69 = mul i64 %527, 1 > %70 = add nsw i64 %69, 0 > %71 = mul i64 %70, 9 > %72 = add nsw i64 %71, 3 > %73 = mul i64 %72, 2 > %74 = add nsw i64 %73, 0 > %75 = mul i64 %74, 4 > %76 = add nsw i64 %75, %6 > %77 = mul i64 %527, 4 > %78 = add nsw i64 %77, %6 > %79 = mul i64 %527, 1 > %80 = add nsw i64 %79, 0 > %81 = mul i64 %80, 9 > %82 = add nsw i64 %81, 3 > %83 = mul i64 %82, 2 > %84 = add nsw i64 %83, 1 > %85 = mul i64 %84, 4 > %86 = add nsw i64 %85, %6 > %87 = mul i64 %527, 4 > %88 = add nsw i64 %87, %6 > %89 = mul i64 %527, 1 > %90 = add nsw i64 %89, 0 > %91 = mul i64 %90, 9 > %92 = add nsw i64 %91, 4 > %93 = mul i64 %92, 2 > %94 = add nsw i64 %93, 0 > %95 = mul i64 %94, 4 > %96 = add nsw i64 %95, %6 > %97 = mul i64 %527, 4 > %98 = add nsw i64 %97, %6 > %99 = mul i64 %527, 1 > %100 = add nsw i64 %99, 0 > %101 = mul i64 %100, 9 > %102 = add nsw i64 %101, 4 > %103 = mul i64 %102, 2 > %104 = add nsw i64 %103, 1 > %105 = mul i64 %104, 4 > %106 = add nsw i64 %105, %6 > %107 = mul i64 %527, 4 > %108 = add nsw i64 %107, %6 > %109 = mul i64 %527, 1 > %110 = add nsw i64 %109, 0 > %111 = mul i64 %110, 9 > %112 = add nsw i64 %111, 5 > %113 = mul i64 %112, 2 > %114 = add nsw i64 %113, 0 > %115 = mul i64 %114, 4 > %116 = add nsw i64 %115, %6 > %117 = mul i64 %527, 4 > %118 = add nsw i64 %117, %6 > %119 = mul i64 %527, 1 > %120 = add nsw i64 %119, 0 > %121 = mul i64 %120, 9 > %122 = add nsw i64 %121, 5 > %123 = mul i64 %122, 2 > %124 = add nsw i64 %123, 1 > %125 = mul i64 %124, 4 > %126 = add nsw i64 %125, %6 > %127 = mul i64 %527, 4 > %128 = add nsw i64 %127, %6 > %129 = mul i64 %527, 1 > %130 = add nsw i64 %129, 0 > %131 = mul i64 %130, 9 > %132 = add nsw i64 %131, 6 > %133 = mul i64 %132, 2 > %134 = add nsw i64 %133, 0 > %135 = mul i64 %134, 4 > %136 = add nsw i64 %135, %6 > %137 = mul i64 %527, 4 > %138 = add nsw i64 %137, %6 > %139 = mul i64 %527, 1 > %140 = add nsw i64 %139, 0 > %141 = mul i64 %140, 9 > %142 = add nsw i64 %141, 6 > %143 = mul i64 %142, 2 > %144 = add nsw i64 %143, 1 > %145 = mul i64 %144, 4 > %146 = add nsw i64 %145, %6 > %147 = mul i64 %527, 4 > %148 = add nsw i64 %147, %6 > %149 = mul i64 %527, 1 > %150 = add nsw i64 %149, 0 > %151 = mul i64 %150, 9 > %152 = add nsw i64 %151, 7 > %153 = mul i64 %152, 2 > %154 = add nsw i64 %153, 0 > %155 = mul i64 %154, 4 > %156 = add nsw i64 %155, %6 > %157 = mul i64 %527, 4 > %158 = add nsw i64 %157, %6 > %159 = mul i64 %527, 1 > %160 = add nsw i64 %159, 0 > %161 = mul i64 %160, 9 > %162 = add nsw i64 %161, 7 > %163 = mul i64 %162, 2 > %164 = add nsw i64 %163, 1 > %165 = mul i64 %164, 4 > %166 = add nsw i64 %165, %6 > %167 = mul i64 %527, 4 > %168 = add nsw i64 %167, %6 > %169 = mul i64 %527, 1 > %170 = add nsw i64 %169, 0 > %171 = mul i64 %170, 9 > %172 = add nsw i64 %171, 8 > %173 = mul i64 %172, 2 > %174 = add nsw i64 %173, 0 > %175 = mul i64 %174, 4 > %176 = add nsw i64 %175, %6 > %177 = mul i64 %527, 4 > %178 = add nsw i64 %177, %6 > %179 = mul i64 %527, 1 > %180 = add nsw i64 %179, 0 > %181 = mul i64 %180, 9 > %182 = add nsw i64 %181, 8 > %183 = mul i64 %182, 2 > %184 = add nsw i64 %183, 1 > %185 = mul i64 %184, 4 > %186 = add nsw i64 %185, %6 > %187 = getelementptr float* %arg6, i64 %16 > %188 = load float* %187 > %189 = getelementptr float* %arg6, i64 %26 > %190 = load float* %189 > %191 = getelementptr float* %arg6, i64 %36 > %192 = load float* %191 > %193 = getelementptr float* %arg6, i64 %46 > %194 = load float* %193 > %195 = getelementptr float* %arg6, i64 %56 > %196 = load float* %195 > %197 = getelementptr float* %arg6, i64 %66 > %198 = load float* %197 > %199 = getelementptr float* %arg6, i64 %76 > %200 = load float* %199 > %201 = getelementptr float* %arg6, i64 %86 > %202 = load float* %201 > %203 = getelementptr float* %arg6, i64 %96 > %204 = load float* %203 > %205 = getelementptr float* %arg6, i64 %106 > %206 = load float* %205 > %207 = getelementptr float* %arg6, i64 %116 > %208 = load float* %207 > %209 = getelementptr float* %arg6, i64 %126 > %210 = load float* %209 > %211 = getelementptr float* %arg6, i64 %136 > %212 = load float* %211 > %213 = getelementptr float* %arg6, i64 %146 > %214 = load float* %213 > %215 = getelementptr float* %arg6, i64 %156 > %216 = load float* %215 > %217 = getelementptr float* %arg6, i64 %166 > %218 = load float* %217 > %219 = getelementptr float* %arg6, i64 %176 > %220 = load float* %219 > %221 = getelementptr float* %arg6, i64 %186 > %222 = load float* %221 > %223 = mul i64 %527, 4 > %224 = add nsw i64 %223, %6 > %225 = mul i64 %527, 1 > %226 = add nsw i64 %225, 0 > %227 = mul i64 %226, 9 > %228 = add nsw i64 %227, 0 > %229 = mul i64 %228, 2 > %230 = add nsw i64 %229, 0 > %231 = mul i64 %230, 4 > %232 = add nsw i64 %231, %6 > %233 = mul i64 %527, 4 > %234 = add nsw i64 %233, %6 > %235 = mul i64 %527, 1 > %236 = add nsw i64 %235, 0 > %237 = mul i64 %236, 9 > %238 = add nsw i64 %237, 0 > %239 = mul i64 %238, 2 > %240 = add nsw i64 %239, 1 > %241 = mul i64 %240, 4 > %242 = add nsw i64 %241, %6 > %243 = mul i64 %527, 4 > %244 = add nsw i64 %243, %6 > %245 = mul i64 %527, 1 > %246 = add nsw i64 %245, 0 > %247 = mul i64 %246, 9 > %248 = add nsw i64 %247, 1 > %249 = mul i64 %248, 2 > %250 = add nsw i64 %249, 0 > %251 = mul i64 %250, 4 > %252 = add nsw i64 %251, %6 > %253 = mul i64 %527, 4 > %254 = add nsw i64 %253, %6 > %255 = mul i64 %527, 1 > %256 = add nsw i64 %255, 0 > %257 = mul i64 %256, 9 > %258 = add nsw i64 %257, 1 > %259 = mul i64 %258, 2 > %260 = add nsw i64 %259, 1 > %261 = mul i64 %260, 4 > %262 = add nsw i64 %261, %6 > %263 = mul i64 %527, 4 > %264 = add nsw i64 %263, %6 > %265 = mul i64 %527, 1 > %266 = add nsw i64 %265, 0 > %267 = mul i64 %266, 9 > %268 = add nsw i64 %267, 2 > %269 = mul i64 %268, 2 > %270 = add nsw i64 %269, 0 > %271 = mul i64 %270, 4 > %272 = add nsw i64 %271, %6 > %273 = mul i64 %527, 4 > %274 = add nsw i64 %273, %6 > %275 = mul i64 %527, 1 > %276 = add nsw i64 %275, 0 > %277 = mul i64 %276, 9 > %278 = add nsw i64 %277, 2 > %279 = mul i64 %278, 2 > %280 = add nsw i64 %279, 1 > %281 = mul i64 %280, 4 > %282 = add nsw i64 %281, %6 > %283 = mul i64 %527, 4 > %284 = add nsw i64 %283, %6 > %285 = mul i64 %527, 1 > %286 = add nsw i64 %285, 0 > %287 = mul i64 %286, 9 > %288 = add nsw i64 %287, 3 > %289 = mul i64 %288, 2 > %290 = add nsw i64 %289, 0 > %291 = mul i64 %290, 4 > %292 = add nsw i64 %291, %6 > %293 = mul i64 %527, 4 > %294 = add nsw i64 %293, %6 > %295 = mul i64 %527, 1 > %296 = add nsw i64 %295, 0 > %297 = mul i64 %296, 9 > %298 = add nsw i64 %297, 3 > %299 = mul i64 %298, 2 > %300 = add nsw i64 %299, 1 > %301 = mul i64 %300, 4 > %302 = add nsw i64 %301, %6 > %303 = mul i64 %527, 4 > %304 = add nsw i64 %303, %6 > %305 = mul i64 %527, 1 > %306 = add nsw i64 %305, 0 > %307 = mul i64 %306, 9 > %308 = add nsw i64 %307, 4 > %309 = mul i64 %308, 2 > %310 = add nsw i64 %309, 0 > %311 = mul i64 %310, 4 > %312 = add nsw i64 %311, %6 > %313 = mul i64 %527, 4 > %314 = add nsw i64 %313, %6 > %315 = mul i64 %527, 1 > %316 = add nsw i64 %315, 0 > %317 = mul i64 %316, 9 > %318 = add nsw i64 %317, 4 > %319 = mul i64 %318, 2 > %320 = add nsw i64 %319, 1 > %321 = mul i64 %320, 4 > %322 = add nsw i64 %321, %6 > %323 = mul i64 %527, 4 > %324 = add nsw i64 %323, %6 > %325 = mul i64 %527, 1 > %326 = add nsw i64 %325, 0 > %327 = mul i64 %326, 9 > %328 = add nsw i64 %327, 5 > %329 = mul i64 %328, 2 > %330 = add nsw i64 %329, 0 > %331 = mul i64 %330, 4 > %332 = add nsw i64 %331, %6 > %333 = mul i64 %527, 4 > %334 = add nsw i64 %333, %6 > %335 = mul i64 %527, 1 > %336 = add nsw i64 %335, 0 > %337 = mul i64 %336, 9 > %338 = add nsw i64 %337, 5 > %339 = mul i64 %338, 2 > %340 = add nsw i64 %339, 1 > %341 = mul i64 %340, 4 > %342 = add nsw i64 %341, %6 > %343 = mul i64 %527, 4 > %344 = add nsw i64 %343, %6 > %345 = mul i64 %527, 1 > %346 = add nsw i64 %345, 0 > %347 = mul i64 %346, 9 > %348 = add nsw i64 %347, 6 > %349 = mul i64 %348, 2 > %350 = add nsw i64 %349, 0 > %351 = mul i64 %350, 4 > %352 = add nsw i64 %351, %6 > %353 = mul i64 %527, 4 > %354 = add nsw i64 %353, %6 > %355 = mul i64 %527, 1 > %356 = add nsw i64 %355, 0 > %357 = mul i64 %356, 9 > %358 = add nsw i64 %357, 6 > %359 = mul i64 %358, 2 > %360 = add nsw i64 %359, 1 > %361 = mul i64 %360, 4 > %362 = add nsw i64 %361, %6 > %363 = mul i64 %527, 4 > %364 = add nsw i64 %363, %6 > %365 = mul i64 %527, 1 > %366 = add nsw i64 %365, 0 > %367 = mul i64 %366, 9 > %368 = add nsw i64 %367, 7 > %369 = mul i64 %368, 2 > %370 = add nsw i64 %369, 0 > %371 = mul i64 %370, 4 > %372 = add nsw i64 %371, %6 > %373 = mul i64 %527, 4 > %374 = add nsw i64 %373, %6 > %375 = mul i64 %527, 1 > %376 = add nsw i64 %375, 0 > %377 = mul i64 %376, 9 > %378 = add nsw i64 %377, 7 > %379 = mul i64 %378, 2 > %380 = add nsw i64 %379, 1 > %381 = mul i64 %380, 4 > %382 = add nsw i64 %381, %6 > %383 = mul i64 %527, 4 > %384 = add nsw i64 %383, %6 > %385 = mul i64 %527, 1 > %386 = add nsw i64 %385, 0 > %387 = mul i64 %386, 9 > %388 = add nsw i64 %387, 8 > %389 = mul i64 %388, 2 > %390 = add nsw i64 %389, 0 > %391 = mul i64 %390, 4 > %392 = add nsw i64 %391, %6 > %393 = mul i64 %527, 4 > %394 = add nsw i64 %393, %6 > %395 = mul i64 %527, 1 > %396 = add nsw i64 %395, 0 > %397 = mul i64 %396, 9 > %398 = add nsw i64 %397, 8 > %399 = mul i64 %398, 2 > %400 = add nsw i64 %399, 1 > %401 = mul i64 %400, 4 > %402 = add nsw i64 %401, %6 > %403 = getelementptr float* %arg7, i64 %232 > %404 = load float* %403 > %405 = getelementptr float* %arg7, i64 %242 > %406 = load float* %405 > %407 = getelementptr float* %arg7, i64 %252 > %408 = load float* %407 > %409 = getelementptr float* %arg7, i64 %262 > %410 = load float* %409 > %411 = getelementptr float* %arg7, i64 %272 > %412 = load float* %411 > %413 = getelementptr float* %arg7, i64 %282 > %414 = load float* %413 > %415 = getelementptr float* %arg7, i64 %292 > %416 = load float* %415 > %417 = getelementptr float* %arg7, i64 %302 > %418 = load float* %417 > %419 = getelementptr float* %arg7, i64 %312 > %420 = load float* %419 > %421 = getelementptr float* %arg7, i64 %322 > %422 = load float* %421 > %423 = getelementptr float* %arg7, i64 %332 > %424 = load float* %423 > %425 = getelementptr float* %arg7, i64 %342 > %426 = load float* %425 > %427 = getelementptr float* %arg7, i64 %352 > %428 = load float* %427 > %429 = getelementptr float* %arg7, i64 %362 > %430 = load float* %429 > %431 = getelementptr float* %arg7, i64 %372 > %432 = load float* %431 > %433 = getelementptr float* %arg7, i64 %382 > %434 = load float* %433 > %435 = getelementptr float* %arg7, i64 %392 > %436 = load float* %435 > %437 = getelementptr float* %arg7, i64 %402 > %438 = load float* %437 > %439 = fmul float %406, %188 > %440 = fmul float %404, %190 > %441 = fadd float %440, %439 > %442 = fmul float %406, %190 > %443 = fmul float %404, %188 > %444 = fsub float %443, %442 > %445 = fmul float %410, %200 > %446 = fmul float %408, %202 > %447 = fadd float %446, %445 > %448 = fmul float %410, %202 > %449 = fmul float %408, %200 > %450 = fsub float %449, %448 > %451 = fadd float %444, %450 > %452 = fadd float %441, %447 > %453 = fmul float %414, %212 > %454 = fmul float %412, %214 > %455 = fadd float %454, %453 > %456 = fmul float %414, %214 > %457 = fmul float %412, %212 > %458 = fsub float %457, %456 > %459 = fadd float %451, %458 > %460 = fadd float %452, %455 > %461 = fmul float %418, %192 > %462 = fmul float %416, %194 > %463 = fadd float %462, %461 > %464 = fmul float %418, %194 > %465 = fmul float %416, %192 > %466 = fsub float %465, %464 > %467 = fadd float %459, %466 > %468 = fadd float %460, %463 > %469 = fmul float %422, %204 > %470 = fmul float %420, %206 > %471 = fadd float %470, %469 > %472 = fmul float %422, %206 > %473 = fmul float %420, %204 > %474 = fsub float %473, %472 > %475 = fadd float %467, %474 > %476 = fadd float %468, %471 > %477 = fmul float %426, %216 > %478 = fmul float %424, %218 > %479 = fadd float %478, %477 > %480 = fmul float %426, %218 > %481 = fmul float %424, %216 > %482 = fsub float %481, %480 > %483 = fadd float %475, %482 > %484 = fadd float %476, %479 > %485 = fmul float %430, %196 > %486 = fmul float %428, %198 > %487 = fadd float %486, %485 > %488 = fmul float %430, %198 > %489 = fmul float %428, %196 > %490 = fsub float %489, %488 > %491 = fadd float %483, %490 > %492 = fadd float %484, %487 > %493 = fmul float %434, %208 > %494 = fmul float %432, %210 > %495 = fadd float %494, %493 > %496 = fmul float %434, %210 > %497 = fmul float %432, %208 > %498 = fsub float %497, %496 > %499 = fadd float %491, %498 > %500 = fadd float %492, %495 > %501 = fmul float %438, %220 > %502 = fmul float %436, %222 > %503 = fadd float %502, %501 > %504 = fmul float %438, %222 > %505 = fmul float %436, %220 > %506 = fsub float %505, %504 > %507 = fadd float %499, %506 > %508 = fadd float %500, %503 > %509 = getelementptr double* %arg8, i32 0 > %510 = load double* %509 > %511 = fpext float %507 to double > %512 = fmul double %510, %511 > %513 = mul i64 %527, 4 > %514 = add nsw i64 %513, %6 > %515 = mul i64 %527, 1 > %516 = add nsw i64 %515, 0 > %517 = mul i64 %516, 1 > %518 = add nsw i64 %517, 0 > %519 = mul i64 %518, 1 > %520 = add nsw i64 %519, 0 > %521 = mul i64 %520, 4 > %522 = add nsw i64 %521, %6 > %523 = getelementptr float* %arg5, i64 %522 > %524 = fptrunc double %512 to float > store float %524, float* %523 > br label %L7 > > L4: ; preds = %L7 > %525 = add nsw i64 %527, 1 > %526 = icmp sge i64 %525, %5 > br i1 %526, label %L6, label %L5 > > L5: ; preds = %L4, %L2 > %527 = phi i64 [ %525, %L4 ], [ %4, %L2 ] > br label %L3 > > L6: ; preds = %L4 > ret void > > L7: ; preds = %L3 > %528 = add nsw i64 %6, 1 > %529 = icmp sge i64 %528, 4 > br i1 %529, label %L4, label %L3 > } > > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
Renato Golin
2013-Nov-10 14:39 UTC
[LLVMdev] loop vectorizer erroneously finds 256 bit vectors
Hi Frank, I'm not an Intel expert, but it seems that your Xeon E5 supports AVX, which does have 256-bit vectors. The other two only supports SSE instructions, which are only 128-bit long. cheers, --renato On 10 November 2013 06:05, Frank Winter <fwinter at jlab.org> wrote:> I looked more into this. For the previously sent IR the vector width of > 256 bit is found mistakenly (and reproducibly) on this hardware: > > model name : Intel(R) Xeon(R) CPU E5-2650 0 @ 2.00GHz > > For the same IR the loop vectorizer finds the correct vector width (128 > bit) on: > > model name : Intel(R) Xeon(R) CPU E5630 @ 2.53GHz > model name : Intel(R) Core(TM) i7 CPU M 640 @ 2.80GHz > > Thus, the behavior depends on which hardware I run on. > > I am using the JIT execution engine (original interface). > > Frank > > > > On 09/11/13 23:50, Frank Winter wrote: > >> The loop vectorizer is doing an amazing job so far. Most of the time. >> I just came across one function which led to unexpected behavior: >> >> On this function the loop vectorizer finds a 256 bit vector as the >> wides vector type for the x86-64 architecture. (!) >> >> This is strange, as it was always finding the correct size of 128 bit >> as the widest type. I isolated the IR of the function to check if this >> is reproducible outside of my application. And to my surprise it is! >> >> If I run >> >> opt -O1 -loop-vectorize -debug-only=loop-vectorize >> -vectorizer-min-trip-count=4 strange.ll -S >> >> on the IR found below I get: >> >> LV: Checking a loop in "main" >> LV: Found a loop: L3 >> LV: Found an induction variable. >> LV: We need to do 0 pointer comparisons. >> LV: We don't need a runtime memory check. >> LV: We can vectorize this loop! >> LV: Found trip count: 4 >> LV: The Widest type: 32 bits. >> LV: The Widest register is: 256 bits. >> >> Wow, a Sandybridge processor with 256 bit SIMD? >> >> The vectorizer carries on and figures that 8 would be the best to go for. >> >> LV: Vector loop of width 8 costs: 38. >> LV: Selecting VF = : 8. >> >> I didn't look into the machine code but I guess there is something going >> wrong earlier. >> >> I am wondering why it's reproducible and depending on the IR?! >> >> PS When running with -O3 it still find 256 bit, but later decides that >> it's not worth >> vectorizing. >> >> Frank >> >> >> >> >> >> >> target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8- >> i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64- >> v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128" >> >> target triple = "x86_64-unknown-linux-elf" >> >> define void @main(i64 %arg0, i64 %arg1, i64 %arg2, i1 %arg3, i64 %arg4, >> float* noalias %arg5, float* noalias %arg6, float* noalias %arg7, double* >> noalias %arg8) { >> entrypoint: >> br i1 %arg3, label %L0, label %L1 >> >> L0: ; preds = %entrypoint >> %0 = add nsw i64 %arg0, %arg4 >> %1 = add nsw i64 %arg1, %arg4 >> br label %L2 >> >> L1: ; preds = %entrypoint >> br label %L2 >> >> L2: ; preds = %L0, %L1 >> %2 = phi i64 [ %arg0, %L1 ], [ %0, %L0 ] >> %3 = phi i64 [ %arg1, %L1 ], [ %1, %L0 ] >> %4 = sdiv i64 %2, 4 >> %5 = sdiv i64 %3, 4 >> br label %L5 >> >> L3: ; preds = %L7, %L5 >> %6 = phi i64 [ %528, %L7 ], [ 0, %L5 ] >> %7 = mul i64 %527, 4 >> %8 = add nsw i64 %7, %6 >> %9 = mul i64 %527, 1 >> %10 = add nsw i64 %9, 0 >> %11 = mul i64 %10, 9 >> %12 = add nsw i64 %11, 0 >> %13 = mul i64 %12, 2 >> %14 = add nsw i64 %13, 0 >> %15 = mul i64 %14, 4 >> %16 = add nsw i64 %15, %6 >> %17 = mul i64 %527, 4 >> %18 = add nsw i64 %17, %6 >> %19 = mul i64 %527, 1 >> %20 = add nsw i64 %19, 0 >> %21 = mul i64 %20, 9 >> %22 = add nsw i64 %21, 0 >> %23 = mul i64 %22, 2 >> %24 = add nsw i64 %23, 1 >> %25 = mul i64 %24, 4 >> %26 = add nsw i64 %25, %6 >> %27 = mul i64 %527, 4 >> %28 = add nsw i64 %27, %6 >> %29 = mul i64 %527, 1 >> %30 = add nsw i64 %29, 0 >> %31 = mul i64 %30, 9 >> %32 = add nsw i64 %31, 1 >> %33 = mul i64 %32, 2 >> %34 = add nsw i64 %33, 0 >> %35 = mul i64 %34, 4 >> %36 = add nsw i64 %35, %6 >> %37 = mul i64 %527, 4 >> %38 = add nsw i64 %37, %6 >> %39 = mul i64 %527, 1 >> %40 = add nsw i64 %39, 0 >> %41 = mul i64 %40, 9 >> %42 = add nsw i64 %41, 1 >> %43 = mul i64 %42, 2 >> %44 = add nsw i64 %43, 1 >> %45 = mul i64 %44, 4 >> %46 = add nsw i64 %45, %6 >> %47 = mul i64 %527, 4 >> %48 = add nsw i64 %47, %6 >> %49 = mul i64 %527, 1 >> %50 = add nsw i64 %49, 0 >> %51 = mul i64 %50, 9 >> %52 = add nsw i64 %51, 2 >> %53 = mul i64 %52, 2 >> %54 = add nsw i64 %53, 0 >> %55 = mul i64 %54, 4 >> %56 = add nsw i64 %55, %6 >> %57 = mul i64 %527, 4 >> %58 = add nsw i64 %57, %6 >> %59 = mul i64 %527, 1 >> %60 = add nsw i64 %59, 0 >> %61 = mul i64 %60, 9 >> %62 = add nsw i64 %61, 2 >> %63 = mul i64 %62, 2 >> %64 = add nsw i64 %63, 1 >> %65 = mul i64 %64, 4 >> %66 = add nsw i64 %65, %6 >> %67 = mul i64 %527, 4 >> %68 = add nsw i64 %67, %6 >> %69 = mul i64 %527, 1 >> %70 = add nsw i64 %69, 0 >> %71 = mul i64 %70, 9 >> %72 = add nsw i64 %71, 3 >> %73 = mul i64 %72, 2 >> %74 = add nsw i64 %73, 0 >> %75 = mul i64 %74, 4 >> %76 = add nsw i64 %75, %6 >> %77 = mul i64 %527, 4 >> %78 = add nsw i64 %77, %6 >> %79 = mul i64 %527, 1 >> %80 = add nsw i64 %79, 0 >> %81 = mul i64 %80, 9 >> %82 = add nsw i64 %81, 3 >> %83 = mul i64 %82, 2 >> %84 = add nsw i64 %83, 1 >> %85 = mul i64 %84, 4 >> %86 = add nsw i64 %85, %6 >> %87 = mul i64 %527, 4 >> %88 = add nsw i64 %87, %6 >> %89 = mul i64 %527, 1 >> %90 = add nsw i64 %89, 0 >> %91 = mul i64 %90, 9 >> %92 = add nsw i64 %91, 4 >> %93 = mul i64 %92, 2 >> %94 = add nsw i64 %93, 0 >> %95 = mul i64 %94, 4 >> %96 = add nsw i64 %95, %6 >> %97 = mul i64 %527, 4 >> %98 = add nsw i64 %97, %6 >> %99 = mul i64 %527, 1 >> %100 = add nsw i64 %99, 0 >> %101 = mul i64 %100, 9 >> %102 = add nsw i64 %101, 4 >> %103 = mul i64 %102, 2 >> %104 = add nsw i64 %103, 1 >> %105 = mul i64 %104, 4 >> %106 = add nsw i64 %105, %6 >> %107 = mul i64 %527, 4 >> %108 = add nsw i64 %107, %6 >> %109 = mul i64 %527, 1 >> %110 = add nsw i64 %109, 0 >> %111 = mul i64 %110, 9 >> %112 = add nsw i64 %111, 5 >> %113 = mul i64 %112, 2 >> %114 = add nsw i64 %113, 0 >> %115 = mul i64 %114, 4 >> %116 = add nsw i64 %115, %6 >> %117 = mul i64 %527, 4 >> %118 = add nsw i64 %117, %6 >> %119 = mul i64 %527, 1 >> %120 = add nsw i64 %119, 0 >> %121 = mul i64 %120, 9 >> %122 = add nsw i64 %121, 5 >> %123 = mul i64 %122, 2 >> %124 = add nsw i64 %123, 1 >> %125 = mul i64 %124, 4 >> %126 = add nsw i64 %125, %6 >> %127 = mul i64 %527, 4 >> %128 = add nsw i64 %127, %6 >> %129 = mul i64 %527, 1 >> %130 = add nsw i64 %129, 0 >> %131 = mul i64 %130, 9 >> %132 = add nsw i64 %131, 6 >> %133 = mul i64 %132, 2 >> %134 = add nsw i64 %133, 0 >> %135 = mul i64 %134, 4 >> %136 = add nsw i64 %135, %6 >> %137 = mul i64 %527, 4 >> %138 = add nsw i64 %137, %6 >> %139 = mul i64 %527, 1 >> %140 = add nsw i64 %139, 0 >> %141 = mul i64 %140, 9 >> %142 = add nsw i64 %141, 6 >> %143 = mul i64 %142, 2 >> %144 = add nsw i64 %143, 1 >> %145 = mul i64 %144, 4 >> %146 = add nsw i64 %145, %6 >> %147 = mul i64 %527, 4 >> %148 = add nsw i64 %147, %6 >> %149 = mul i64 %527, 1 >> %150 = add nsw i64 %149, 0 >> %151 = mul i64 %150, 9 >> %152 = add nsw i64 %151, 7 >> %153 = mul i64 %152, 2 >> %154 = add nsw i64 %153, 0 >> %155 = mul i64 %154, 4 >> %156 = add nsw i64 %155, %6 >> %157 = mul i64 %527, 4 >> %158 = add nsw i64 %157, %6 >> %159 = mul i64 %527, 1 >> %160 = add nsw i64 %159, 0 >> %161 = mul i64 %160, 9 >> %162 = add nsw i64 %161, 7 >> %163 = mul i64 %162, 2 >> %164 = add nsw i64 %163, 1 >> %165 = mul i64 %164, 4 >> %166 = add nsw i64 %165, %6 >> %167 = mul i64 %527, 4 >> %168 = add nsw i64 %167, %6 >> %169 = mul i64 %527, 1 >> %170 = add nsw i64 %169, 0 >> %171 = mul i64 %170, 9 >> %172 = add nsw i64 %171, 8 >> %173 = mul i64 %172, 2 >> %174 = add nsw i64 %173, 0 >> %175 = mul i64 %174, 4 >> %176 = add nsw i64 %175, %6 >> %177 = mul i64 %527, 4 >> %178 = add nsw i64 %177, %6 >> %179 = mul i64 %527, 1 >> %180 = add nsw i64 %179, 0 >> %181 = mul i64 %180, 9 >> %182 = add nsw i64 %181, 8 >> %183 = mul i64 %182, 2 >> %184 = add nsw i64 %183, 1 >> %185 = mul i64 %184, 4 >> %186 = add nsw i64 %185, %6 >> %187 = getelementptr float* %arg6, i64 %16 >> %188 = load float* %187 >> %189 = getelementptr float* %arg6, i64 %26 >> %190 = load float* %189 >> %191 = getelementptr float* %arg6, i64 %36 >> %192 = load float* %191 >> %193 = getelementptr float* %arg6, i64 %46 >> %194 = load float* %193 >> %195 = getelementptr float* %arg6, i64 %56 >> %196 = load float* %195 >> %197 = getelementptr float* %arg6, i64 %66 >> %198 = load float* %197 >> %199 = getelementptr float* %arg6, i64 %76 >> %200 = load float* %199 >> %201 = getelementptr float* %arg6, i64 %86 >> %202 = load float* %201 >> %203 = getelementptr float* %arg6, i64 %96 >> %204 = load float* %203 >> %205 = getelementptr float* %arg6, i64 %106 >> %206 = load float* %205 >> %207 = getelementptr float* %arg6, i64 %116 >> %208 = load float* %207 >> %209 = getelementptr float* %arg6, i64 %126 >> %210 = load float* %209 >> %211 = getelementptr float* %arg6, i64 %136 >> %212 = load float* %211 >> %213 = getelementptr float* %arg6, i64 %146 >> %214 = load float* %213 >> %215 = getelementptr float* %arg6, i64 %156 >> %216 = load float* %215 >> %217 = getelementptr float* %arg6, i64 %166 >> %218 = load float* %217 >> %219 = getelementptr float* %arg6, i64 %176 >> %220 = load float* %219 >> %221 = getelementptr float* %arg6, i64 %186 >> %222 = load float* %221 >> %223 = mul i64 %527, 4 >> %224 = add nsw i64 %223, %6 >> %225 = mul i64 %527, 1 >> %226 = add nsw i64 %225, 0 >> %227 = mul i64 %226, 9 >> %228 = add nsw i64 %227, 0 >> %229 = mul i64 %228, 2 >> %230 = add nsw i64 %229, 0 >> %231 = mul i64 %230, 4 >> %232 = add nsw i64 %231, %6 >> %233 = mul i64 %527, 4 >> %234 = add nsw i64 %233, %6 >> %235 = mul i64 %527, 1 >> %236 = add nsw i64 %235, 0 >> %237 = mul i64 %236, 9 >> %238 = add nsw i64 %237, 0 >> %239 = mul i64 %238, 2 >> %240 = add nsw i64 %239, 1 >> %241 = mul i64 %240, 4 >> %242 = add nsw i64 %241, %6 >> %243 = mul i64 %527, 4 >> %244 = add nsw i64 %243, %6 >> %245 = mul i64 %527, 1 >> %246 = add nsw i64 %245, 0 >> %247 = mul i64 %246, 9 >> %248 = add nsw i64 %247, 1 >> %249 = mul i64 %248, 2 >> %250 = add nsw i64 %249, 0 >> %251 = mul i64 %250, 4 >> %252 = add nsw i64 %251, %6 >> %253 = mul i64 %527, 4 >> %254 = add nsw i64 %253, %6 >> %255 = mul i64 %527, 1 >> %256 = add nsw i64 %255, 0 >> %257 = mul i64 %256, 9 >> %258 = add nsw i64 %257, 1 >> %259 = mul i64 %258, 2 >> %260 = add nsw i64 %259, 1 >> %261 = mul i64 %260, 4 >> %262 = add nsw i64 %261, %6 >> %263 = mul i64 %527, 4 >> %264 = add nsw i64 %263, %6 >> %265 = mul i64 %527, 1 >> %266 = add nsw i64 %265, 0 >> %267 = mul i64 %266, 9 >> %268 = add nsw i64 %267, 2 >> %269 = mul i64 %268, 2 >> %270 = add nsw i64 %269, 0 >> %271 = mul i64 %270, 4 >> %272 = add nsw i64 %271, %6 >> %273 = mul i64 %527, 4 >> %274 = add nsw i64 %273, %6 >> %275 = mul i64 %527, 1 >> %276 = add nsw i64 %275, 0 >> %277 = mul i64 %276, 9 >> %278 = add nsw i64 %277, 2 >> %279 = mul i64 %278, 2 >> %280 = add nsw i64 %279, 1 >> %281 = mul i64 %280, 4 >> %282 = add nsw i64 %281, %6 >> %283 = mul i64 %527, 4 >> %284 = add nsw i64 %283, %6 >> %285 = mul i64 %527, 1 >> %286 = add nsw i64 %285, 0 >> %287 = mul i64 %286, 9 >> %288 = add nsw i64 %287, 3 >> %289 = mul i64 %288, 2 >> %290 = add nsw i64 %289, 0 >> %291 = mul i64 %290, 4 >> %292 = add nsw i64 %291, %6 >> %293 = mul i64 %527, 4 >> %294 = add nsw i64 %293, %6 >> %295 = mul i64 %527, 1 >> %296 = add nsw i64 %295, 0 >> %297 = mul i64 %296, 9 >> %298 = add nsw i64 %297, 3 >> %299 = mul i64 %298, 2 >> %300 = add nsw i64 %299, 1 >> %301 = mul i64 %300, 4 >> %302 = add nsw i64 %301, %6 >> %303 = mul i64 %527, 4 >> %304 = add nsw i64 %303, %6 >> %305 = mul i64 %527, 1 >> %306 = add nsw i64 %305, 0 >> %307 = mul i64 %306, 9 >> %308 = add nsw i64 %307, 4 >> %309 = mul i64 %308, 2 >> %310 = add nsw i64 %309, 0 >> %311 = mul i64 %310, 4 >> %312 = add nsw i64 %311, %6 >> %313 = mul i64 %527, 4 >> %314 = add nsw i64 %313, %6 >> %315 = mul i64 %527, 1 >> %316 = add nsw i64 %315, 0 >> %317 = mul i64 %316, 9 >> %318 = add nsw i64 %317, 4 >> %319 = mul i64 %318, 2 >> %320 = add nsw i64 %319, 1 >> %321 = mul i64 %320, 4 >> %322 = add nsw i64 %321, %6 >> %323 = mul i64 %527, 4 >> %324 = add nsw i64 %323, %6 >> %325 = mul i64 %527, 1 >> %326 = add nsw i64 %325, 0 >> %327 = mul i64 %326, 9 >> %328 = add nsw i64 %327, 5 >> %329 = mul i64 %328, 2 >> %330 = add nsw i64 %329, 0 >> %331 = mul i64 %330, 4 >> %332 = add nsw i64 %331, %6 >> %333 = mul i64 %527, 4 >> %334 = add nsw i64 %333, %6 >> %335 = mul i64 %527, 1 >> %336 = add nsw i64 %335, 0 >> %337 = mul i64 %336, 9 >> %338 = add nsw i64 %337, 5 >> %339 = mul i64 %338, 2 >> %340 = add nsw i64 %339, 1 >> %341 = mul i64 %340, 4 >> %342 = add nsw i64 %341, %6 >> %343 = mul i64 %527, 4 >> %344 = add nsw i64 %343, %6 >> %345 = mul i64 %527, 1 >> %346 = add nsw i64 %345, 0 >> %347 = mul i64 %346, 9 >> %348 = add nsw i64 %347, 6 >> %349 = mul i64 %348, 2 >> %350 = add nsw i64 %349, 0 >> %351 = mul i64 %350, 4 >> %352 = add nsw i64 %351, %6 >> %353 = mul i64 %527, 4 >> %354 = add nsw i64 %353, %6 >> %355 = mul i64 %527, 1 >> %356 = add nsw i64 %355, 0 >> %357 = mul i64 %356, 9 >> %358 = add nsw i64 %357, 6 >> %359 = mul i64 %358, 2 >> %360 = add nsw i64 %359, 1 >> %361 = mul i64 %360, 4 >> %362 = add nsw i64 %361, %6 >> %363 = mul i64 %527, 4 >> %364 = add nsw i64 %363, %6 >> %365 = mul i64 %527, 1 >> %366 = add nsw i64 %365, 0 >> %367 = mul i64 %366, 9 >> %368 = add nsw i64 %367, 7 >> %369 = mul i64 %368, 2 >> %370 = add nsw i64 %369, 0 >> %371 = mul i64 %370, 4 >> %372 = add nsw i64 %371, %6 >> %373 = mul i64 %527, 4 >> %374 = add nsw i64 %373, %6 >> %375 = mul i64 %527, 1 >> %376 = add nsw i64 %375, 0 >> %377 = mul i64 %376, 9 >> %378 = add nsw i64 %377, 7 >> %379 = mul i64 %378, 2 >> %380 = add nsw i64 %379, 1 >> %381 = mul i64 %380, 4 >> %382 = add nsw i64 %381, %6 >> %383 = mul i64 %527, 4 >> %384 = add nsw i64 %383, %6 >> %385 = mul i64 %527, 1 >> %386 = add nsw i64 %385, 0 >> %387 = mul i64 %386, 9 >> %388 = add nsw i64 %387, 8 >> %389 = mul i64 %388, 2 >> %390 = add nsw i64 %389, 0 >> %391 = mul i64 %390, 4 >> %392 = add nsw i64 %391, %6 >> %393 = mul i64 %527, 4 >> %394 = add nsw i64 %393, %6 >> %395 = mul i64 %527, 1 >> %396 = add nsw i64 %395, 0 >> %397 = mul i64 %396, 9 >> %398 = add nsw i64 %397, 8 >> %399 = mul i64 %398, 2 >> %400 = add nsw i64 %399, 1 >> %401 = mul i64 %400, 4 >> %402 = add nsw i64 %401, %6 >> %403 = getelementptr float* %arg7, i64 %232 >> %404 = load float* %403 >> %405 = getelementptr float* %arg7, i64 %242 >> %406 = load float* %405 >> %407 = getelementptr float* %arg7, i64 %252 >> %408 = load float* %407 >> %409 = getelementptr float* %arg7, i64 %262 >> %410 = load float* %409 >> %411 = getelementptr float* %arg7, i64 %272 >> %412 = load float* %411 >> %413 = getelementptr float* %arg7, i64 %282 >> %414 = load float* %413 >> %415 = getelementptr float* %arg7, i64 %292 >> %416 = load float* %415 >> %417 = getelementptr float* %arg7, i64 %302 >> %418 = load float* %417 >> %419 = getelementptr float* %arg7, i64 %312 >> %420 = load float* %419 >> %421 = getelementptr float* %arg7, i64 %322 >> %422 = load float* %421 >> %423 = getelementptr float* %arg7, i64 %332 >> %424 = load float* %423 >> %425 = getelementptr float* %arg7, i64 %342 >> %426 = load float* %425 >> %427 = getelementptr float* %arg7, i64 %352 >> %428 = load float* %427 >> %429 = getelementptr float* %arg7, i64 %362 >> %430 = load float* %429 >> %431 = getelementptr float* %arg7, i64 %372 >> %432 = load float* %431 >> %433 = getelementptr float* %arg7, i64 %382 >> %434 = load float* %433 >> %435 = getelementptr float* %arg7, i64 %392 >> %436 = load float* %435 >> %437 = getelementptr float* %arg7, i64 %402 >> %438 = load float* %437 >> %439 = fmul float %406, %188 >> %440 = fmul float %404, %190 >> %441 = fadd float %440, %439 >> %442 = fmul float %406, %190 >> %443 = fmul float %404, %188 >> %444 = fsub float %443, %442 >> %445 = fmul float %410, %200 >> %446 = fmul float %408, %202 >> %447 = fadd float %446, %445 >> %448 = fmul float %410, %202 >> %449 = fmul float %408, %200 >> %450 = fsub float %449, %448 >> %451 = fadd float %444, %450 >> %452 = fadd float %441, %447 >> %453 = fmul float %414, %212 >> %454 = fmul float %412, %214 >> %455 = fadd float %454, %453 >> %456 = fmul float %414, %214 >> %457 = fmul float %412, %212 >> %458 = fsub float %457, %456 >> %459 = fadd float %451, %458 >> %460 = fadd float %452, %455 >> %461 = fmul float %418, %192 >> %462 = fmul float %416, %194 >> %463 = fadd float %462, %461 >> %464 = fmul float %418, %194 >> %465 = fmul float %416, %192 >> %466 = fsub float %465, %464 >> %467 = fadd float %459, %466 >> %468 = fadd float %460, %463 >> %469 = fmul float %422, %204 >> %470 = fmul float %420, %206 >> %471 = fadd float %470, %469 >> %472 = fmul float %422, %206 >> %473 = fmul float %420, %204 >> %474 = fsub float %473, %472 >> %475 = fadd float %467, %474 >> %476 = fadd float %468, %471 >> %477 = fmul float %426, %216 >> %478 = fmul float %424, %218 >> %479 = fadd float %478, %477 >> %480 = fmul float %426, %218 >> %481 = fmul float %424, %216 >> %482 = fsub float %481, %480 >> %483 = fadd float %475, %482 >> %484 = fadd float %476, %479 >> %485 = fmul float %430, %196 >> %486 = fmul float %428, %198 >> %487 = fadd float %486, %485 >> %488 = fmul float %430, %198 >> %489 = fmul float %428, %196 >> %490 = fsub float %489, %488 >> %491 = fadd float %483, %490 >> %492 = fadd float %484, %487 >> %493 = fmul float %434, %208 >> %494 = fmul float %432, %210 >> %495 = fadd float %494, %493 >> %496 = fmul float %434, %210 >> %497 = fmul float %432, %208 >> %498 = fsub float %497, %496 >> %499 = fadd float %491, %498 >> %500 = fadd float %492, %495 >> %501 = fmul float %438, %220 >> %502 = fmul float %436, %222 >> %503 = fadd float %502, %501 >> %504 = fmul float %438, %222 >> %505 = fmul float %436, %220 >> %506 = fsub float %505, %504 >> %507 = fadd float %499, %506 >> %508 = fadd float %500, %503 >> %509 = getelementptr double* %arg8, i32 0 >> %510 = load double* %509 >> %511 = fpext float %507 to double >> %512 = fmul double %510, %511 >> %513 = mul i64 %527, 4 >> %514 = add nsw i64 %513, %6 >> %515 = mul i64 %527, 1 >> %516 = add nsw i64 %515, 0 >> %517 = mul i64 %516, 1 >> %518 = add nsw i64 %517, 0 >> %519 = mul i64 %518, 1 >> %520 = add nsw i64 %519, 0 >> %521 = mul i64 %520, 4 >> %522 = add nsw i64 %521, %6 >> %523 = getelementptr float* %arg5, i64 %522 >> %524 = fptrunc double %512 to float >> store float %524, float* %523 >> br label %L7 >> >> L4: ; preds = %L7 >> %525 = add nsw i64 %527, 1 >> %526 = icmp sge i64 %525, %5 >> br i1 %526, label %L6, label %L5 >> >> L5: ; preds = %L4, %L2 >> %527 = phi i64 [ %525, %L4 ], [ %4, %L2 ] >> br label %L3 >> >> L6: ; preds = %L4 >> ret void >> >> L7: ; preds = %L3 >> %528 = add nsw i64 %6, 1 >> %529 = icmp sge i64 %528, 4 >> br i1 %529, label %L4, label %L3 >> } >> >> >> >> _______________________________________________ >> LLVM Developers mailing list >> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu >> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >> > > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >-------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131110/c2389482/attachment.html>
Nadav Rotem
2013-Nov-11 05:38 UTC
[LLVMdev] loop vectorizer erroneously finds 256 bit vectors
On Nov 9, 2013, at 8:50 PM, Frank Winter <fwinter at jlab.org> wrote:> Wow, a Sandybridge processor with 256 bit SIMD?Yes. Gesher was the first processor to feature AVX. http://en.wikipedia.org/wiki/Sandy_Bridge -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20131110/aa4e1739/attachment.html>
Possibly Parallel Threads
- [LLVMdev] loop vectorizer erroneously finds 256 bit vectors
- [LLVMdev] loop vectorizer erroneously finds 256 bit vectors
- [LLVMdev] loop vectorizer erroneously finds 256 bit vectors
- [LLVMdev] loop vectorizer: Unexpected extract/insertelement
- [LLVMdev] loop vectorizer: Unexpected extract/insertelement