[llvm-commits] Do more conditional propagation in GVN
Peter Cooper
peter_cooper at apple.com
Sun Feb 26 12:17:53 PST 2012
Hi Duncan
Sorry, you sent me this quite a while ago and I never got back to you about it. I think it's very worthwhile. I was trying to do something similar in SimplifyCfg but it was getting very messy.
Thanks
Pete
Sent from my iPhone
On Feb 26, 2012, at 10:06 AM, Duncan Sands <baldrick at free.fr> wrote:
> Hi all, suppose we have
>
> %cmp = icmp eq i32 %x, %y
> br i1 %cmp, label %same, label %different
> same:
> %cmp2 = icmp eq i32 %x, %y
> %cmp3 = icmp ne i32 %x, %y
>
> Right now GVN will replace %cmp2 with "true" because you can only get to
> block "same" if %cmp is true, and %cmp2 is the same as %cmp. But it
> doesn't replace %cmp3 with false. The attached patch implements this
> (when the branch condition is any comparison, not just an equality
> comparison). Currently no pass does this (tested using -std-compile-opts).
>
> The logic fires here and there. It zaps two compares and two blocks in bzip2
> because the compares were replaced with constants thanks to this. In "gcc as
> one big file" it zaps 50 or so comparisons, resulting in some minor knock-on
> simplifications. On sqlite3, which showed the most compile time slowdown when
> the original logic was implemented, the compile time goes up by 2%, while in
> return it zaps about 40 or so comparisons resulting in some minor knock-on
> simplifications.
>
> I didn't implement this because I needed it, I implemented it because I
> realized that it could be done quite easily. But is it worth it? Any
> opinions?
>
> Ciao, Duncan.
> <oppprop.diff>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list