| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
| |
that these passes are properly preserved.
Fix several transformation passes that claimed to preserve LoopSimplify
form but weren't.
llvm-svn: 80926
|
| |
|
|
|
|
|
|
| |
instead of a bool argument, and to do the dominator check itself.
This makes it eaiser to use when DominatorTree information is
available.
llvm-svn: 80920
|
| |
|
|
|
|
| |
memcpy calls.
llvm-svn: 80915
|
| |
|
|
|
|
|
| |
Removed inverted flag form MaximumSpanningTree, also do not handle so much
information to MaximumSpanningTree.
llvm-svn: 80911
|
| |
|
|
| |
llvm-svn: 80903
|
| |
|
|
|
|
|
|
|
|
| |
simplifylibcalls optimization is thus valid for C++ but not C.
It's not important enough to worry about for C++ apps, so just
remove it.
rdar://7191924
llvm-svn: 80887
|
| |
|
|
|
|
| |
buildbot's stage 2 configure
llvm-svn: 80871
|
| |
|
|
|
|
| |
this time. I'll back out if needed...
llvm-svn: 80858
|
| |
|
|
|
|
| |
(See http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090824/085890.html)
llvm-svn: 80789
|
| |
|
|
|
|
| |
be instrumented.
llvm-svn: 80788
|
| |
|
|
| |
llvm-svn: 80781
|
| |
|
|
|
|
| |
the instruction BBI points to.
llvm-svn: 80768
|
| |
|
|
| |
llvm-svn: 80767
|
| |
|
|
| |
llvm-svn: 80766
|
| |
|
|
|
|
| |
return a vector of i1, not i1 itself.
llvm-svn: 80761
|
| |
|
|
|
|
| |
This adds the instrumentation and runtime part of OptimalEdgeProfiling.
llvm-svn: 80712
|
| |
|
|
| |
llvm-svn: 80708
|
| |
|
|
| |
llvm-svn: 80706
|
| |
|
|
|
|
| |
callgraph. This is now dead because RAUW does the job.
llvm-svn: 80703
|
| |
|
|
|
|
|
| |
don't alias. Remove an old and poorly reduced testcase that fails
with this transform for reasons unrelated to the original test.
llvm-svn: 80693
|
| |
|
|
| |
llvm-svn: 80682
|
| |
|
|
| |
llvm-svn: 80680
|
| |
|
|
|
|
|
| |
Add statistics for regular edge profiling, this enables the comparation of the
number of edges inserted by regular and optimal edge profiling.
llvm-svn: 80668
|
| |
|
|
|
|
|
|
|
|
|
|
| |
for sanity. This didn't turn up any bugs.
Change CallGraphNode to maintain its "callsite" information in the
call edges list as a WeakVH instead of as an instruction*. This fixes
a broad class of dangling pointer bugs, and makes CallGraph have a number
of useful invariants again. This fixes the class of problem indicated
by PR4029 and PR3601.
llvm-svn: 80663
|
| |
|
|
|
|
| |
from runOnFunction
llvm-svn: 80562
|
| |
|
|
| |
llvm-svn: 80540
|
| |
|
|
| |
llvm-svn: 80539
|
| |
|
|
|
|
| |
instcombine is changing stuff.
llvm-svn: 80538
|
| |
|
|
|
|
|
|
| |
changes: SimplifyDemandedBits can't use the builder yet because it
has the wrong insertion point. This fixes a crash building
MultiSource/Benchmarks/PAQ8p
llvm-svn: 80537
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
instead of CallGraphNode*'s. This also papers over a callgraph
problem where a pass (in this case, MemCpyOpt) introduces a new
function into the module (llvm.memset.i64) but doesn't add it to
the call graph (nor should it, since it is a function pass).
While it might be a good idea for MemCpyOpt to not synthesize
functions in a runOnFunction(), there is no need for FunctionAttrs
to be boneheaded, so fix it there. This fixes an assertion building
176.gcc.
llvm-svn: 80535
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
indirect function pointer, inline it, then go to delete the body.
The problem is that the callgraph had other references to the function,
though the inliner had no way to know it, so we got a dangling pointer
and an invalid iterator out of the deal.
The fix to this is pretty simple: stop the inliner from deleting the
function by knowing that there are references to it. Do this by making
CallGraphNodes contain a refcount. This requires moving deletion of
available_externally functions to the module-level cleanup sweep where
it belongs.
llvm-svn: 80533
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
argpromotion and structretpromote. Basically, when replacing
a function, they used the 'changeFunction' api which changes
the entry in the function map (and steals/reuses the callgraph
node).
This has some interesting effects: first, the problem is that it doesn't
update the "callee" edges in any callees of the function in the call graph.
Second, this covers for a major problem in all the CGSCC pass stuff, which
is that it is completely broken when functions are deleted if they *don't*
reuse a CGN. (there is a cute little fixme about this though :).
This patch changes the protocol that CGSCC passes must obey: now the CGSCC
pass manager copies the SCC and preincrements its iterator to avoid passes
invalidating it. This allows CGSCC passes to mutate the current SCC. However
multiple passes may be run on that SCC, so if passes do this, they are now
required to *update* the SCC to be current when they return.
Other less interesting parts of this patch are that it makes passes update
the CG more directly, eliminates changeFunction, and requires clients of
replaceCallSite to specify the new callee CGN if they are changing it.
llvm-svn: 80527
|
| |
|
|
|
|
|
|
|
| |
is itself a bitcast. Since we have gep(bitcast(bitcast(y))) in this
case, just wait for the two bitcasts to get zapped. This prevents
instcombine from confusing some aliasing stuff, and allows it to
directly eliminate the load in the testcase.
llvm-svn: 80508
|
| |
|
|
| |
llvm-svn: 80507
|
| |
|
|
|
|
| |
in a few scalar xforms to simplify things.
llvm-svn: 80506
|
| |
|
|
| |
llvm-svn: 80505
|
| |
|
|
| |
llvm-svn: 80504
|
| |
|
|
|
|
| |
the new Instcombine builder.
llvm-svn: 80501
|
| |
|
|
| |
llvm-svn: 80500
|
| |
|
|
|
|
|
|
|
|
| |
workslist and is set to insert new instructions before the current one.
Convert a bunch of stuff that used to call InsertNewInstBefore over to
use it, greatly simplifying code and making it more natural.
There is still a lot more to go, but this is a good start.
llvm-svn: 80492
|
| |
|
|
|
|
|
|
|
| |
if the operand is not an instruction.
Simplify most uses of AddOperandsToWorkList to use AddValue and
inline it into the one remaining callsite.
llvm-svn: 80488
|
| |
|
|
|
|
| |
argument stronger typed.
llvm-svn: 80487
|
| |
|
|
|
|
|
|
|
|
| |
former looks too much like AddUsersToWorkList and keeps
confusing me.
Remove AddSoonDeadInstToWorklist and change its two callers
to do the same thing in a simpler way.
llvm-svn: 80486
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
into their callers. simplify ReplaceInstUsesWith. Make
EraseInstFromFunction only add operands to the worklist if
there aren't too many of them (this was a scalability win
for crazy programs that was only infrequently enforced).
Switch more code to using EraseInstFromFunction instead of
duplicating it inline. Change some fcmp/icmp optimizations
to modify fcmp/icmp in place instead of creating a new one
and deleting the old one just to change the predicate.
llvm-svn: 80483
|
| |
|
|
| |
llvm-svn: 80482
|
| |
|
|
| |
llvm-svn: 80481
|
| |
|
|
|
|
| |
other places.
llvm-svn: 80478
|
| |
|
|
| |
llvm-svn: 80477
|
| |
|
|
| |
llvm-svn: 80476
|
| |
|
|
|
|
|
|
|
| |
does constant folding of gep's: this is already handled in
a more general way.
No functionality change.
llvm-svn: 80475
|