[llvm-dev] Question about LLVM region analysis
Anshunkang Zhou via llvm-dev
llvm-dev at lists.llvm.org
Fri Nov 13 00:41:18 PST 2020
Hi, developers,
Recently, I am trying to use the LLVM Region analysis, the LLVM
version is 10. I use opt to print out the region analysis result using
"opt -view-regions-only region.ll". However, I am confused about the
result produced by LLVM, I found that LLVM seems to skip loop
preheader when grouping blocks into regions. Here is a simple example
code:
```region.c
void split(int a, int b) {
int aaa = a * b;
if (aaa > 100) {
for (int i = 0; i < 100; i++) {
printf("%d\n", i);
if (i == 10)
printf("asdsad\n");
}
} else if (aaa < 100) {
printf("elif\n");
}
}
```
Running "opt -regions -analyze region.ll" I got:
```
Printing analysis 'Detect single entry single exit regions' for
function 'split':
Region tree:
[0] entry => <Function Return>
[1] entry => if.end9
[2] for.cond => for.end
[3] for.body => if.end
[2] if.else => if.end8
End region tree
```
LLVM uses "for.cond" as the entry and "for.end" as the exit, but there
is a loop preheader block before "for.cond" named "if.then", using
"if.then" as the entry can still get a legal region. So I wonder why
LLVM does not contain the loop preheader into the region. The dot file
is in the mail attachment.
Thanks!
-------------- next part --------------
A non-text attachment was scrubbed...
Name: regonly-361ef8.dot.png
Type: image/png
Size: 51626 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20201113/cd419607/attachment-0001.png>
More information about the llvm-dev
mailing list