-loop-deletion: Delete Dead Loops
Description
-loop-deletion pass 做的事非常简单,其实就是对于一个 loop,如果其计算对于 function 的 return value 没有任何影响,那么这个 loop 就会被判定为 dead 的,然后 -loop-deletion 就会将其删去(逻辑很类似 -dce pass 之于 code)。
Code Example
原始的 IR code。
define i32 @foo(i32 %n) {
loop:
%cmp = icmp slt i32 %n, 10
br i1 %cmp, label %body, label %exit
body:
%add = add i32 %n, 1
store i32 %add, i32* %n
br label %loop
exit:
ret i32 %n
}
-loop-deletion transform 过的 IR code。
define i32 @foo(i32 %n) {
ret i32 %n
}
对于一开始的的 IR code,虽然 loop 里天花乱坠地计算了一大堆,但是它们对于该 function 的 return value %n 没有任何影响,那么就直接将其判定为 dead,然后删去(如上code所示)。
代码就很自然地简洁多了。