[llvm] [LoopInterchange] Support inner-loop simple reductions via UndoSimpleReduction (PR #172970)
Ryotaro Kasuga via llvm-commits
llvm-commits at lists.llvm.org
Wed Dec 24 06:14:12 PST 2025
================
@@ -0,0 +1,240 @@
+; Several cases of undoing simple reductions that have not yet been supported.
+; RUN: opt < %s -passes="loop-interchange" -loop-interchange-undo-simple-reduction -pass-remarks-missed='loop-interchange' \
+; RUN: -pass-remarks-output=%t -S | FileCheck -check-prefix=IR %s
+; RUN: FileCheck --input-file=%t %s
+
+
+; 1. The initial value of the reduction is not a constant.
+; for (int i = 0; i < n; i++) {
+; for (int j = 0; j < n; j++)
+; s[i] = s[i] + a[j][i] * b[j][i];
+; }
+
+; CHECK: --- !Missed
+; CHECK-NEXT: Pass: loop-interchange
+; CHECK-NEXT: Name: UnsupportedPHIInner
+; CHECK-NEXT: Function: simple_reduction_01
+; CHECK-NEXT: Args:
+; CHECK-NEXT: - String: Only inner loops with induction or reduction PHI nodes can be interchange currently.
+
+; IR-LABEL: @simple_reduction_01(
+; IR-NOT: split
+define void @simple_reduction_01(ptr noalias noundef readonly captures(none) %a, ptr noalias noundef readonly captures(none) %b, ptr noalias noundef writeonly captures(none) %s, i64 noundef %n) {
----------------
kasuga-fj wrote:
```suggestion
define void @simple_reduction_01(ptr noalias %a, ptr noalias readonly %b, ptr noalias %s, i64 %n) {
```
Remove unnecessary attributes. Please ignore this suggestion if they are necessary.
https://github.com/llvm/llvm-project/pull/172970
More information about the llvm-commits
mailing list