[all-commits] [llvm/llvm-project] dd95c0: Precommit test

Luke Lau via All-commits all-commits at lists.llvm.org
Thu Aug 6 22:43:45 PDT 2026


  Branch: refs/heads/users/lukel97/loop-vectorize/simplifyRecipes-worklist-inserter
  Home:   https://github.com/llvm/llvm-project
  Commit: dd95c05c624ece2ad7fc25b739c527323267fb3f
      https://github.com/llvm/llvm-project/commit/dd95c05c624ece2ad7fc25b739c527323267fb3f
  Author: Luke Lau <luke at igalia.com>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-complex-mask.ll

  Log Message:
  -----------
  Precommit test


  Commit: fa4bd2570b34d3d3f020eefd9626f33b621d3ef1
      https://github.com/llvm/llvm-project/commit/fa4bd2570b34d3d3f020eefd9626f33b621d3ef1
  Author: Luke Lau <luke at igalia.com>
  Date:   2026-08-07 (Fri, 07 Aug 2026)

  Changed paths:
    M llvm/lib/Transforms/Vectorize/LoopVectorizationPlanner.h
    M llvm/lib/Transforms/Vectorize/VPlanTransforms.cpp
    M llvm/test/Transforms/LoopVectorize/RISCV/tail-folding-complex-mask.ll

  Log Message:
  -----------
  [VPlan] Append recipes created via builder to worklist

The previous PR appended the top most created recipe to the worklist, and this PR extends it to any other nested recipes that were created, similar to InstCombine.

This removes the header mask in a good few more places on RISC-V as measured on SPEC CPU 2017, e.g. for the following loop:

```c
long f(const int *p, const int *q, long n) {
  long a = 0, b = 0;
  for (long i = 0;; i++) {
    if (p[i] && q[i]) { a += i; b += i; }
    if (i + 1 == n) break;
  }
  return a + b;
}
```

Before:

```asm
LBB0_1:
        sh2add  a4, a3, a0
        vsetvli a5, a2, e32, m1, ta, ma
        vle32.v v16, (a4)
        vmsne.vi        v0, v16, 0
        sh2add  a4, a3, a1
        vsetvli zero, zero, e64, m2, ta, ma
        vmsltu.vx       v16, v10, a5
        vle32.v v17, (a4), v0.t
        vsetvli zero, zero, e32, m1, ta, ma
        vmsne.vi        v17, v17, 0
        vmand.mm        v17, v0, v17
        vmand.mm        v0, v16, v17
        vsetvli zero, zero, e64, m2, tu, mu
        vadd.vv v8, v14, v8, v0.t
        vadd.vv v12, v14, v12, v0.t
        vsetvli zero, zero, e64, m2, ta, ma
        vadd.vx v14, v14, a5
        sub     a2, a2, a5
        add     a3, a3, a5
        bnez    a2, .LBB0_1
```

After:

```
.LBB0_1:
	sh2add	a4, a3, a0
	vsetvli	a5, a2, e32, m1, ta, ma
	vle32.v	v14, (a4)
	vmsne.vi	v0, v14, 0
	sh2add	a4, a3, a1
	vle32.v	v14, (a4), v0.t
	vmsne.vi	v14, v14, 0
	vmand.mm	v0, v0, v14
	vsetvli	zero, zero, e64, m2, tu, mu
	vadd.vv	v8, v12, v8, v0.t
	vadd.vv	v10, v12, v10, v0.t
	vsetvli	zero, zero, e64, m2, ta, ma
	vadd.vx	v12, v12, a5
	sub	a2, a2, a5
	add	a3, a3, a5
	bnez	a2, .LBB0_1
```

This copies the IRBuilderInstCombineInserter for IRBuilder approach from InstCombine, but templating VPBuilder + adding a VPBuilderBase seemed overkill so I've just made a dervied class with a virtual method instead, which does the same thing.

We can also remove the (X && Y) | (X && !Y) -> X combine, but this is left for another NFC PR.


Compare: https://github.com/llvm/llvm-project/compare/7e944a8f7c81...fa4bd2570b34

To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list