Issue 172011
Summary [LoopInterchange] Missed optimization for simple nested loop
Labels new issue
Assignees
Reporter kasuga-fj
    godbolt: https://godbolt.org/z/hWosffrx7

LoopInterchange seems to consider that interchanging the following loops is unprofitable.

```llvm
; for (i = 0; i < 10; i++)
;   for (j = 0; j < 10; j++)
;     A[i + j * 100] = 0;
define void @f(ptr %A) {
entry:
  br label %loop.i.header

loop.i.header:
  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.i.latch ]
  br label %loop.j

loop.j:
  %j = phi i64 [ 0, %loop.i.header ], [ %j.inc, %loop.j ]
  %j.100 = mul i64 %j, 100
  %offset = add i64 %i, %j.100
  %gep = getelementptr inbounds i8, ptr %A, i64 %offset
  store i8 0, ptr %gep
 %j.inc = add i64 %j, 1
  %ec.j = icmp eq i64 %j.inc, 10
  br i1 %ec.j, label %loop.i.latch, label %loop.j

loop.i.latch:
  %i.inc = add i64 %i, 1
  %ec.i = icmp eq i64 %i.inc, 10
  br i1 %ec.i, label %exit, label %loop.i.header

exit:
  ret void
}
```
_______________________________________________
llvm-bugs mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to