[LLVMdev] Missed optimization with indirectbr terminator

Cameron Zwarich zwarich at apple.com
Thu Jul 7 02:14:38 PDT 2011


On Jul 7, 2011, at 2:05 AM, Carlo Alberto Ferraris wrote:

> Consider this IR fragment produced after -O3:
>> %7:
>> %8 = phi i8* [ blockaddress(@0, %19), %19 ], [ %12, %11 ]
>> %9 = phi i32 [ %20, %19 ], [ 0, %11 ]
>> indirectbr i8* %8, [label %4, label %19]
>> 
>> %19: 
>> %20 = add nsw i32 %9, 1
>> %21 = icmp eq i32 %9, 9999
>> br i1 %21, label %16, label %7
> the br in %19 should be optimized to branch directly to itself rather than going back to %7 (note that the arg %8 to the indirectbr will always be the address of %19 when coming from %19).
> Is this a known missed optimization?

I haven't read the code in detail, but it looks like JumpThreading at least attempts to thread across indirect branches. You can either try to fix it or file a bug with your test case.

Cameron
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20110707/b782a1d6/attachment.html>


More information about the llvm-dev mailing list