- May 01, 2010
-
-
Chris Lattner authored
reflect that it includes all inlined calls now, not just devirtualized ones. llvm-svn: 102824
-
rdar://6295824Chris Lattner authored
that can have a big effect :). The first is to enable the iterative SCC passmanager juice that kicks in when the scc passmgr detects that a function pass has devirtualized a call. In this case, it will rerun all the passes it manages on the SCC, up to the iteration count limit (4). This is useful because a function pass may devirualize a call, and we want the inliner to inline it, or pruneeh to infer stuff about it, etc. The second patch is to add *all* call sites to the DevirtualizedCalls list the inliner uses. This list is about to get renamed, but the jist of this is that the inliner now reconsiders *all* inlined call sites as candidates for further inlining. The intuition is this that in cases like this: f() { g(1); } g(int x) { h(x); } We analyze this bottom up, and may decide that it isn't profitable to inline H into G. Next step, we decide that it is profitable to inline G into F, and do so, which means that F now calls H. Even though the call from G -> H may not have been profitable to inline, the call from F -> H may be (in this case because a constant allows folding etc). In my spot checks, this doesn't have a big impact on code. For example, the LLC output for 252.eon grew from 0.02% (from 317252 to 317308) and 176.gcc actually shrunk by .3% (from 1525612 to 1520964 bytes). 252.eon never iterated in the SCC Passmgr, 176.gcc iterated at most 1 time. llvm-svn: 102823
-
Chris Lattner authored
that appear due to inlining a callee as candidates for futher inlining, but a recent patch made it do this if those call sites were indirect and became direct. Unfortunately, in bizarre cases (see testcase) doing this can cause us to infinitely inline mutually recursive functions into callers not in the cycle. Fix this by keeping track of the inline history from which callsite inline candidates got inlined from. This shouldn't affect any "real world" code, but is required for a follow on patch that is coming up next. llvm-svn: 102822
-
Dan Gohman authored
try to put a kill flag on a DBG_INFO instruction. llvm-svn: 102820
-
Dale Johannesen authored
Seen in SingleSrc/Benchmarks/Misc/flops with TEST=optllcdbg. 7929951. llvm-svn: 102819
-
John McCall authored
already knows what context it's looking in. Just pass that context in instead of (questionably) recalculating it. llvm-svn: 102818
-
Dan Gohman authored
llvm-svn: 102817
-
Dan Gohman authored
modified. llvm-svn: 102816
-
Evan Cheng authored
sub-register indices and outputs a single super register which is formed from a consecutive sequence of registers. This is used as register allocation / coalescing aid and it is useful to represent instructions that output register pairs / quads. For example, v1024, v1025 = vload <address> where v1024 and v1025 forms a register pair. This really should be modelled as v1024<3>, v1025<4> = vload <address> but it would violate SSA property before register allocation is done. Currently we use insert_subreg to form the super register: v1026 = implicit_def v1027 - insert_subreg v1026, v1024, 3 v1028 = insert_subreg v1027, v1025, 4 ... = use v1024 = use v1028 But this adds pseudo live interval overlap between v1024 and v1025. We can now modeled it as v1024, v1025 = vload <address> v1026 = REG_SEQUENCE v1024, 3, v1025, 4 ... = use v1024 = use v1026 After coalescing, it will be v1026<3>, v1025<4> = vload <address> ... = use v1026<3> = use v1026 llvm-svn: 102815
-
Dan Gohman authored
code, and to eliminate the need for the SelectionDAGBuilder state to be live during CodeGenAndEmitDAG calls. Call SDB->clear() before CodeGenAndEmitDAG calls instead of before it, and move the CurDAG->clear() out of SelectionDAGBuilder, which doesn't own the DAG, and into CodeGenAndEmitDAG. llvm-svn: 102814
-
Bill Wendling authored
llvm-svn: 102812
-
Daniel Dunbar authored
llvm-svn: 102811
-
Dan Gohman authored
llvm-svn: 102810
-
Dan Gohman authored
changes before doing phi lowering for switches. llvm-svn: 102809
-
Daniel Dunbar authored
llvm-svn: 102803
-
Bill Wendling authored
llvm-svn: 102802
-
Bill Wendling authored
llvm-svn: 102800
-
Dan Gohman authored
llvm-svn: 102799
-
Chris Lattner authored
were still inlining self-recursive functions into other functions. Inlining a recursive function into itself has the potential to reduce recursion depth by a factor of 2, inlining a recursive function into something else reduces recursion depth by exactly 1. Since inlining a recursive function into something else is a weird form of loop peeling, turn this off. The deleted testcase was added by Dale in r62107, since then we're leaning towards not inlining recursive stuff ever. In any case, if we like inlining recursive stuff, it should be done within the recursive function itself to get the algorithm recursion depth win. llvm-svn: 102798
-
Ted Kremenek authored
more resilient to bad code. llvm-svn: 102793
-
Bill Wendling authored
indexes could be of a different value type. Or not even using the same SDNode for the constant (weird, I know). Compare the actual values instead of the pointers. llvm-svn: 102791
-
Daniel Dunbar authored
llvm-svn: 102781
-
- Apr 30, 2010
-
-
Daniel Dunbar authored
(C) API, and will likely grow further in this direction in the future. llvm-svn: 102779
-
Ted Kremenek authored
fatal error has occurred. llvm-svn: 102778
-
Douglas Gregor authored
parameter with pointer-to-member type, we may have to perform a qualification conversion, since the pointee type of the parameter might be more qualified than the pointee type of the argument we form from the declaration. Fixes PR6986. llvm-svn: 102777
-
John McCall authored
access. Fixes an assertion. Fixes rdar://problem/7927811. Too lazy to reduce a test case. llvm-svn: 102776
-
Dan Gohman authored
instruction selection is done; it's confusing to see parts of it printed, while other parts are omitted, along the way. llvm-svn: 102771
-
Jakob Stoklund Olesen authored
call that might throw. The landing pad assumes that all registers are in stack slots. We used to spill those dirty CSRs after the call, and the stack slots would be wrong when arriving at the landing pad. llvm-svn: 102770
-
Dan Gohman authored
and fix a bug in BitVector's reference proxy class which this exposed. llvm-svn: 102768
-
Daniel Dunbar authored
(and wrong). llvm-svn: 102763
-
Douglas Gregor authored
constant expression in C. llvm-svn: 102762
-
Devang Patel authored
Radar 7927803 llvm-svn: 102760
-
Dan Gohman authored
on the original variables, so it's easier to see what is being done to which blocks. llvm-svn: 102759
-
Daniel Dunbar authored
llvm-svn: 102752
-
Daniel Dunbar authored
llvm-svn: 102751
-
Douglas Gregor authored
llvm-svn: 102748
-
Anders Carlsson authored
llvm-svn: 102747
-
Devang Patel authored
llvm-svn: 102746
-
Devang Patel authored
llvm-svn: 102743
-
Dan Gohman authored
llvm-svn: 102742
-