[PATCH] [InstCombine] Lower unknown @llvm.objectsize early.

Nick Lewycky nicholas at mxc.ca
Fri Jan 23 00:33:01 PST 2015


Ahmed Bougacha wrote:

> We already try to lower objectsize in InstCombine, but only if the

>  result is known.  When it is unknown, the intrinsic calls would survive

>  the mid-level optimizers, to be lowered late, in CodeGenPrepare.

> 

> We can lower them in InstCombine as well, to 0 or -1, depending on the

>  min argument.

>  One could argue this is a bit early to do the lowering, since the size

>  might be made apparent by later optimizations.


Yep.

  In practice however,

> the majority of cases has a never-known objectsize, and in a lot of

>  the remaining few, the size is immediately apparent (say from a

>  global value, or an alloca).


Sure I'd expect that, but that isn't really a problem on its own.

> Always keeping the intrinsic call intact prevents optimizations, and

>  makes memcpyopt useless when libcall fortification is enabled (the

>  default on a few major targets).


Can we fix that instead? Not waiting as long as possible to lower 
unknown llvm.objectsize just can't be right.

> There are a few alternatives to doing it here; all seem overkill:

> 

> - teach the libcall simplifier to look through unknown @llvm.objectsize, so it's able to replace the fortified version of a libcall with the non-fortified one if the size is unknown.

> - make a dedicated pass that lowers the intrinsic, even when the size is unknown, run it before memcpyopt&  friends.

> - in memcpyopt, start by running the libcall simplifier, to lower @llvm.objectsize, even when the size is unknown.


The first of those sounds best to me.

> Also, Nuno proposes a related improvement to the associated

>  APIs (MemoryBuiltins.h): "[the analyzer] could be improved to

>  produce an interval instead.  If we know that the minimum

>  objectsize is larger than the written size, then the check could

>  go away, even if we don't know the exact size of the buffer."

> 

> http://reviews.llvm.org/D7129

> 

> Files:

> 

>   lib/Transforms/InstCombine/InstCombineCalls.cpp

>   test/Transforms/InstCombine/objsize.ll

>   test/Transforms/InstCombine/stpcpy_chk-1.ll

>   test/Transforms/InstCombine/strcpy_chk-1.ll

> 

> EMAIL PREFERENCES

> 

>   http://reviews.llvm.org/settings/panel/emailpreferences/

> 

> _______________________________________________

>  llvm-commits mailing list

>  llvm-commits at cs.uiuc.edu

>  http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



http://reviews.llvm.org/D7129

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/






More information about the llvm-commits mailing list