[llvm] [SLP]Support revectorization of the previously vectorized scalars (PR #133091)
Alexander Kornienko via llvm-commits
llvm-commits at lists.llvm.org
Mon Apr 7 03:19:50 PDT 2025
alexfh wrote:
Test case (also in https://gcc.godbolt.org/z/nsjaqfoT8):
```
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
define void @_f(ptr %0, i8 %1, i8 %2) #0 {
%4 = or i8 %1, 1
%5 = getelementptr i8, ptr %0, i64 13520
store i8 %4, ptr %5, align 4
%6 = getelementptr i8, ptr %0, i64 13521
store i8 %4, ptr %6, align 1
%7 = getelementptr i8, ptr %0, i64 13522
store i8 %4, ptr %7, align 2
%8 = load i8, ptr %0, align 2
%9 = or i8 %2, 1
%10 = getelementptr i8, ptr %0, i64 13523
store i8 %9, ptr %10, align 1
%11 = getelementptr i8, ptr %0, i64 13524
store i8 %4, ptr %11, align 4
%12 = getelementptr i8, ptr %0, i64 13525
store i8 %4, ptr %12, align 1
%13 = getelementptr i8, ptr %0, i64 13526
store i8 %4, ptr %13, align 2
%14 = getelementptr i8, ptr %0, i64 13445
%15 = load i8, ptr %14, align 1
%16 = getelementptr i8, ptr %0, i64 13527
store i8 %4, ptr %16, align 1
%17 = getelementptr i8, ptr %0, i64 13428
%18 = load i8, ptr %17, align 4
%19 = or i8 %18, 1
%20 = getelementptr i8, ptr %0, i64 13528
store i8 %19, ptr %20, align 4
%21 = getelementptr i8, ptr %0, i64 13429
%22 = load i8, ptr %21, align 1
%23 = or i8 %22, 1
%24 = getelementptr i8, ptr %0, i64 13529
store i8 %23, ptr %24, align 1
%25 = getelementptr i8, ptr %0, i64 13430
%26 = load i8, ptr %25, align 2
%27 = or i8 %26, 1
%28 = getelementptr i8, ptr %0, i64 13530
store i8 %27, ptr %28, align 2
%29 = getelementptr i8, ptr %0, i64 13431
%30 = load i8, ptr %29, align 1
%31 = or i8 %30, 1
%32 = getelementptr i8, ptr %0, i64 13531
store i8 %31, ptr %32, align 1
%33 = getelementptr i8, ptr %0, i64 13432
%34 = load i8, ptr %33, align 4
%35 = or i8 %34, 1
%36 = getelementptr i8, ptr %0, i64 13532
store i8 %35, ptr %36, align 4
%37 = getelementptr i8, ptr %0, i64 13433
%38 = load i8, ptr %37, align 1
%39 = or i8 %38, 1
%40 = getelementptr i8, ptr %0, i64 13533
store i8 %39, ptr %40, align 1
%41 = getelementptr i8, ptr %0, i64 13434
%42 = load i8, ptr %41, align 2
%43 = or i8 %42, 1
%44 = getelementptr i8, ptr %0, i64 13534
store i8 %43, ptr %44, align 2
%45 = getelementptr i8, ptr %0, i64 13435
%46 = load i8, ptr %45, align 1
%47 = or i8 %46, 1
%48 = getelementptr i8, ptr %0, i64 13535
store i8 %47, ptr %48, align 1
%49 = getelementptr i8, ptr %0, i64 13442
%50 = load i8, ptr %49, align 2
%51 = or i8 %50, %15
%52 = getelementptr i8, ptr %0, i64 13550
store i8 %51, ptr %52, align 2
%53 = or i8 %42, %50
%54 = getelementptr i8, ptr %0, i64 13542
store i8 %53, ptr %54, align 2
%55 = getelementptr i8, ptr %0, i64 13438
%56 = load i8, ptr %55, align 2
%57 = or i8 %56, %8
%58 = getelementptr i8, ptr %0, i64 13546
store i8 %57, ptr %58, align 2
%59 = or i8 %26, %56
%60 = getelementptr i8, ptr %0, i64 13538
store i8 %59, ptr %60, align 2
%61 = getelementptr i8, ptr %0, i64 13440
%62 = load i8, ptr %61, align 4
%63 = or i8 %62, %15
%64 = getelementptr i8, ptr %0, i64 13548
store i8 %63, ptr %64, align 4
%65 = or i8 %34, %62
%66 = getelementptr i8, ptr %0, i64 13540
store i8 %65, ptr %66, align 4
%67 = getelementptr i8, ptr %0, i64 13436
%68 = load i8, ptr %67, align 4
%69 = getelementptr i8, ptr %0, i64 13444
%70 = load i8, ptr %69, align 4
%71 = or i8 %68, %70
%72 = getelementptr i8, ptr %0, i64 13544
store i8 %71, ptr %72, align 4
%73 = or i8 %18, %68
%74 = getelementptr i8, ptr %0, i64 13536
store i8 %73, ptr %74, align 4
%75 = getelementptr i8, ptr %0, i64 13443
%76 = load i8, ptr %75, align 1
%77 = or i8 %76, %15
%78 = getelementptr i8, ptr %0, i64 13551
store i8 %77, ptr %78, align 1
%79 = or i8 %46, %76
%80 = getelementptr i8, ptr %0, i64 13543
store i8 %79, ptr %80, align 1
%81 = getelementptr i8, ptr %0, i64 13439
%82 = load i8, ptr %81, align 1
%83 = or i8 %82, %15
%84 = getelementptr i8, ptr %0, i64 13547
store i8 %83, ptr %84, align 1
%85 = or i8 %30, %82
%86 = getelementptr i8, ptr %0, i64 13539
store i8 %85, ptr %86, align 1
%87 = getelementptr i8, ptr %0, i64 13441
%88 = load i8, ptr %87, align 1
%89 = or i8 %88, %15
%90 = getelementptr i8, ptr %0, i64 13549
store i8 %89, ptr %90, align 1
%91 = or i8 %38, %88
%92 = getelementptr i8, ptr %0, i64 13541
store i8 %91, ptr %92, align 1
%93 = getelementptr i8, ptr %0, i64 13437
%94 = load i8, ptr %93, align 1
%95 = load i8, ptr %0, align 1
%96 = or i8 %94, %95
%97 = getelementptr i8, ptr %0, i64 13545
store i8 %96, ptr %97, align 1
%98 = or i8 %22, %94
%99 = getelementptr i8, ptr %0, i64 13537
store i8 %98, ptr %99, align 1
ret void
}
attributes #0 = { "prefer-vector-width"="128" "target-features"="+avx" }
```
```
Stack dump:
0. Program arguments: ./clang-bad -O3 -c -o /dev/null reduced.ll
1. Code generation
2. Running pass 'Function Pass Manager' on module 'reduced.ll'.
3. Running pass 'Machine Instruction Scheduler' on function '@_f'
```
https://github.com/llvm/llvm-project/pull/133091
More information about the llvm-commits
mailing list