OSDN Git Service

JumpThreading: Turn a select instruction into branching if it allows to thread one...
authorBenjamin Kramer <benny.kra@googlemail.com>
Wed, 7 Aug 2013 10:29:38 +0000 (10:29 +0000)
committerBenjamin Kramer <benny.kra@googlemail.com>
Wed, 7 Aug 2013 10:29:38 +0000 (10:29 +0000)
commitc11b107f21f8f1baf1021999fc7d01b93e00922b
tree30b40715cea776c60986056d6fbf36269c6557ff
parente4a4aecffb25df25736fec328d9147ee43335c2b
JumpThreading: Turn a select instruction into branching if it allows to thread one half of the select.

This is a common pattern coming out of simplifycfg generating gross code.

a:                                       ; preds = %entry
  %sel = select i1 %cmp1, double %add, double 0.000000e+00
  br label %b

b:
  %cond5 = phi double [ %sel, %a ], [ %sub, %entry ]
  %cmp6 = fcmp oeq double %cond5, 0.000000e+00
  br i1 %cmp6, label %if.then, label %if.end

becomes

a:
  br i1 %cmp1, label %b, label %if.then

b:
  %cond5 = phi double [ %sub, %entry ], [ %add, %a ]
  %cmp6 = fcmp oeq double %cond5, 0.000000e+00
  br i1 %cmp6, label %if.then, label %if.end

Skipping block b completely if possible.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@187880 91177308-0d34-0410-b5e6-96231b3b80d8
lib/Transforms/Scalar/JumpThreading.cpp
test/Transforms/JumpThreading/select.ll