| 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