summaryrefslogtreecommitdiffstats
path: root/llvm/lib/IR
Commit message (Collapse)AuthorAgeFilesLines
...
* Make DataLayout a plain object, not a pass.Rafael Espindola2014-02-251-24/+23
| | | | | | | Instead, have a DataLayoutPass that holds one. This will allow parts of LLVM don't don't handle passes to also use DataLayout. llvm-svn: 202168
* Replace the F_Binary flag with a F_Text one.Rafael Espindola2014-02-242-2/+2
| | | | | | | | | After this I will set the default back to F_None. The advantage is that before this patch forgetting to set F_Binary would corrupt a file on windows. Forgetting to set F_Text produces one that cannot be read in notepad, which is a better failure mode :-) llvm-svn: 202052
* Don't make F_None the default.Rafael Espindola2014-02-242-2/+2
| | | | | | This will make it easier to switch the default to being binary files. llvm-svn: 202042
* Switch the LLVM error reporting on the new diagnostic system.Quentin Colombet2014-02-221-18/+4
| | | | | | | | | | The LLVM diagnostic are now wired-up in clang (since r200931), thus the user experience will not be impacted by this change anymore. Related to <rdar://problem/15886697> llvm-svn: 201915
* Add back r201608, r201622, r201624 and r201625Rafael Espindola2014-02-191-6/+13
| | | | | | | | | | | | | | r201608 made llvm corretly handle private globals with MachO. r201622 fixed a bug in it and r201624 and r201625 were changes for using private linkage, assuming that llvm would do the right thing. They all got reverted because r201608 introduced a crash in LTO. This patch includes a fix for that. The issue was that TargetLoweringObjectFile now has to be initialized before we can mangle names of private globals. This is trivially true during the normal codegen pipeline (the asm printer does it), but LTO has to do it manually. llvm-svn: 201700
* Revert r201622 and r201608.Daniel Jasper2014-02-191-13/+6
| | | | | | | This causes the LLVMgold plugin to segfault. More information on the replies to r201608. llvm-svn: 201669
* Fix PR18743.Rafael Espindola2014-02-181-6/+13
| | | | | | | | | | | | | | | | | | | | | | | | The IR @foo = private constant i32 42 is valid, but before this patch we would produce an invalid MachO from it. It was invalid because it would use an L label in a section where the liker needs the labels in order to atomize it. One way of fixing it would be to just reject this IR in the backend, but that would not be very front end friendly. What this patch does is use an 'l' prefix in sections that we know the linker requires symbols for atomizing them. This allows frontends to just use private and not worry about which sections they go to or how the linker handles them. One small issue with this strategy is that now a symbol name depends on the section, which is not available before codegen. This is not a problem in practice. The reason is that it only happens with private linkage, which will be ignored by the non codegen users (llvm-nm and llvm-ar). llvm-svn: 201608
* Remove unnecessary typename.Rafael Espindola2014-02-161-6/+6
| | | | | | Thanks to Elena Demikhovsky for noticing. llvm-svn: 201494
* Add extern template instantiations of llvm::Calculate.Rafael Espindola2014-02-141-0/+10
| | | | | | | | | | | This should be a small build time improvement in general and fixes the build on OS X with -DBUILD_SHARED_LIBS=ON. The issue is that not all users are including GenericDomTreeConstruction.h, causing undefined references when ld64 managed to hide the linkonce_odr symbols. llvm-svn: 201440
* Check that GlobalAliases don't have section or alignment.Rafael Espindola2014-02-132-0/+4
| | | | | | | An alias is always in the section of its aliasee and has the same alignment (since it has the same address). llvm-svn: 201354
* Copy dll storage in copyAttributes.Rafael Espindola2014-02-131-0/+1
| | | | llvm-svn: 201295
* Mark the methods in the Mangler const.Rafael Espindola2014-02-101-5/+6
| | | | | | | | | A const ObjectFile needs to be able to provide its name. For an IRObjectFile, that means being able to call the mangler. Since each IRObjectFile can have a different mangling, it is natural for them to contain a Mangler which is therefore also const. llvm-svn: 201113
* Copy the ThreadLocalMode in GlobalVariable::copyAttributesFromHans Wennborg2014-02-101-1/+1
| | | | | | This fixes the oversight from r159077. llvm-svn: 201098
* Disable most IR-level transform passes on functions marked 'optnone'.Paul Robinson2014-02-061-0/+22
| | | | | | | | | Ideally only those transform passes that run at -O0 remain enabled, in reality we get as close as we reasonably can. Passes are responsible for disabling themselves, it's not the job of the pass manager to do it for them. llvm-svn: 200892
* [PM] Don't require analysis results to be const in the new pass manager.Chandler Carruth2014-02-051-4/+4
| | | | | | | | | | I think this was just over-eagerness on my part. The analysis results need to often be non-const because they need to (in some cases at least) be updated by the transformation pass in order to remain correct. It also makes lazy analyses (a common case) needlessly annoying to write in order to make their entire state mutable. llvm-svn: 200881
* Test commitAlon Mishne2014-02-051-1/+1
| | | | llvm-svn: 200843
* Fix wording of warning message about invalid debug info.Manman Ren2014-02-041-2/+2
| | | | llvm-svn: 200806
* llvm-cov: Fix include order in GCOV.cppJustin Bogner2014-02-041-3/+3
| | | | llvm-svn: 200796
* llvm-cov: Implement the preserve-paths flagJustin Bogner2014-02-041-10/+49
| | | | | | | | | | | | | | | | Until now, when a path in a gcno file included a directory, we would emit our .gcov file in that directory, whereas gcov always emits the file in the current directory. In doing so, this implements gcov's strange name-mangling -p flag, which is needed to avoid clobbering files when two with the same name exist in different directories. The path mangling is a bit ugly and only handles unix-like paths, but it's simple, and it doesn't make any guesses as to how it should behave outside of what gcov documents. If we decide this should be cross platform later, we can consider the compatibility implications then. llvm-svn: 200754
* DIBuilder: simplify array generation to produce true zero-length arraysDavid Blaikie2014-02-031-4/+0
| | | | | | | | | | | | For some anachronistic reason we were producing {i32 0} for zero-length debug info arrays. (this change is paired with a Clang change and may cause temporary buildbot noise) Let's not. llvm-svn: 200721
* Implement inalloca codegen for x86 with the new inalloca designReid Kleckner2014-01-311-2/+2
| | | | | | | | | | | | | | | | Calls with inalloca are lowered by skipping all stores for arguments passed in memory and the initial stack adjustment to allocate argument memory. Now the frontend is responsible for the memory layout, and the backend doesn't have to do any work. As a result these changes are pretty minimal. Reviewers: echristo Differential Revision: http://llvm-reviews.chandlerc.com/D2637 llvm-svn: 200596
* [ms-cxxabi] Add a new calling convention that swaps 'this' and 'sret'Reid Kleckner2014-01-311-0/+1
| | | | | | | | | | | | | | | | | | | | MSVC always places the 'this' parameter for a method first. The implicit 'sret' pointer for methods always comes second. We already implement this for __thiscall by putting sret parameters on the stack, but __cdecl methods require putting both parameters on the stack in opposite order. Using a special calling convention allows frontends to keep the sret parameter first, which avoids breaking lots of assumptions in LLVM and Clang. Fixes PR15768 with the corresponding change in Clang. Reviewers: ributzka, majnemer Differential Revision: http://llvm-reviews.chandlerc.com/D2663 llvm-svn: 200561
* Reland r200340 - 'Add line table debug info to COFF files when using a win32 ↵Timur Iskhodzhanov2014-01-301-0/+20
| | | | | | | | triple' This incorporates a couple of fixes reviewed at http://llvm-reviews.chandlerc.com/D2651 llvm-svn: 200440
* Revert r200340, "Add line table debug info to COFF files when using a win32 ↵NAKAMURA Takumi2014-01-291-20/+0
| | | | | | | | triple." It was incompatible with --target=i686-win32. llvm-svn: 200375
* Use a raw_stream to implement the mangler.Rafael Espindola2014-01-291-61/+73
| | | | | | | | | This is a bit more convenient for some callers, but more importantly, it is easier to implement correctly. Doing this removes the patching of already printed data that was used for fastcall, fixing a crash with private fastcall symbols. llvm-svn: 200367
* Add line table debug info to COFF files when using a win32 triple.Timur Iskhodzhanov2014-01-281-0/+20
| | | | | | Reviewed at http://llvm-reviews.chandlerc.com/D2232 llvm-svn: 200340
* Fix pr14893.Rafael Espindola2014-01-281-0/+45
| | | | | | | | | | | When simplifycfg moves an instruction, it must drop metadata it doesn't know is still valid with the preconditions changes. In particular, it must drop the range and tbaa metadata. The patch implements this with an utility function to drop all metadata not in a white list. llvm-svn: 200322
* Fix llvm-dis to print the inalloca bit on allocas.Reid Kleckner2014-01-251-0/+2
| | | | llvm-svn: 200059
* Bug 18228 - Fix accepting bitcasts between vectors of pointers with aMatt Arsenault2014-01-221-16/+41
| | | | | | | | | | | | | different number of elements. Bitcasts were passing with vectors of pointers with different number of elements since the number of elements was checking SrcTy->getVectorNumElements() == SrcTy->getVectorNumElements() which isn't helpful. The addrspacecast was also wrong, but that case at least is caught by the verifier. Refactor bitcast and addrspacecast handling in castIsValid to be more readable and fix this problem. llvm-svn: 199821
* [PM] Wire up the Verifier for the new pass manager and connect it to theChandler Carruth2014-01-202-10/+23
| | | | | | | | | | | | | | | | | | | | | | various opt verifier commandline options. Mostly mechanical wiring of the verifier to the new pass manager. Exercises one of the more unusual aspects of it -- a pass can be either a module or function pass interchangably. If this is ever problematic, we can make things more constrained, but for things like the verifier where there is an "obvious" applicability at both levels, it seems convenient. This is the next-to-last piece of basic functionality left to make the opt commandline driving of the new pass manager minimally functional for testing and further development. There is still a lot to be done there (notably the factoring into .def files to kill the current boilerplate code) but it is relatively uninteresting. The only interesting bit left for minimal functionality is supporting the registration of analyses. I'm planning on doing that on top of the .def file switch mostly because the boilerplate for the analyses would be significantly worse. llvm-svn: 199646
* [PM] Make the verifier work independently of any pass manager.Chandler Carruth2014-01-192-151/+150
| | | | | | | | | | | | | | | | | | | | | | | This makes the 'verifyFunction' and 'verifyModule' functions totally independent operations on the LLVM IR. It also cleans up their API a bit by lifting the abort behavior into their clients and just using an optional raw_ostream parameter to control printing. The implementation of the verifier is now just an InstVisitor with no multiple inheritance. It also is significantly more const-correct, and hides the const violations internally. The two layers that force us to break const correctness are building a DomTree and dispatching through the InstVisitor. A new VerifierPass is used to implement the legacy pass manager interface in terms of the other pieces. The error messages produced may be slightly different now, and we may have slightly different short circuiting behavior with different usage models of the verifier, but generally everything works equivalently and this unblocks wiring the verifier up to the new pass manager. llvm-svn: 199569
* Add a const lookup routine to get a BlockAddress constant if there isChandler Carruth2014-01-192-2/+13
| | | | | | | | one, but not create one. This is useful in the verifier when we want to query the constant if it exists but not create one. To be used in an upcoming commit. llvm-svn: 199568
* Support AddrSpaceCast in ConstantExpr::getAsInstruction.Eli Bendersky2014-01-181-0/+1
| | | | | | | It's handled similarly to the other casts. CastInst::Create already knows how to handle it. llvm-svn: 199565
* Upgrade ConstantFP's negative zero and infinity getters to handle vector types.Benjamin Kramer2014-01-181-16/+18
| | | | | | Will be used soon. llvm-svn: 199552
* Add an inalloca flag to allocasReid Kleckner2014-01-172-2/+10
| | | | | | | | | | | | | | | | Summary: The only current use of this flag is to mark the alloca as dynamic, even if its in the entry block. The stack adjustment for the alloca can never be folded into the prologue because the call may clear it and it has to be allocated at the top of the stack. Reviewers: majnemer CC: llvm-commits Differential Revision: http://llvm-reviews.chandlerc.com/D2571 llvm-svn: 199525
* Add two new calling conventions for runtime callsJuergen Ributzka2014-01-171-0/+2
| | | | | | | | | | | | | | This patch adds two new target-independent calling conventions for runtime calls - PreserveMost and PreserveAll. The target-specific implementation for X86-64 is defined as following: - Arguments are passed as for the default C calling convention - The same applies for the return value(s) - PreserveMost preserves all GPRs - except R11 - PreserveAll preserves all GPRs and all XMMs/YMMs - except R11 Reviewed by Lang and Philip llvm-svn: 199508
* [PM] [cleanup] Rename some of the Verifier's members, re-arrange them,Chandler Carruth2014-01-171-273/+269
| | | | | | | | | | | and tweak comments prior to more invasive surgery. Also clean up some other non-doxygen comments, and run clang-format over the parts that are going to change dramatically in subsequent commits so that those don't get cluttered with formatting changes. No functionality changed. llvm-svn: 199489
* [PM] Remove the preverifier and directly compute the DominatorTree forChandler Carruth2014-01-172-54/+27
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | the verifier after ensuring the CFG is at least usefully formed. This fixes a number of problems: 1) The PreVerifier was missing the controls the Verifier provides over *how* an invalid module is handled -- it just aborted the program! Now it uses the same logic as the Verifier which is significantly more library-friendly. 2) The DominatorTree used previously could have been cached and not updated due to bugs in prior passes and we would silently use the stale tree. This could cause dominance errors to not be as quickly diagnosed. 3) We can now (in the next patch) pull the functionality of the verifier apart from the pass infrastructure so that you can verify IR without having any form of pass manager. This in turn frees the code to share logic between old and new pass manager variants. Along the way I fixed at least one annoying bug -- the state for 'Broken' wasn't being cleared from run to run causing all functions visited after the first broken function to be marked as broken regardless of whether *they* were a problem. Fortunately, I don't really know much of a way to observe this peculiarity. In case folks are worried about the runtime cost, its negligible. I looked at running the entire regression test suite (which should be a relatively good use of the verifier) before and after but was unable to even measure the time spent on the verifier and there was no regresion from before to after. I checked both with debug builds and optimized builds. llvm-svn: 199487
* Change inalloca rules to make it only apply to the last parameterReid Kleckner2014-01-161-24/+9
| | | | | | | | | | | This makes things a lot easier, because we can now talk about the "argument allocation", which allocates all the memory for the call in one shot. The only functional change is to the verifier for a feature that hasn't shipped yet. llvm-svn: 199434
* [opt][PassInfo] Allow opt to run passes that need target machine.Quentin Colombet2014-01-161-0/+2
| | | | | | | | | | | | | | | | | | When registering a pass, a pass can now specify a second construct that takes as argument a pointer to TargetMachine. The PassInfo class has been updated to reflect that possibility. If such a constructor exists opt will use it instead of the default constructor when instantiating the pass. Since such IR passes are supposed to be rare, no specific support has been added to this commit to allow an easy registration of such a pass. In other words, for such pass, the initialization function has to be hand-written (see CodeGenPrepare for instance). Now, codegenprepare can be tested using opt: opt -codegenprepare -mtriple=mytriple input.ll llvm-svn: 199430
* Report a warning when dropping outdated debug info metadata.Manman Ren2014-01-163-2/+20
| | | | | | Use DiagnosticInfo to emit the warning. llvm-svn: 199346
* Return an error_code from materializeAllPermanently.Rafael Espindola2014-01-141-7/+5
| | | | llvm-svn: 199275
* Use error_code in Module::materializeAll.Rafael Espindola2014-01-141-9/+7
| | | | llvm-svn: 199269
* Decouple dllexport/dllimport from linkageNico Rieck2014-01-143-17/+29
| | | | | | | | | | | | | | | | | | | Representing dllexport/dllimport as distinct linkage types prevents using these attributes on templates and inline functions. Instead of introducing further mixed linkage types to include linkonce and weak ODR, the old import/export linkage types are replaced with a new separate visibility-like specifier: define available_externally dllimport void @f() {} @Var = dllexport global i32 1, align 4 Linkage for dllexported globals and functions is now equal to their linkage without dllexport. Imported globals and functions must be either declarations with external linkage, or definitions with AvailableExternallyLinkage. llvm-svn: 199218
* Revert "Decouple dllexport/dllimport from linkage"Nico Rieck2014-01-143-29/+17
| | | | | | | | Revert this for now until I fix an issue in Clang with it. This reverts commit r199204. llvm-svn: 199207
* Decouple dllexport/dllimport from linkageNico Rieck2014-01-143-17/+29
| | | | | | | | | | | | | | | | | | | Representing dllexport/dllimport as distinct linkage types prevents using these attributes on templates and inline functions. Instead of introducing further mixed linkage types to include linkonce and weak ODR, the old import/export linkage types are replaced with a new separate visibility-like specifier: define available_externally dllimport void @f() {} @Var = dllexport global i32 1, align 4 Linkage for dllexported globals and functions is now equal to their linkage without dllexport. Imported globals and functions must be either declarations with external linkage, or definitions with AvailableExternallyLinkage. llvm-svn: 199204
* Fix fastcall mangling of dllimported symbolsNico Rieck2014-01-141-7/+6
| | | | | | | | | | | | | fastcall requires @ as global prefix instead of _ but getNameWithPrefix wrongly assumes the OutName buffer is empty and replaces at index 0. For imported functions this buffer is pre-filled with "__imp_" resulting in broken "@_imp_foo@0" mangling. Instead replace at the proper index. We also never have to prepend the @-prefix because this fastcall mangling is only used on 32-bit Windows targets which have _ has global prefix. llvm-svn: 199203
* Fix llc to not reuse spill slots in functions that invoke setjmp()Mark Seaborn2014-01-141-4/+2
| | | | | | | | | | | | | | | | | | We need to ensure that StackSlotColoring.cpp does not reuse stack spill slots in functions that call "returns_twice" functions such as setjmp(), otherwise this can lead to miscompiled code, because a stack slot would be clobbered when it's still live. This was already handled correctly for functions that call setjmp() (though this wasn't covered by a test), but not for functions that invoke setjmp(). We fix this by changing callsFunctionThatReturnsTwice() to check for invoke instructions. This fixes PR18244. llvm-svn: 199180
* Fix uninitialized warning in llvm/lib/IR/DataLayout.cpp.Cameron McInally2014-01-131-2/+3
| | | | llvm-svn: 199147
* [PM] Split DominatorTree into a concrete analysis result object whichChandler Carruth2014-01-133-37/+47
| | | | | | | | | | | | | | | | | | | | | | | can be used by both the new pass manager and the old. This removes it from any of the virtual mess of the pass interfaces and lets it derive cleanly from the DominatorTreeBase<> template. In turn, tons of boilerplate interface can be nuked and it turns into a very straightforward extension of the base DominatorTree interface. The old analysis pass is now a simple wrapper. The names and style of this split should match the split between CallGraph and CallGraphWrapperPass. All of the users of DominatorTree have been updated to match using many of the same tricks as with CallGraph. The goal is that the common type remains the resulting DominatorTree rather than the pass. This will make subsequent work toward the new pass manager significantly easier. Also in numerous places things became cleaner because I switched from re-running the pass (!!! mid way through some other passes run!!!) to directly recomputing the domtree. llvm-svn: 199104
OpenPOWER on IntegriCloud