Benjamin Kramer
a30b181c20
Add a virtual destructor and give vtable a home.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98376 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-12 20:41:29 +00:00
Benjamin Kramer
0b6cb50738
Factor checked library call optimization into a common helper class and use it
...
to unify the almost identical code in CodeGenPrepare and InstCombineCalls.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98338 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-12 09:27:41 +00:00
Benjamin Kramer
7fa30b8e5d
stpcpy is so similar to strcpy, it doesn't deserve a complete copy of the __strcpy_chk -> strcpy code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98284 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-11 20:45:13 +00:00
Eric Christopher
19888ca8b4
Lower stpcpy_chk when possible.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98274 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-11 19:24:34 +00:00
Eric Christopher
bd97376200
Add strncpy libcall creator. Use it when it should be used.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98219 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-11 01:25:07 +00:00
Eric Christopher
b6174e3605
Move SimplifyLibCalls's LibCall builders to a separate file so they
...
can be used in more places. Add an argument for the TargetData that
most of them need. Update for the getInt8PtrTy() change. Should be
no functionality change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@97844 91177308-0d34-0410-b5e6-96231b3b80d8
2010-03-05 22:25:30 +00:00
Bob Wilson
ae23daf63a
Rename SuccessorNumber to GetSuccessorNumber.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96387 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16 21:06:42 +00:00
Bob Wilson
adb6f22671
Refactor to share code to find the position of a basic block successor in the
...
terminator's list of successors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96377 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-16 19:49:17 +00:00
Jakob Stoklund Olesen
58e9ee85fd
Teach SimplifyCFG about magic pointer constants.
...
Weird code sometimes uses pointer constants other than null. This patch
teaches SimplifyCFG to build switch instructions in those cases.
Code like this:
void f(const char *x) {
if (!x)
puts("null");
else if ((uintptr_t)x == 1)
puts("one");
else if (x == (char*)2 || x == (char*)3)
puts("two");
else if ((intptr_t)x == 4)
puts("four");
else
puts(x);
}
Now becomes a switch:
define void @f(i8* %x) nounwind ssp {
entry:
%magicptr23 = ptrtoint i8* %x to i64 ; <i64> [#uses=1]
switch i64 %magicptr23, label %if.else16 [
i64 0, label %if.then
i64 1, label %if.then2
i64 2, label %if.then9
i64 3, label %if.then9
i64 4, label %if.then14
]
Note that LLVM's own DenseMap uses magic pointers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@95439 91177308-0d34-0410-b5e6-96231b3b80d8
2010-02-05 22:03:18 +00:00
Bob Wilson
49db68fba0
Check alignment of loads when deciding whether it is safe to execute them
...
unconditionally. Besides checking the offset, also check that the underlying
object is aligned as much as the load itself.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94875 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-30 04:42:39 +00:00
Bob Wilson
3eb4f7e2dd
Improve isSafeToLoadUnconditionally to recognize that GEPs with constant
...
indices are safe if the result is known to be within the bounds of the
underlying object.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94829 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-29 19:19:08 +00:00
Benjamin Kramer
5deb57c685
Don't bother with sprintf, just pass the Twine through.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94684 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-27 19:58:47 +00:00
Victor Hernandez
6c146eefbf
DbgInfoIntrinsics no longer appear in an instruction's use list; so clean up looking for them in use iterations and remove OnlyUsedByDbgInfoIntrinsics()
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94111 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-21 23:05:53 +00:00
Chris Lattner
e234a30a28
add a helper function.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@93251 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-12 19:40:54 +00:00
Dan Gohman
90fe0bd68c
Make RecursivelyDeleteTriviallyDeadInstructions,
...
RecursivelyDeleteDeadPHINode, and DeleteDeadPHIs return a flag
indicating whether they made any changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92732 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-05 15:45:31 +00:00
Chris Lattner
43fd9017a6
convert various IntrinsicInst's to use class instead of struct.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92681 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-05 05:21:26 +00:00
Devang Patel
44a29e066a
Remove dead debug info intrinsics.
...
Intrinsic::dbg_stoppoint
Intrinsic::dbg_region_start
Intrinsic::dbg_region_end
Intrinsic::dbg_func_start
AutoUpgrade simply ignores these intrinsics now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@92557 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-05 01:10:40 +00:00
Chris Lattner
a25bc44663
comment fix: weakvh -> tracking vh
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91867 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-22 00:51:57 +00:00
Dan Gohman
43ea505fb0
Eliminate unnecessary LLVMContexts.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91729 91177308-0d34-0410-b5e6-96231b3b80d8
2009-12-18 23:42:08 +00:00
Nick Lewycky
ce2c51b670
Pull LLVMContext out of PromoteMemToReg.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89645 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-23 03:50:44 +00:00
Jim Grosbach
20f4d34fe3
Make EliminateDuplicatePHINodes() available as a utility function
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@89297 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-19 02:02:10 +00:00
Devang Patel
53bb5c95af
Implement support to debug inlined functions.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86748 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10 23:06:00 +00:00
Chris Lattner
40d8c28b27
move some generally useful functions out of jump threading
...
into libanalysis and transformutils.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86735 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10 22:26:15 +00:00
Chris Lattner
dce94d92df
refactor TryToSimplifyUncondBranchFromEmptyBlock out of SimplifyCFG.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86666 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-10 05:59:26 +00:00
Douglas Gregor
0c8ae782cb
Make a few more LLVM headers parsable as standalone headers.
...
Fix some problems with the hidden copy constructors for
ImmutableMap/ImmutableSet found by Clang++.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86186 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-05 23:01:30 +00:00
Duncan Sands
857e9996c7
Improve the other instance of the comment.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85733 91177308-0d34-0410-b5e6-96231b3b80d8
2009-11-01 19:16:21 +00:00
Chris Lattner
1b98ff3e4f
update the comment above llvm::SplitCriticalEdge, and make
...
it abort on IndirectBrInst as describe in the comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85688 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31 21:51:10 +00:00
Dan Gohman
438b583dbd
Revert r85667. LoopUnroll currently can't call utility functions which
...
auto-update the DominatorTree because it doesn't keep the DominatorTree
current while it works.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85670 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31 17:33:01 +00:00
Dan Gohman
f230d8ad15
Merge the enhancements from LoopUnroll's FoldBlockIntoPredecessor into
...
MergeBlockIntoPredecessor. This makes SimplifyCFG slightly more aggressive,
and makes it unnecessary for LoopUnroll to have its own copy of this code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85667 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-31 16:08:00 +00:00
Dan Gohman
5fa75b0fa4
MapValue doesn't needs its LLVMContext argument.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85020 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-24 23:37:16 +00:00
Dan Gohman
bfd5e3d7b1
Add an explicit keyword.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@85009 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-24 19:56:23 +00:00
Duncan Sands
ed90342d8a
Strip trailing white space.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@84256 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-16 15:20:13 +00:00
Dan Gohman
e4aeec003f
Move the InlineCost code from Transforms/Utils to Analysis.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83998 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-13 18:30:07 +00:00
Dan Gohman
9b39cf5ac8
Start refactoring the inline cost estimation code so that it can be used
...
for purposes other than inlining.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83997 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-13 18:24:11 +00:00
Chris Lattner
0bef562ea2
add a simple helper method.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83745 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-10 23:41:48 +00:00
Chris Lattner
f5a1fb6b24
add ability for clients of SSAUpdater to find out about the
...
PHI nodes inserted.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83744 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-10 23:15:24 +00:00
Chris Lattner
1a8d4de397
add the ability to get a rewritten value from the middle of a block,
...
not just at the end. Add a big comment explaining when this could
be useful (which never happens for jump threading).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83741 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-10 23:00:11 +00:00
Chris Lattner
5fb107287f
rename GetValueInBlock -> GetValueAtEndOfBlock to better reflect
...
what it does.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83740 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-10 22:41:58 +00:00
Chris Lattner
93f3bcf7f3
Implement an efficient and fully general SSA update mechanism that
...
works on unstructured CFGs. This implements PR217, our oldest open PR.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83705 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-10 09:04:27 +00:00
Dale Johannesen
bdb984bc27
Use names instead of numbers for some of the magic
...
constants used in inlining heuristics (especially
those used in more than one file). No functional change.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83675 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-09 21:42:02 +00:00
Owen Anderson
08993acada
Do away with the strange use of BitVectors in SSI, and just use normal sets. This makes the code much more C++/LLVM-ish.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@83286 91177308-0d34-0410-b5e6-96231b3b80d8
2009-10-04 18:49:55 +00:00
Andreas Neustifter
ad80981a10
Preserve ProfileInfo during CodeGenPrepare.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82034 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-16 09:26:52 +00:00
Nick Lewycky
fd5249e15b
Correctly handle the case where a comparison is created in one BasicBlock and
...
used by a terminator in another.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81437 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-10 07:02:09 +00:00
Dan Gohman
5c89b5240c
Re-apply r80926, with fixes: keep the domtree informed of new blocks
...
that get created during loop unswitching, and fix SplitBlockPredecessors'
LCSSA updating code to create new PHIs instead of trying to just move
existing ones.
Also, optimize Loop::verifyLoop, since it gets called a lot. Use
searches on a sorted list of blocks instead of calling the "contains"
function, as is done in other places in the Loop class, since "contains"
does a linear search. Also, don't call verifyLoop from LoopSimplify or
LCSSA, as the PassManager is already calling verifyLoop as part of
LoopInfo's verifyAnalysis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81221 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-08 15:45:00 +00:00
Evan Cheng
8f78a58e14
Revert r80926. It causes loop unswitch assertion and slow down some JIT tests significantly.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@81101 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-06 02:26:10 +00:00
Dan Gohman
8fc5ad3369
Add a verifyAnalysis to LoopInfo, LoopSimplify, and LCSSA form that verify
...
that these passes are properly preserved.
Fix several transformation passes that claimed to preserve LoopSimplify
form but weren't.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80926 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-03 16:31:42 +00:00
Chris Lattner
12f0babca4
reduce header #include'age
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80204 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27 04:32:07 +00:00
Chris Lattner
8f2718fbef
enhance InlineFunction to be able to optionally return
...
a the list of static allocas that it inlined.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80203 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27 04:20:52 +00:00
Chris Lattner
ec1bea0d94
smallvectorize the list of returns built by CloneAndPruneFunctionInto.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80202 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27 04:02:30 +00:00
Chris Lattner
597ef10577
remove CloneTrace, which appears to be dead since 2004.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@80201 91177308-0d34-0410-b5e6-96231b3b80d8
2009-08-27 03:56:43 +00:00