summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
* [SSP, 2/2] Create llvm.stackguard() intrinsic and lower it to LOAD_STACK_GUARDTim Shen2016-04-1918-99/+209
| | | | | | | | | | | | | | | | | | | | | | | With this change, ideally IR pass can always generate llvm.stackguard call to get the stack guard; but for now there are still IR form stack guard customizations around (see getIRStackGuard()). Future SSP customization should go through LOAD_STACK_GUARD. There is a behavior change: stack guard values are not CSEed anymore, since we should never reuse the value in case that it has been spilled (and corrupted). See ssp-guard-spill.ll. This also cause the change of stack size and codegen in X86 and AArch64 test cases. Ideally we'd like to know if the guard created in llvm.stackprotector() gets spilled or not. If the value is spilled, discard the value and reload stack guard; otherwise reuse the value. This can be done by teaching register allocator to know how to rematerialize LOAD_STACK_GUARD and force a rematerialization (which seems hard), or check for spilling in expandPostRAPseudo. It only makes sense when the stack guard is a global variable, which requires more instructions to load. Anyway, this seems to go out of the scope of the current patch. llvm-svn: 266806
* [Orc] Add explicit move ops to OrcRemoteTargetRPCAPI for MSVC.Lang Hames2016-04-191-0/+11
| | | | llvm-svn: 266805
* [Orc] Fix missing return in RPC move assignment operator.Lang Hames2016-04-191-0/+1
| | | | llvm-svn: 266804
* [lanai] Add lowering for SETCCE i32.Jacques Pienaar2016-04-195-35/+177
| | | | | | | | * Add lowering for SETCCE i32. * Add test to check lowering of i64 compares uses SETCCE expansion (outside of EQ and NE). * Fix select.ll test and immediate form selection for RI operations. llvm-svn: 266802
* [ValueTracking, VectorUtils] Refactor getIntrinsicIDForCallDavid Majnemer2016-04-198-179/+185
| | | | | | | | | | | | | The functionality contained within getIntrinsicIDForCall is two-fold: it checks if a CallInst's callee is a vectorizable intrinsic. If it isn't an intrinsic, it attempts to map the call's target to a suitable intrinsic. Move the mapping functionality into getIntrinsicForCallSite and rename getIntrinsicIDForCall to getVectorIntrinsicIDForCall while reimplementing it in terms of getIntrinsicForCallSite. llvm-svn: 266801
* [X86] Simplify StackMapShadowTracker; NFCSanjoy Das2016-04-192-38/+27
| | | | | | | | - Elide trivial contructor and desctructor - Move implementation out of an unnecessary explicit llvm namespace scope llvm-svn: 266794
* [X86MCInstLower] Clean up EmitNops; NFCSanjoy Das2016-04-191-51/+68
| | | | | | | Instead of having a conditional assert inside EmitNops, refactor so that the caller can have the assert instead. llvm-svn: 266793
* [Hexagon] Implement branch relaxationKrzysztof Parzyszek2016-04-193-0/+215
| | | | | | Patch by Sirish Pande. llvm-svn: 266792
* IR: Enable debug info type ODR uniquing for forward declsDuncan P. N. Exon Smith2016-04-197-13/+212
| | | | | | | | | | | | | | | | | | | | | | | | Add a new method, DICompositeType::buildODRType, that will create or mutate the DICompositeType for a given ODR identifier, and use it in LLParser and BitcodeReader instead of DICompositeType::getODRType. The logic is as follows: - If there's no node, create one with the given arguments. - Else, if the current node is a forward declaration and the new arguments would create a definition, mutate the node to match the new arguments. - Else, return the old node. This adds a missing feature supported by the current DITypeIdentifierMap (which I'm slowly making redudant). The only remaining difference is that the DITypeIdentifierMap has a "the-last-one-wins" rule, whereas DICompositeType::buildODRType has a "the-first-one-wins" rule. For now I'm leaving behind DICompositeType::getODRType since it has obvious, low-level semantics that are convenient for unit testing. llvm-svn: 266786
* Preliminary changes for fixing PR27241. Generalized/restructured some thingsDavid L Kreitzer2016-04-191-19/+37
| | | | | | | | | in preparation for enabling the outgoing parameter store-to-push optimization for 64-bit targets. Differential Revision: http://reviews.llvm.org/D19222 llvm-svn: 266774
* Linker: Simplify test/Linker/dicompositetype-unique.ll, NFCDuncan P. N. Exon Smith2016-04-191-11/+9
| | | | | | | | | Simplify the test logic a little, sharing logic between the two linking directions by specifying -check-prefix multiple times. Now it's more obvious what's hte same and different between the two directions, and there is less CHECK duplication. This is a prep for expanding the test. llvm-svn: 266773
* [llvm-pdbdump] Print a better error message when PDB loading fails.Zachary Turner2016-04-194-17/+29
| | | | | | Differential Revision: http://reviews.llvm.org/D19234 llvm-svn: 266772
* [Orc] Add move ops to RPC to satisfy MSVC.Lang Hames2016-04-191-0/+23
| | | | llvm-svn: 266768
* [ValueTracking] Improve isImpliedCondition for conditions with matching ↵Chad Rosier2016-04-197-22/+636
| | | | | | | | | | | | | | | operands. This patch improves SimplifyCFG to catch cases like: if (a < b) { if (a > b) <- known to be false unreachable; } Phabricator Revision: http://reviews.llvm.org/D18905 llvm-svn: 266767
* [Orc] Add pthread dependence to the RPCUtilsTest unit test.Lang Hames2016-04-191-0/+2
| | | | llvm-svn: 266766
* IR: LLVMContextTest => DebugTypeODRUniquingTest, NFCDuncan P. N. Exon Smith2016-04-192-4/+4
| | | | | | | | | The second test in this file is actually testing DICompositeType API, not LLVMContext API (after r266742 moved it to a higher level). This really doesn't make sense in an LLVMContextTest. Rename the tests before adding more. llvm-svn: 266764
* Linker: Avoid constructing ValueMap::MDMapTDuncan P. N. Exon Smith2016-04-192-2/+3
| | | | | | | | | Calling ValueMap::MD lazily constructs a ValueMap, which mallocs the buckets. Instead of swapping constructed maps, move around the underlying Optional<MDMapT>. This gets rid of some unnecessary malloc traffic from r266579 (not that it showed up on a profile). llvm-svn: 266761
* [DependenceAnalysis] Refactor uses of getConstantPart. NFC.Brendon Cahoon2016-04-191-36/+21
| | | | | | | | | | Rather than checking for the SCEV type prior to calling getContantPart, perform the checks in the function. This reduces the number of places where the checks are needed. Differential Revision: http://reviews.llvm.org/D19241 llvm-svn: 266759
* Fix Gold test after r266750 (ModuleLinker: Do not import linkonce/weak as ↵Mehdi Amini2016-04-192-2/+2
| | | | | | | "external_weak") From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266752
* IR: Use Optional instead of unique_ptr for Metadata map in ValueMap, NFCDuncan P. N. Exon Smith2016-04-191-2/+2
| | | | llvm-svn: 266751
* ModuleLinker: Do not import linkonce/weak as "external_weak"Mehdi Amini2016-04-192-4/+3
| | | | | | | | | | | | | | | Summary: There is no reason to have a weak reference because the external definition will be weak. Reviewers: rafael Subscribers: llvm-commits, tejohnson Differential Revision: http://reviews.llvm.org/D19267 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266750
* IR: Use Optional instead of unique_ptr for debug info ODR type map, NFCDuncan P. N. Exon Smith2016-04-192-3/+2
| | | | | | Save a level of malloc indirection. llvm-svn: 266749
* Enable ODR uniquing of DITypes in more placesTeresa Johnson2016-04-192-0/+7
| | | | | | | | | | | | | | | | | | | | | | | Summary: This is a follow-on to apply Duncan's new DIType ODR uniquing from r266549 and r266713 in more places. Enable enableDebugTypeODRUniquing() for ThinLTO backends invoked via libLTO, similar to the way r266549 enabled this for ThinLTO backend threads launched from gold-plugin. Also enable enableDebugTypeODRUniquing in opt, similar to the way r266549 enabled this for llvm-link (on by default, can be disabled with new -disable-debug-info-type-map option), since we may perform ThinLTO importing from opt. Reviewers: dexonsmith, joker.eph Subscribers: joker.eph, llvm-commits Differential Revision: http://reviews.llvm.org/D19263 llvm-svn: 266746
* IR: getOrInsertODRUniquedType => DICompositeType::getODRType, NFCDuncan P. N. Exon Smith2016-04-198-61/+104
| | | | | | | | | | | | | | Lift the API for debug info ODR type uniquing up a layer. Instead of clients managing the map directly on the LLVMContext, add a static method to DICompositeType called getODRType and handle the map in the background. Also adds DICompositeType::getODRTypeIfExists, so far just for convenience in the unit tests. This simplifies the logic in LLParser and BitcodeReader. Because of argument spam there are actually a few more lines of code now; I'll see if I come up with a reasonable way to clean that up. llvm-svn: 266742
* IR: Require DICompositeType for ODR uniquing type mapDuncan P. N. Exon Smith2016-04-196-19/+22
| | | | | | | | Tighten up the API for debug info ODR type uniquing in LLVMContext. The only reason to allow other DIType subclasses is to make the unit tests prettier :/. llvm-svn: 266737
* [InstCombine][X86] Added extra tests introduced for D17490Simon Pilgrim2016-04-194-0/+578
| | | | llvm-svn: 266732
* [InstCombine][X86] Regenerate SSE combine tests as part of setup for D17490Simon Pilgrim2016-04-196-468/+581
| | | | | | Regenerated with utils/update_test_checks.py llvm-svn: 266731
* [X86][AVX2] Prefer VPERMQ/VPERMPD over VINSERTI128/VINSERTF128 for unary ↵Simon Pilgrim2016-04-196-36/+58
| | | | | | | | | | shuffles Using VPERMQ/VPERMPD allows memory folding of the (repeated) input where VINSERTI128/VINSERTF128 can not. Differential Revision: http://reviews.llvm.org/D19228 llvm-svn: 266728
* Minor improvement to debug output for Function Importer (NFC)Mehdi Amini2016-04-191-9/+9
| | | | | From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266723
* Add a description for the PatchableFunction pass; NFCSanjoy Das2016-04-191-1/+2
| | | | llvm-svn: 266721
* Disable the PatchableFunction pass for NVPTX & WasmSanjoy Das2016-04-192-0/+2
| | | | | | | PatchableFunction requires AllVRegsAllocated that these targets don't provide. llvm-svn: 266720
* Correct IDF calculator for ReverseIDFDaniel Berlin2016-04-194-7/+21
| | | | | | | | | | | | | | Summary: Need to use predecessors for reverse graph, successors for forward graph. succ_iterator/pred_iterator are not compatible, this patch is all the work necessary to work around that (which is what everywhere else does). Not sure if there is a better way, so cc'ing some random folks to take a gander :) Reviewers: dblaikie, qcolombet, echristo Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D18796 llvm-svn: 266718
* [Orc] Disable RPC callST unit test until the S390 failures encountered duringLang Hames2016-04-191-20/+22
| | | | | | | http://lab.llvm.org:8011/builders/clang-s390x-linux/builds/3459 can be debugged/fixed. llvm-svn: 266717
* Introduce a "patchable-function" function attributeSanjoy Das2016-04-1916-26/+234
| | | | | | | | | | | | | | | | | Summary: The `"patchable-function"` attribute can be used by an LLVM client to influence LLVM's code generation in ways that makes the generated code easily patchable at runtime (for instance, to redirect control). Right now only one patchability scheme is supported, `"prologue-short-redirect"`, but this can be expanded in the future. Reviewers: joker.eph, rnk, echristo, dberris Subscribers: joker.eph, echristo, mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D19046 llvm-svn: 266715
* IR: Rename API for enabling ODR uniquing of DITypes, NFCDuncan P. N. Exon Smith2016-04-198-34/+34
| | | | | | | | | | | As per David's review, rename everything in the new API for ODR type uniquing of debug info. ensureDITypeMap => enableDebugTypeODRUniquing destroyDITypeMap => disableDebugTypeODRUniquing hasDITypeMap => isODRUniquingDebugTypes llvm-svn: 266713
* [ORC] Whitespace.Lang Hames2016-04-191-4/+4
| | | | llvm-svn: 266712
* [Orc] Tidy up some of the RPC primitives, add a unit-test for the callSTLang Hames2016-04-192-65/+152
| | | | | | (synchronous call) primitive. llvm-svn: 266711
* BitcodeWriter: Break recursion when enumerating Metadata, almost NFCDuncan P. N. Exon Smith2016-04-193-77/+80
| | | | | | | | | | | Use a worklist instead of recursing through MDNode operands in ValueEnumerator. The actual record output order has changed slightly, but otherwise there's no functionality change. I had to update test/Bitcode/metadata-function-blocks.ll. I renumbered nodes so they continue to match the implicit record ids. llvm-svn: 266709
* vim: add swiftcc keywordSaleem Abdulrasool2016-04-191-3/+3
| | | | | | Update the syntax highlighting for SVN r265480. llvm-svn: 266705
* [lanai] Set boolean contentss to ZeroOrOneBooleanContent.Jacques Pienaar2016-04-191-0/+3
| | | | llvm-svn: 266701
* Increase SmallVector size for ConstantUniqueMap::getHashValue() (NFC)Mehdi Amini2016-04-191-1/+1
| | | | | | | | This remove totally any malloc from this function on my profile (from 155k before). From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266700
* Port DemandedBits to the new pass manager.Michael Kuperstein2016-04-1811-55/+120
| | | | | | Differential Revision: http://reviews.llvm.org/D18679 llvm-svn: 266699
* Add missing #include, found by modules selfhost.Richard Smith2016-04-181-2/+3
| | | | llvm-svn: 266697
* Add missing header, found by modules selfhost.Richard Smith2016-04-181-0/+2
| | | | llvm-svn: 266696
* [libFuzzer] try to print correct time in seconds when reporting a timeout. ↵Kostya Serebryany2016-04-183-6/+6
| | | | | | Don't report timeouts while still loading the corpus. llvm-svn: 266693
* [DWARF] Force a linkage_name on an inlined subprogram's abstract origin.Paul Robinson2016-04-1812-27/+112
| | | | | | | | | | | | | When we suppress linkage names, for a non-inlined subprogram the name can still be found in the object-file symbol table, because we have the code address of the subprogram. This is not necessarily the case for an inlined subprogram, so we still want to emit the linkage name in the DWARF. Put this on the abstract-origin DIE because it's common to all inlined instances. Differential Revision: http://reviews.llvm.org/D18706 llvm-svn: 266692
* Remove old DIBuilder::createFunction overload used only by dragonegg, which ↵Reid Kleckner2016-04-182-24/+0
| | | | | | | | does not currently build NFC llvm-svn: 266691
* Add debugging to the cache pruningMehdi Amini2016-04-181-4/+23
| | | | | From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266686
* CachePruning: fix typo, we accumulate file size here, not timeMehdi Amini2016-04-181-1/+1
| | | | | From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 266685
* ARM: use a pseudo-instruction for cmpxchg at -O0.Tim Northover2016-04-189-8/+475
| | | | | | | | | | | | | | | | | The fast register-allocator cannot cope with inter-block dependencies without spilling. This is fine for ldrex/strex loops coming from atomicrmw instructions where any value produced within a block is dead by the end, but not for cmpxchg. So we lower a cmpxchg at -O0 via a pseudo-inst that gets expanded after regalloc. Fortunately this is at -O0 so we don't have to care about performance. This simplifies the various axes of expansion considerably: we assume a strong seq_cst operation and ensure ordering via the always-present DMB instructions rather than v8 acquire/release instructions. Should fix the 32-bit part of PR25526. llvm-svn: 266679
OpenPOWER on IntegriCloud