[llvm] InstCombine: reuse shifted/added values in reassociation (PR #202563)

Tianyi Jiao via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 9 02:58:00 PDT 2026


https://github.com/squirrel1027 created https://github.com/llvm/llvm-project/pull/202563

Add regression test for reassociation. Adds llvm/test/Transforms/InstCombine/reassoc.ll to ensure InstCombine reuses shifted/added values during reassociation.\n\nThis test was validated locally by running 'opt -passes=instcombine' on reduced IR inputs and confirming the expected reassociation and reuse of shifted/added values. Patch: /tmp/0001-InstCombine-reassoc.patch

>From 6de6499043b54aabeb4b0615ca0ad2bbadd9aafe Mon Sep 17 00:00:00 2001
From: squirrel1027 <squirrel1027 at users.noreply.github.com>
Date: Tue, 9 Jun 2026 17:09:06 +0800
Subject: [PATCH] [InstCombine] Add reassociation regression test for reuse of
 shl/add results

Signed-off-by: squirrel1027 <squirrel1027 at users.noreply.github.com>
---
 llvm/test/Transforms/InstCombine/reassoc.ll | 35 +++++++++++++++++++++
 1 file changed, 35 insertions(+)
 create mode 100644 llvm/test/Transforms/InstCombine/reassoc.ll

diff --git a/llvm/test/Transforms/InstCombine/reassoc.ll b/llvm/test/Transforms/InstCombine/reassoc.ll
new file mode 100644
index 0000000000000..8220b1237479c
--- /dev/null
+++ b/llvm/test/Transforms/InstCombine/reassoc.ll
@@ -0,0 +1,35 @@
+; RUN: opt -passes=instcombine -S < %s | FileCheck %s
+
+; CHECK-LABEL: define i8 @newDenseMat(
+; CHECK: %3 = shl i8 %1, 1
+; CHECK: %4 = mul i8 %0, %3
+
+define i8 @newDenseMat(i8 %0, i8 %1, i8* %2) {
+entry:
+  %4 = shl i8 %1, 1
+  %5 = shl i8 %0, 1
+  %6 = mul i8 %5, %1
+  store i8 %6, i8* %2, align 8
+  ret i8 %4
+}
+
+; CHECK-LABEL: define i32 @H5HF__sect_indirect_init_rows(
+; CHECK: %3 = add i32 %2, 1
+; CHECK: %4 = sub i32 %3, %1
+
+define noundef i32 @H5HF__sect_indirect_init_rows(i32* %0, i32 %1, i32 %2) {
+entry:
+  %4 = add i32 %2, 1
+  store i32 %4, i32* %0, align 8
+  %reass.sub = sub i32 %2, %1
+  %5 = add i32 %reass.sub, 1
+  ret i32 %5
+}
+
+define noundef i32 @tgt2(i32* %0, i32 %1, i32 %2) {
+entry:
+  %4 = add i32 %2, 1
+  store i32 %4, i32* %0, align 8
+  %5 = sub i32 %4, %1
+  ret i32 %5
+}



More information about the llvm-commits mailing list