aboutsummaryrefslogtreecommitdiff
path: root/llvm/lib/Analysis/AliasSetTracker.cpp
AgeCommit message (Collapse)AuthorFilesLines
2014-11-19AliasSet: Simplify mergeSetInDavid Majnemer1-4/+3
No functional change intended. llvm-svn: 222376
2014-11-19AliasSetTracker: UnknownInsts should contribute to the refcountDavid Majnemer1-15/+26
AliasSetTracker::addUnknown may create an AliasSet devoid of pointers just to contain an instruction if no suitable AliasSet already exists. It will then AliasSet::addUnknownInst and we will be done. However, it's possible for addUnknown to choose an existing AliasSet to addUnknownInst. If this were to occur, we are in a bit of a pickle: removing pointers from the AliasSet can cause the entire AliasSet to become destroyed, taking our unknown instructions out with them. Instead, keep track whether or not our AliasSet has any unknown instructions. This fixes PR21582. llvm-svn: 222338
2014-11-03Use AA in LoadCombineHal Finkel1-1/+6
LoadCombine can be smarter about aborting when a writing instruction is encountered, instead of aborting upon encountering any writing instruction, use an AliasSetTracker, and only abort when encountering some write that might alias with the loads that could potentially be combined. This was originally motivated by comments made (and a test case provided) by David Majnemer in response to PR21448. It turned out that LoadCombine was not responsible for that PR, but LoadCombine should also be improved so that unrelated stores (and @llvm.assume) don't interrupt load combining. llvm-svn: 221203
2014-07-24AA metadata refactoring (introduce AAMDNodes)Hal Finkel1-41/+57
In order to enable the preservation of noalias function parameter information after inlining, and the representation of block-level __restrict__ pointer information (etc.), additional kinds of aliasing metadata will be introduced. This metadata needs to be carried around in AliasAnalysis::Location objects (and MMOs at the SDAG level), and so we need to generalize the current scheme (which is hard-coded to just one TBAA MDNode*). This commit introduces only the necessary refactoring to allow for the introduction of other aliasing metadata types, but does not actually introduce any (that will come in a follow-up commit). What it does introduce is a new AAMDNodes structure to hold all of the aliasing metadata nodes associated with a particular memory-accessing instruction, and uses that structure instead of the raw MDNode* in AliasAnalysis::Location, etc. No functionality change intended. llvm-svn: 213859
2014-04-15[C++11] More 'nullptr' conversion. In some cases just using a boolean check ↵Craig Topper1-9/+9
instead of comparing to nullptr. llvm-svn: 206243
2014-03-05[C++11] Add 'override' keyword to virtual methods that override their base ↵Craig Topper1-2/+2
class. llvm-svn: 202945
2014-03-04[Modules] Move InstIterator out of the Support library, where it had noChandler Carruth1-1/+1
business. This header includes Function and BasicBlock and directly uses the interfaces of both classes. It has to do with the IR, it even has that in the name. =] Put it in the library it belongs to. This is one step toward making LLVM's Support library survive a C++ modules bootstrap. llvm-svn: 202814
2014-01-09Put the functionality for printing a value to a raw_ostream as anChandler Carruth1-3/+2
operand into the Value interface just like the core print method is. That gives a more conistent organization to the IR printing interfaces -- they are all attached to the IR objects themselves. Also, update all the users. This removes the 'Writer.h' header which contained only a single function declaration. llvm-svn: 198836
2014-01-07Move the LLVM IR asm writer header files into the IR directory, as theyChandler Carruth1-1/+1
are part of the core IR library in order to support dumping and other basic functionality. Rename the 'Assembly' include directory to 'AsmParser' to match the library name and the only functionality left their -- printing has been in the core IR library for quite some time. Update all of the #includes to match. All of this started because I wanted to have the layering in good shape before I started adding support for printing LLVM IR using the new pass infrastructure, and commandline support for the new pass infrastructure. llvm-svn: 198688
2013-09-12In AliasSetTracker, do not change the alias set to "mod/ref" when addingKrzysztof Parzyszek1-2/+0
a volatile load, or a volatile store. llvm-svn: 190631
2013-01-02Move all of the header files which are involved in modelling the LLVM IRChandler Carruth1-5/+5
into their new header subdirectory: include/llvm/IR. This matches the directory structure of lib, and begins to correct a long standing point of file layout clutter in LLVM. There are still more header files to move here, but I wanted to handle them in separate commits to make tracking what files make sense at each layer easier. The only really questionable files here are the target intrinsic tablegen files. But that's a battle I'd rather not fight today. I've updated both CMake and Makefile build systems (I think, and my tests think, but I may have missed something). I've also re-sorted the includes throughout the project. I'll be committing updates to Clang, DragonEgg, and Polly momentarily. llvm-svn: 171366
2012-12-03Use the new script to sort the includes of every file under lib.Chandler Carruth1-3/+3
Sooooo many of these had incorrect or strange main module includes. I have manually inspected all of these, and fixed the main module include to be the nearest plausible thing I could find. If you own or care about any of these source files, I encourage you to take some time and check that these edits were sensible. I can't have broken anything (I strictly added headers, and reordered them, never removed), but they may not be the headers you'd really like to identify as containing the API being implemented. Many forward declarations and missing includes were added to a header files to allow them to parse cleanly when included first. The main module rule does in fact have its merits. =] llvm-svn: 169131
2012-10-08Move TargetData to DataLayout.Micah Villmow1-1/+1
llvm-svn: 165402
2012-09-12Release build: guard dump functions withManman Ren1-1/+1
"#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)" No functional change. Update r163344. llvm-svn: 163679
2012-09-06Release build: guard dump functions with "ifndef NDEBUG"Manman Ren1-0/+2
No functional change. llvm-svn: 163344
2012-09-05Stop casting away const qualifier needlessly.Roman Divacky1-1/+1
llvm-svn: 163258
2012-06-30Reduce use list thrashing by using DenseMap's find_as for maps with ↵Benjamin Kramer1-3/+3
ValueHandle keys. No functionality change. llvm-svn: 159497
2012-02-10Have AliasSet::aliasesUnknownInst use pointer TBAA info when availableHal Finkel1-1/+3
llvm-svn: 150249
2011-08-15Atomic load/store support in LICM.Eli Friedman1-4/+8
llvm-svn: 137648
2011-07-27Minor simplification.Eli Friedman1-2/+2
llvm-svn: 136202
2011-07-27Fix AliasSetTracker so that it doesn't make any assumptions about ↵Eli Friedman1-51/+46
instructions it doesn't know about (like the atomic instructions I'm adding). llvm-svn: 136198
2011-04-09PR9604; try to deal with RAUW updates correctly in the AST. I'm not convincedEli Friedman1-0/+4
it's completely safe to cache the AST across LICM runs even with this fix, but this fix can't hurt. llvm-svn: 129198
2010-12-10Update this code to handle PartialAlias as MayAlias.Dan Gohman1-1/+1
llvm-svn: 121508
2010-11-11Don't forget the TBAA info, if available.Dan Gohman1-1/+6
llvm-svn: 118842
2010-11-09Teach LICM and AliasSetTracker about AccessesArgumentsReadonly.Dan Gohman1-1/+1
llvm-svn: 118618
2010-10-19Reapply r116831 and r116839, converting AliasAnalysis to useDan Gohman1-9/+9
uint64_t, plus fixes for places I missed before. llvm-svn: 116875
2010-10-19Revert r116831 and r116839, which are breaking selfhost builds.Dan Gohman1-9/+9
llvm-svn: 116858
2010-10-19Change AliasAnalysis and its clients to use uint64_t instead of unsignedDan Gohman1-9/+9
for representing object sizes, for consistency with other parts of LLVM. llvm-svn: 116831
2010-10-19Get rid of static constructors for pass registration. Instead, every pass ↵Owen Anderson1-1/+3
exposes an initializeMyPassFunction(), which must be called in the pass's constructor. This function uses static dependency declarations to recursively initialize the pass's dependencies. Clients that only create passes through the createFooPass() APIs will require no changes. Clients that want to use the CommandLine options for passes will need to manually call the appropriate initialization functions in PassInitialization.h before parsing commandline arguments. I have tested this with all standard configurations of clang and llvm-gcc on Darwin. It is possible that there are problems with the static dependencies that will only be visible with non-standard options. If you encounter any crash in pass registration/creation, please send the testcase to me directly. llvm-svn: 116820
2010-10-18Make the representation of AliasSets explicitly differentiateDan Gohman1-2/+2
between "not known yet" and "known no tbaa info" so that it can merge them properly. llvm-svn: 116767
2010-10-18Don't pass the raw invalid pointer used to represent conflictingDan Gohman1-3/+5
TBAA information to AliasAnalysis. llvm-svn: 116751
2010-10-18Make AliasSetTracker TBAA-aware, enabling TBAA-enabled LICM.Dan Gohman1-24/+49
llvm-svn: 116743
2010-10-12Begin adding static dependence information to passes, which will allow us toOwen Anderson1-1/+4
perform initialization without static constructors AND without explicit initialization by the client. For the moment, passes are required to initialize both their (potential) dependencies and any passes they preserve. I hope to be able to relax the latter requirement in the future. llvm-svn: 116334
2010-10-07Now with fewer extraneous semicolons!Owen Anderson1-1/+1
llvm-svn: 115996
2010-08-30Don't print two "0x" prefixes. Use a raw_ostream overload instead of ↵Benjamin Kramer1-2/+1
llvm::format. llvm-svn: 112479
2010-08-29two changes: 1) make AliasSet hold the list of call sites with anChris Lattner1-14/+20
assertingvh so we get a violent explosion if the pointer dangles. 2) Fix AliasSetTracker::deleteValue to remove call sites with by-pointer comparisons instead of by-alias queries. Using findAliasSetForCallSite can cause alias sets to get merged when they shouldn't, and can also miss alias sets when the call is readonly. #2 fixes PR6889, which only repros with a .c file :( llvm-svn: 112452
2010-08-29when merging two alias sets, the result set is volatile if eitherChris Lattner1-0/+1
of the sets is volatile. We were dropping the volatile bit of the merged in set, leading (luckily) to assertions in cases like PR7535. I cannot produce a testcase that repros with opt, but this is obviously correct. llvm-svn: 112402
2010-08-29more cleanupChris Lattner1-8/+8
llvm-svn: 112401
2010-08-29clean this upChris Lattner1-51/+53
llvm-svn: 112400
2010-08-06Reapply r110396, with fixes to appease the Linux buildbot gods.Owen Anderson1-1/+1
llvm-svn: 110460
2010-08-06Revert r110396 to fix buildbots.Owen Anderson1-1/+1
llvm-svn: 110410
2010-08-05Don't use PassInfo* as a type identifier for passes. Instead, use the ↵Owen Anderson1-1/+1
address of the static ID member as the sole unique type identifier. Clean up APIs related to this change. llvm-svn: 110396
2010-08-03Thread const correctness through a bunch of AliasAnalysis interfaces andDan Gohman1-1/+1
eliminate several const_casts. Make CallSite implicitly convertible to ImmutableCallSite. Rename the getModRefBehavior for intrinsic IDs to getIntrinsicModRefBehavior to avoid overload ambiguity with CallSite, which happens to be implicitly convertible to bool. llvm-svn: 110155
2010-07-28simplifyGabor Greif1-2/+1
llvm-svn: 109577
2010-07-21Fix batch of converting RegisterPass<> to INTIALIZE_PASS().Owen Anderson1-2/+2
llvm-svn: 109045
2009-12-23Change dbgs() back to errs() as Chris requested.David Greene1-1/+1
llvm-svn: 92073
2009-12-23Convert debug messages to use dbgs(). Generally this meansDavid Greene1-3/+4
s/errs/dbgs/g except for certain special cases. llvm-svn: 92029
2009-11-22Remove the AliasAnalysis::getMustAliases method, which is dead.Chris Lattner1-6/+0
The hasNoModRefInfoForCalls isn't worth it as a filter because basicaa provides m/r info and everything chains to it, so remove it. llvm-svn: 89599
2009-11-03remove unneeded checks of isFreeCallChris Lattner1-16/+0
llvm-svn: 85866
2009-10-27Rename MallocFreeHelper as MemoryBuiltinsVictor Hernandez1-1/+1
llvm-svn: 85286