summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* [Dominators] Take fast path when applying <=1 updatesJakub Kuderski2017-10-042-1/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This patch teaches `DT.applyUpdates` to take the fast when applying zero or just one update and makes it not run the internal batch updater machinery. With this patch, it should no longer make sense to have a special check in user's code that checks the update sequence size before applying them, e.g. ``` if (!MyUpdates.empty()) DT.applyUpdates(MyUpdates); ``` or ``` if (MyUpdates.size() == 1) if (...) DT.insertEdge(...) else DT.deleteEdge(...) ``` Reviewers: dberlin, brzycki, davide, grosser, sanjoy Reviewed By: dberlin, davide Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38541 llvm-svn: 314917
* [X86][SSE] Add support for lowering v8i16 binary shuffles to PACKSS/PACKUSSimon Pilgrim2017-10-046-167/+96
| | | | | | Missed in D38472 llvm-svn: 314916
* [test] Fix append_path in the empty caseFrancis Ricci2017-10-041-3/+7
| | | | | | | | | | | | | | | | Summary: normpath() was being called on an empty string and appended to the environment variable in the case where the environment variable was unset. This led to ":." being appended to the path, since normpath() of an empty string is '.', presumably to represent cwd. Reviewers: zturner, sqlbyme, modocache Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38542 llvm-svn: 314915
* [X86] Redefine MOVSS/MOVSD instructions to take VR128 regclass as input ↵Craig Topper2017-10-0416-679/+635
| | | | | | | | | | | | | | instead of FR32/FR64 This patch redefines the MOVSS/MOVSD instructions to take VR128 as its second input. This allows the MOVSS/SD->BLEND commute to work without requiring a COPY to be inserted. This should fix PR33079 Overall this looks to be an improvement in the generated code. I haven't checked the EXPENSIVE_CHECKS build but I'll do that and update with results. Differential Revision: https://reviews.llvm.org/D38449 llvm-svn: 314914
* [clang-tidy] Emit note for variable declaration that are later deletedJonas Toth2017-10-042-4/+16
| | | | | | | | | | This patch introduces a note for variable declaration that are later deleted. Adds FIXME notes for possible automatic type-rewriting positions as well. Reviewed by aaron.ballman Differential: https://reviews.llvm.org/D38411 llvm-svn: 314913
* "[ARM] Mark flaky test MachineBranchProb.ll unsupported again for ARM/AArch64"Balaram Makam2017-10-041-0/+3
| | | | | | | | r314857 changed the CFG that resulted in the flaky test MachineBranchProb.ll to fail the bots again. Marking it as unsupported for ARM/AArch64 again until we find the cause. llvm-svn: 314912
* bpf: fix an insn encoding issue for neg insnYonghong Song2017-10-043-5/+3
| | | | | Signed-off-by: Yonghong Song <yhs@fb.com> llvm-svn: 314911
* [analyzer] Fix autodetection of binding types.Artem Dergachev2017-10-044-9/+43
| | | | | | | | | | | | | | | | | | | | | | | In ProgramState::getSVal(Location, Type) API which dereferences a pointer value, when the optional Type parameter is not supplied and the Location is not typed, type should have been guessed on a best-effort basis by inspecting the Location more deeply. However, this never worked; the auto-detected type was instead a pointer type to the correct type. Fixed the issue and added various test cases to demonstrate which parts of the analyzer were affected (uninitialized pointer argument checker, C++ trivial copy modeling, Google test API modeling checker). Additionally, autodetected void types are automatically replaced with char, in order to simplify checker APIs. Which means that if the location is a void pointer, getSVal() would read the first byte through this pointer and return its symbolic value. Fixes pr34305. Differential Revision: https://reviews.llvm.org/D38358 llvm-svn: 314910
* [OptRemark] Move YAML writing to IRAdam Nemet2017-10-046-98/+94
| | | | | | | | | | | | Before the patch this was in Analysis. Moving it to IR and making it implicit part of LLVMContext::diagnose allows the full opt-remark facility to be used outside passes e.g. the pass manager. Jessica is planning to use this to report function size after each pass. The same could be used for time reports. Tested with BUILD_SHARED_LIBS=On. llvm-svn: 314909
* Also update MachineORE after r314874.Adam Nemet2017-10-041-4/+2
| | | | llvm-svn: 314908
* [InstCombine] add 'exact' variants of all tests; NFCSanjay Patel2017-10-041-0/+1772
| | | | | | | We can likely remove most of these as redundant in the near future, but I'm trying to make sure I don't introduce any regressions with D38514. llvm-svn: 314907
* [NFC] clang-format lib/Transforms/Scalar/MergeICmps.cppClement Courbet2017-10-041-39/+21
| | | | llvm-svn: 314906
* [OpenMP] Initial implementation of teams distribute code generationCarlo Bertolli2017-10-0410-15/+1749
| | | | | | | | https://reviews.llvm.org/D38371 This patch implements codegen for the combined 'teams distribute" OpenMP pragma and adds regression tests for all its clauses. llvm-svn: 314905
* [test] Pass in fixed triple for openmp-offload.cJonas Hahnfeld2017-10-041-2/+2
| | | | | | | | This should fix the test on other architectures. Related to: https://reviews.llvm.org/D38372 llvm-svn: 314904
* [X86][SSE] Early out from ComputeNumSignBitsForTargetNode. NFCI.Simon Pilgrim2017-10-041-2/+6
| | | | | | Early out from vector shift by immediates that will exceed eltsize - don't bother making an unnecessary ComputeNumSignBits recursive call. llvm-svn: 314903
* [OpenMP] Fix passing of -m arguments correctlyJonas Hahnfeld2017-10-044-70/+73
| | | | | | | | | | The recent fix in D38258 was wrong: getAuxTriple() only returns non-null values for the CUDA toolchain. That is why the now added test for PPC and X86 failed. Differential Revision: https://reviews.llvm.org/D38372 llvm-svn: 314902
* [X86][SSE] Add support for lowering unary shuffles to PACKSS/PACKUSSimon Pilgrim2017-10-043-89/+100
| | | | | | Extension to D38472 llvm-svn: 314901
* [ScopBuilder] Introduce -polly-stmt-granularity option. NFC.Michael Kruse2017-10-042-16/+39
| | | | | | | | | | The option is introduced with only one possible value -polly-stmt-granularity=bb which represents the current behaviour, which is outlined into the new function buildSequentialBlockStmts(). More options will be added in future commits. llvm-svn: 314900
* [gold-plugin] - Fix compilation after LLVM update (r314883). NFC.George Rimar2017-10-041-8/+3
| | | | llvm-svn: 314899
* [AVR] Implement LPMWRdZ pseudo-instruction's expansion.Dylan McKay2017-10-041-1/+44
| | | | | | | | | FIXME: implementation is mostly copy-pasted from LDWRdPtr, so we should refactor a bit and unify the two Patch by Gerdo Erdi. llvm-svn: 314898
* [AVR] Factor out mayLoad in tablegen patternsDylan McKay2017-10-041-2/+2
| | | | | | Patch by Gergo Erdi. llvm-svn: 314897
* [AVR] Elaborate LDWRdPtr into `ld r, X++; ld r+1, X`Dylan McKay2017-10-048-33/+33
| | | | | | Patch by Gergo Erdi. llvm-svn: 314896
* Fix assertion failure in thread safety analysis (PR34800).Alexander Kornienko2017-10-042-12/+26
| | | | | | | | | | | | | | | | | Summary: Fix an assertion failure (http://llvm.org/PR34800) and clean up unused code relevant to the fixed logic. A bit of context: when `SExprBuilder::translateMemberExpr` is called on a member expression that involves a conversion operator, for example, `til::Project` constructor can't just call `getName()` on it, since the name is not a simple identifier. In order to handle this case I've introduced an optional string to print the member name to. I discovered that the other two `til::Project` constructors are not used, so it was better to delete them instead of ensuring they work correctly with the new logic. Reviewers: aaron.ballman Reviewed By: aaron.ballman Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D38458 llvm-svn: 314895
* [GPGPU] Make sure escaping invariant load hoisted scalars are preservedTobias Grosser2017-10-042-1/+33
| | | | | | | | | | | | | | | We make sure that the final reload of an invariant scalar memory access uses the same stack slot into which the invariant memory access was stored originally. Earlier, this was broken as we introduce a new stack slot aside of the preload stack slot, which remained uninitialized and caused our escaping loads to contain garbage. This happened due to us clearing the pre-populated values in EscapeMap after kernel code generation. We address this issue by preserving the original host values and restoring them after kernel code generation. EscapeMap is not expected to be used during kernel code generation, hence we clear it during kernel generation to make sure that any unintended uses are noticed. llvm-svn: 314894
* [AVR] Insert JMP for long branchesDylan McKay2017-10-043-2/+4159
| | | | | | | | | | | Previously, on long branches (relative jumps of >4 kB), an assertion failure was hit, as AVRInstrInfo::insertIndirectBranch was not implemented. Despite its name, it is called by the branch relaxator for *all* unconditional jumps. Patch by Thomas Backman. llvm-svn: 314891
* [AVR] Fix displacement overflow for LDDW/STDWDylan McKay2017-10-043-5/+31
| | | | | | | | | | | | | | | | | | | In some cases, the code generator attempts to generate instructions such as: lddw r24, Y+63 which expands to: ldd r24, Y+63 ldd r25, Y+64 # Oops! This is actually ld r25, Y in the binary This commit limits the first offset to 62, and thus the second to 63. It also updates some asserts in AVRExpandPseudoInsts.cpp, including for INW and OUTW, which appear to be unused. Patch by Thomas Backman. llvm-svn: 314890
* [ELF] - Get rid of precompiled input objects from testcases.George Rimar2017-10-048-61/+54
| | | | | | | | | | | | | | We have verneed1.so, verneed2.so files and verneed.so.sh script to produce them. They were committed long time ago when LLD was not yet able to produce some sections for versioning (".gnu.version_r" I think). There is no point to have them as binaries anymore. Patch creates asm inputs instead based on verneed.so.sh content. Differential revision: https://reviews.llvm.org/D38505 llvm-svn: 314889
* [ARM] Add diag string for movw/movt immediates in assemblyOliver Stannard2017-10-043-2/+7
| | | | | | | | | This adds diagnostics for invalid immediate operands to the MOVW and MOVT instructions (ARM and Thumb). Differential revision: https://reviews.llvm.org/D31879 llvm-svn: 314888
* [ARM, Asm] Change grammar of immediate operand diagnosticsOliver Stannard2017-10-0413-66/+66
| | | | | | | | | | | | | | | | | Currently, our diagnostics for assembly operands are not consistent. Some start with (for example) "immediate operand must be ...", and some with "operand must be an immediate ...". I think the latter form is preferable for a few reasons: * It's unambiguous that it is referring to the expected type of operand, not the type the user provided. For example, the user could provide an register operand, and get a message taking about an operand is if it is already an immediate, just not in the accepted range. * It allows us to have a consistent style once we add diagnostics for operands that could take two forms, for example a label or pc-relative memory operand. Differential revision: https://reviews.llvm.org/D36689 llvm-svn: 314887
* [X86] Improvement in CodeGen instruction selection for LEAs (re-applying ↵Jatin Bhateja2017-10-0420-187/+639
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | post required revision changes.) Summary: 1/ Operand folding during complex pattern matching for LEAs has been extended, such that it promotes Scale to accommodate similar operand appearing in the DAG. e.g. T1 = A + B T2 = T1 + 10 T3 = T2 + A For above DAG rooted at T3, X86AddressMode will no look like Base = B , Index = A , Scale = 2 , Disp = 10 2/ During OptimizeLEAPass down the pipeline factorization is now performed over LEAs so that if there is an opportunity then complex LEAs (having 3 operands) could be factored out. e.g. leal 1(%rax,%rcx,1), %rdx leal 1(%rax,%rcx,2), %rcx will be factored as following leal 1(%rax,%rcx,1), %rdx leal (%rdx,%rcx) , %edx 3/ Aggressive operand folding for AM based selection for LEAs is sensitive to loops, thus avoiding creation of any complex LEAs within a loop. Reviewers: lsaba, RKSimon, craig.topper, qcolombet, jmolloy Reviewed By: lsaba Subscribers: jmolloy, spatel, igorb, llvm-commits Differential Revision: https://reviews.llvm.org/D35014 llvm-svn: 314886
* [llvm-cov] Fix showing title when filtering and not outputting to a directorySean Eveson2017-10-042-1/+2
| | | | | | Differential Revision: https://reviews.llvm.org/D38507 llvm-svn: 314885
* [ELF] - Update after LLVM r314883 change. NFC.George Rimar2017-10-043-12/+4
| | | | llvm-svn: 314884
* [MC] - Don't assert when non-english characters are used.George Rimar2017-10-043-12/+42
| | | | | | | | | | | | | | | | | | I found that llvm-mc does not like non-english characters even in comments, which it tries to tokenize. Problem happens because of functions like isdigit(), isalnum() which takes int argument and expects it is not negative. But at the same time MCParser uses char* to store input buffer poiner, char has signed value, so it is possible to pass negative value to one of functions from above and that triggers an assert. Testcase for demonstration is provided. To fix the issue helper functions were introduced in StringExtras.h Differential revision: https://reviews.llvm.org/D38461 llvm-svn: 314883
* Recommit [UnreachableBlockElim] Use COPY if PHI input is undefMikael Holmen2017-10-042-2/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This time invoking llc with "-march=x86-64" in the testcase, so we don't assume the default target is x86. Summary: If we have %vreg0<def> = PHI %vreg2<undef>, <BB#0>, %vreg3, <BB#2>; GR32:%vreg0,%vreg2,%vreg3 %vreg3<def,tied1> = ADD32ri8 %vreg0<kill,tied0>, 1, %EFLAGS<imp-def>; GR32:%vreg3,%vreg0 then we can't just change %vreg0 into %vreg3, since %vreg2 is actually undef. We would have to also copy the undef flag to be able to change the register. Instead we deal with this case like other cases where we can't just replace the register: we insert a COPY. The code creating the COPY already copied all flags from the PHI input, so the undef flag will be transferred as it should. Reviewers: kparzysz Reviewed By: kparzysz Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38235 llvm-svn: 314882
* [IRCE] Temporarily disable unsigned latch conditions by defaultMax Kazantsev2017-10-047-5/+71
| | | | | | | | | | | | We have found some corner cases connected to range intersection where IRCE makes a bad thing when the latch condition is unsigned. The fix for that will go as a follow up. This patch temporarily disables IRCE for unsigned latch conditions until the issue is fixed. The unsigned latch conditions were introduced to IRCE by rL310027. Differential Revision: https://reviews.llvm.org/D38529 llvm-svn: 314881
* Revert r314879 "[UnreachableBlockElim] Use COPY if PHI input is undef"Mikael Holmen2017-10-042-41/+2
| | | | | | Build-bots broke on the new testcase. I'll investigate and fix. llvm-svn: 314880
* [UnreachableBlockElim] Use COPY if PHI input is undefMikael Holmen2017-10-042-2/+41
| | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: If we have %vreg0<def> = PHI %vreg2<undef>, <BB#0>, %vreg3, <BB#2>; GR32:%vreg0,%vreg2,%vreg3 %vreg3<def,tied1> = ADD32ri8 %vreg0<kill,tied0>, 1, %EFLAGS<imp-def>; GR32:%vreg3,%vreg0 then we can't just change %vreg0 into %vreg3, since %vreg2 is actually undef. We would have to also copy the undef flag to be able to change the register. Instead we deal with this case like other cases where we can't just replace the register: we insert a COPY. The code creating the COPY already copied all flags from the PHI input, so the undef flag will be transferred as it should. Reviewers: kparzysz Reviewed By: kparzysz Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38235 llvm-svn: 314879
* [XRay][compiler-rt] Fix logical failure in BufferQueue::getBuffer()Dean Michael Berris2017-10-041-1/+1
| | | | | | Follow-up to D38119. llvm-svn: 314878
* [XRay][compiler-rt] Use a hand-written circular buffer in BufferQueueDean Michael Berris2017-10-043-32/+93
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This change removes the dependency on using a std::deque<...> for the storage of the buffers in the buffer queue. We instead implement a fixed-size circular buffer that's resilient to exhaustion, and preserves the semantics of the BufferQueue. We're moving away from using std::deque<...> for two reasons: - We want to remove dependencies on the STL for data structures. - We want the data structure we use to not require re-allocation in the normal course of operation. The internal implementation of the buffer queue uses heap-allocated arrays that are initialized once when the BufferQueue is created, and re-uses slots in the buffer array as buffers are returned in order. We also change the lock used in the implementation to a spinlock instead of a blocking mutex. We reason that since the release operations now take very little time in the critical section, that a spinlock would be appropriate. This change is related to D38073. This change is a re-submit with the following changes: - Keeping track of the live buffers with a counter independent of the pointers keeping track of the extents of the circular buffer. - Additional documentation of what the data members are meant to represent. Reviewers: dblaikie, kpw, pelikan Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38119 llvm-svn: 314877
* [X86] Fix using the SJLJ jump table on x86_64Martin Storsjo2017-10-042-11/+82
| | | | | | | | | | | | | | | | The previous version didn't work if the jump table base address didn't fit in 32 bit, since it was encoded as an immediate offset. And in case the jump table is encoded as 32 bit label differences, we need to load and add them to the table base first. This solves the first half of the issues mentioned in PR34720. Also fix some of the errors pointed out by -verify-machineinstrs, by using GR32_NOSPRegClass. Differential Revision: https://reviews.llvm.org/D38333 llvm-svn: 314876
* [XRay] [compiler-rt] make sure single threaded programs get traced tooMartin Pelikan2017-10-042-0/+47
| | | | | | | | | | | | | | | Summary: When the XRay user calls the API to finish writing the log, the thread which is calling the API still hasn't finished and therefore won't get its trace written. Add a test for only the main thread to check this. Reviewers: dberris Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D38493 llvm-svn: 314875
* Move verbosity check for remarks to the diag handlerAdam Nemet2017-10-043-8/+10
| | | | | | | | Test needs some slight adjustment because we no longer check the existence of BFI but rather that the actual hotness is set on the remark. If entry_count is not set getBlockProfileCount returns None. llvm-svn: 314874
* Move verbosity check for opt remarks to the diag handler.Adam Nemet2017-10-041-0/+4
| | | | llvm-svn: 314873
* We allow implicit function declarations as an extension in all C dialects. ↵Richard Smith2017-10-044-10/+6
| | | | | | Remove OpenCL special case. llvm-svn: 314872
* PR34822: Fix a collection of related bugs with our handling of C89 implicit ↵Richard Smith2017-10-045-23/+49
| | | | | | | | | | | | | | | | | function declarations. We were injecting the function into the wrong semantic context, resulting in it failing to be registered as a global for redeclaration lookup. As a consequence, we accepted invalid code since r310616. Fixing that resulted in the "out-of-scope declaration" diagnostic firing a lot more often. It turned out that warning codepath was non-conforming, because it did not cause us to inject the implicitly-declared function into the enclosing block scope. We now only warn if the type of the out-of-scope declaration doesn't match the type of an implicitly-declared function; in all other cases, we produce the normal warning for an implicitly-declared function. llvm-svn: 314871
* [FuzzerUtil] Partially revert D38481 on FuzzerUtilTim Shen2017-10-041-1/+9
| | | | | | | | | This is because lib/Fuzzer doesn't really depend on llvm infrastucture. It's not easy to access the llvm hardware_concurrency here. Differential Reivision: https://reviews.llvm.org/D38481 llvm-svn: 314870
* Call exitLld() from elf::link.Rui Ueyama2017-10-042-6/+7
| | | | | | | | | We used to call exitLld() from a leaf function, Writer::run(), because we had objects on the stack whose dtors are expensive. Now we no longer have such objects on the stack, so there's no reason to exist from the leaf function. llvm-svn: 314869
* [ELF] Fix buildbotsShoaib Meenai2017-10-041-1/+1
| | | | | | Mark a test as requiring zlib. llvm-svn: 314868
* Remove BssSection::reserveSpace().Rui Ueyama2017-10-044-16/+10
| | | | | | | We no longer call reserveSpace more than once, so it can be merged with its constructor. llvm-svn: 314867
* [ELF] Decompress debug info sections earlyShoaib Meenai2017-10-045-6/+41
| | | | | | | | | | | | | | | | | | When reporting a symbol conflict, LLD parses the debug info to report source location information. Sections have not been decompressed at this point, so if an object file contains zlib compressed debug info, LLD ends up passing this compressed debug info to the DWARF parser, which causes debug info parsing failures and can trigger assertions in the parser (as the test case demonstrates). Decompress debug sections when constructing the LLDDwarfObj to avoid this issue. This doesn't handle GNU-style compressed debug info sections (.zdebug_*), which at present are simply ignored by LLDDwarfObj; those can be done in a follow-up. Differential Revision: https://reviews.llvm.org/D38491 llvm-svn: 314866
OpenPOWER on IntegriCloud