summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* Optimized FMA intrinsic + FNEG , likeElena Demikhovsky2016-09-013-35/+220
| | | | | | | | | | | | | -(a*b+c) and FNEG + FMA, like a*b-c or (-a)*b+c. The bug description is here : https://llvm.org/bugs/show_bug.cgi?id=28892 Differential revision: https://reviews.llvm.org/D23313 llvm-svn: 280368
* [analyzer] ExprEngine: remove second call to PreStmt<CastExpr>Aleksei Sidorin2016-09-015-9/+72
| | | | | | | | | This patch also introduces AnalysisOrderChecker which is intended for testing of callback call correctness. Differential Revision: https://reviews.llvm.org/D23804 llvm-svn: 280367
* Sign extend a value before passing it to the Target.Rafael Espindola2016-09-012-1/+16
| | | | | | | | | This is what InputSectionBase<ELFT>::relocate does and we need to be consistent. The other option would be to be more explicit about which relocations are signed and which are not, and sign extend only when appropriated. That would require extending the target interface. llvm-svn: 280366
* Fix profile test assuming dumb compilerRenato Golin2016-09-011-1/+1
| | | | | | | | | Commit r280364 has introduced some call-graph optmisations making a profiler test "fail" due to not expecting the compiler to be "smart", and fold constants across functions. This commit works around the issue, leaving the origial semantics intact. llvm-svn: 280365
* [SimplifyCFG] Handle tail-sinking of more than 2 incoming branchesJames Molloy2016-09-017-50/+224
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This was a real restriction in the original version of SinkIfThenCodeToEnd. Now it's been rewritten, the restriction can be lifted. As part of this, we handle a very common and useful case where one of the incoming branches is actually conditional. Consider: if (a) x(1); else if (b) x(2); This produces the following CFG: [if] / \ [x(1)] [if] | | \ | | \ | [x(2)] | \ | / [ end ] [end] has two unconditional predecessor arcs and one conditional. The conditional refers to the implicit empty 'else' arc. This same pattern can also be caused by an empty default block in a switch. We can't sink the call to x() down to end because no call to x() happens on the third incoming arc (assume that x() has sideeffects for the sake of argument; if something is safe to speculate we could indeed sink nevertheless but this cannot happen in the general case and causes many extra selects). We are now able to detect this case and split off the unconditional arcs to a common successor: [if] / \ [x(1)] [if] | | \ | | \ | [x(2)] | \ / | [sink.split] | \ / [ end ] Now we can sink the call to x() into %sink.split. This can cause significant code simplification in many testcases. llvm-svn: 280364
* Clear scariness score when initializing ErrorDoubleFreeFilipe Cabecinhas2016-09-011-0/+1
| | | | llvm-svn: 280363
* Copy over most of the scariness_score test to the general testsFilipe Cabecinhas2016-09-011-0/+191
| | | | | | | | | | The abort() test wasn't copied over (original case 22). This is because it doesn't work on OS X. If theres no buildbot problem with this test later today, I will minimize the Linux version. llvm-svn: 280361
* [analyzer] Add more FileIDs to PlistDiagnostic map to avoid assertionAleksei Sidorin2016-09-014-25/+177
| | | | | | | | | | | | | Some FileIDs that may be used by PlistDiagnostics were not added while building a list of pieces. This caused assertion violation in GetFID() function. This patch adds some missing FileIDs to avoid the assertion. It also contains small refactoring of PlistDiagnostics::FlushDiagnosticsImpl(). Patch by Aleksei Sidorin, Ilya Palachev. Differential Revision: https://reviews.llvm.org/D22090 llvm-svn: 280360
* [include-fixer] Fix an undefined variable exception in vim script when there isHaojian Wu2016-09-011-0/+1
| | | | | | only one candidate header. llvm-svn: 280359
* Add an optional parameter with a list of undefs to extendToIndicesKrzysztof Parzyszek2016-09-012-5/+15
| | | | | | Reapply r280268, hopefully in a version that MSVC likes. llvm-svn: 280358
* [IR] Properly handle escape characters in Attribute::getAsString()Honggyu Kim2016-09-013-7/+18
| | | | | | | | | | | | | | | | | | | | | If an attribute name has special characters such as '\01', it is not properly printed in LLVM assembly language format. Since the format expects the special characters are printed as it is, it has to contain escape characters to make it printable. Before: attributes #0 = { ... "counting-function"="^A__gnu_mcount_nc" ... After: attributes #0 = { ... "counting-function"="\01__gnu_mcount_nc" ... Reviewers: hfinkel, rengolin, rjmccall, compnerd Subscribers: nemanjai, mcrosier, hans, shenhan, majnemer, llvm-commits Differential Revision: https://reviews.llvm.org/D23792 llvm-svn: 280357
* Minidump parsingDimitar Vlahovski2016-09-0112-0/+768
| | | | | | | | | | | | | | | | | | | Summary: This is a Minidump parsing code. There are still some more structures/data streams that need to be added. The aim ot this is to be used in the implementation of a minidump debugging plugin that works on all platforms/architectures. Currently we have a windows-only plugin that uses the WinAPI to parse the dump files. Also added unittests for the current functionality. Reviewers: labath, amccarth Subscribers: tberghammer, danalbert, srhines, lldb-commits, dschuff Differential Revision: https://reviews.llvm.org/D23545 llvm-svn: 280356
* [Frontend] Fix mcount inlining bugHonggyu Kim2016-09-013-43/+53
| | | | | | | | | | | | | | | | | | | | | | | | | | Since some profiling tools, such as gprof, ftrace, and uftrace, use -pg option to generate a mcount function call at the entry of each function. Function invocation can be detected by this hook function. But mcount insertion is done before function inlining phase in clang, sometime a function that already has a mcount call can be inlined in the middle of another function. This patch adds an attribute "counting-function" to each function rather than emitting the mcount call directly in frontend so that this attribute can be processed in backend. Then the mcount calls can be properly inserted in backend after all the other optimizations are completed. Link: https://llvm.org/bugs/show_bug.cgi?id=28660 Reviewers: hans, rjmccall, hfinkel, rengolin, compnerd Subscribers: shenhan, cfe-commits Differential Revision: https://reviews.llvm.org/D22666 llvm-svn: 280355
* [analyzer][test commit] ExprEngine.cpp: Remove training whitespace; NFCAleksei Sidorin2016-09-011-2/+2
| | | | llvm-svn: 280352
* [SimplifyCFG] Change the algorithm in SinkThenElseCodeToEndJames Molloy2016-09-012-90/+233
| | | | | | | | | | | | | | | | | | | | | | | | | r279460 rewrote this function to be able to handle more than two incoming edges and took pains to ensure this didn't regress anything. This time we change the logic for determining if an instruction should be sunk. Previously we used a single pass greedy algorithm - sink instructions until one requires more than one PHI node or we run out of instructions to sink. This had the problem that sinking instructions that had non-identical but trivially the same operands needed extra logic so we sunk them aggressively. For example: %a = load i32* %b %d = load i32* %b %c = gep i32* %a, i32 0 %e = gep i32* %d, i32 1 Sinking %c and %e would naively require two PHI merges as %a != %d. But the loads are obviously equivalent (and maybe can't be hoisted because there is no common predecessor). This is why we implemented the fairly complex function areValuesTriviallySame(), to look through trivial differences like this. However it's just not clever enough. Instead, throw areValuesTriviallySame away, use pointer equality to check equivalence of operands and switch to a two-stage algorithm. In the "scan" stage, we look at every sinkable instruction in isolation from end of block to front. If it's sinkable, we keep track of all operands that required PHI merging. In the "sink" stage, we iteratively sink the last non-terminator in the source blocks. But when calculating how many PHIs are actually required to be inserted (to work out if we should stop or not) we remove any values that have already been sunk from the set of PHI-merges required, which allows us to be more aggressive. This turns an algorithm with potentially recursive lookahead (looking through GEPs, casts, loads and any other instruction potentially not CSE'd) to two linear scans. llvm-svn: 280351
* Add ISD::EH_DWARF_CFA, simplify @llvm.eh.dwarf.cfa on Mips, fix on PowerPCHal Finkel2016-09-019-32/+79
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | LLVM has an @llvm.eh.dwarf.cfa intrinsic, used to lower the GCC-compatible __builtin_dwarf_cfa() builtin. As pointed out in PR26761, this is currently broken on PowerPC (and likely on ARM as well). Currently, @llvm.eh.dwarf.cfa is lowered using: ADD(FRAMEADDR, FRAME_TO_ARGS_OFFSET) where FRAME_TO_ARGS_OFFSET defaults to the constant zero. On x86, FRAME_TO_ARGS_OFFSET is lowered to 2*SlotSize. This setup, however, does not work for PowerPC. Because of the way that the stack layout works, the canonical frame address is not exactly (FRAMEADDR + FRAME_TO_ARGS_OFFSET) on PowerPC (there is a lower save-area offset as well), so it is not just a matter of implementing FRAME_TO_ARGS_OFFSET for PowerPC (unless we redefine its semantics -- We can do that, since it is currently used only for @llvm.eh.dwarf.cfa lowering, but the better to directly lower the CFA construct itself (since it can be easily represented as a fixed-offset FrameIndex)). Mips currently does this, but by using a custom lowering for ADD that specifically recognizes the (FRAMEADDR, FRAME_TO_ARGS_OFFSET) pattern. This change introduces a ISD::EH_DWARF_CFA node, which by default expands using the existing logic, but can be directly lowered by the target. Mips is updated to use this method (which simplifies its implementation, and I suspect makes it more robust), and updates PowerPC to do the same. Fixes PR26761. Differential Revision: https://reviews.llvm.org/D24038 llvm-svn: 280350
* [AMDGPU] Scalar Memory instructions TD refactoringValery Pykhtin2016-09-017-398/+431
| | | | | | Differential revision: https://reviews.llvm.org/D23996 llvm-svn: 280349
* Eliminate LayoutInputSection classEugene Leviant2016-09-015-105/+76
| | | | | | | | | | Previously we used LayoutInputSection class to correctly assign symbols defined in linker script. This patch removes it and uses pointer to preceding input section in SymbolAssignment class instead. Differential revision: https://reviews.llvm.org/D23661 llvm-svn: 280348
* Add a counter-function insertion passHal Finkel2016-09-0111-0/+117
| | | | | | | | | | | | | | | | | | As discussed in https://reviews.llvm.org/D22666, our current mechanism to support -pg profiling, where we insert calls to mcount(), or some similar function, is fundamentally broken. We insert these calls in the frontend, which means they get duplicated when inlining, and so the accumulated execution counts for the inlined-into functions are wrong. Because we don't want the presence of these functions to affect optimizaton, they should be inserted in the backend. Here's a pass which would do just that. The knowledge of the name of the counting function lives in the frontend, so we're passing it here as a function attribute. Clang will be updated to use this mechanism. Differential Revision: https://reviews.llvm.org/D22825 llvm-svn: 280347
* [Support] Fix a warning introduced in r280339 due to the memberChandler Carruth2016-09-011-1/+1
| | | | | | | | | | | | initializers not being in the same order as the members. Specifically, 'preg' is the first member followed by 'error', so they will be initialized in that order and should be written in the member initializer list in that order. For the constructor in question, there is no change in behavior. llvm-svn: 280345
* XFail TestMemoryFind on 32-bit architecturesPavel Labath2016-09-011-0/+2
| | | | | | | | the test fails for a very prosaic reason: `(const char *)0x1000` returns "4096" on x86_64 and "1000" (without the "0x") on i386. I haven't tried other 32-bit arches, but I am guessing the behaviour is the same. XFAIL until someone can get a chance to look at this. llvm-svn: 280344
* [ScopInfo] Add missing ISL annotations NFC.Michael Kruse2016-09-012-15/+15
| | | | llvm-svn: 280343
* [SimplifyCFG] Fix nondeterministic iteration orderJames Molloy2016-09-011-2/+2
| | | | | | | | We iterate over the result from SafeToMergeTerminators, so make it a SmallSetVector instead of a SmallPtrSet. Should fix stage3 convergence builds. llvm-svn: 280342
* Update ISL to isl-0.17.1-203-g3fef898.Michael Kruse2016-09-015-4/+20
| | | | | | This version has isl_space_has_equal_tuples added to the public API. llvm-svn: 280341
* Commit of forgotten header for r280339 "[LLVM/Support] - Create no-arguments ↵George Rimar2016-09-011-0/+1
| | | | | | constructor for llvm::Regex" llvm-svn: 280340
* [LLVM/Support] - Create no-arguments constructor for llvm::RegexGeorge Rimar2016-09-012-0/+11
| | | | | | | | | This is useful when need to defer the construction, e.g. using Regex as a member of class. Differential revision: https://reviews.llvm.org/D24101 llvm-svn: 280339
* [SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more casesJames Molloy2016-09-011-6/+21
| | | | | | | | | | | | | | | | | | | A very important case is not handled here: multiple arcs to a single block with a PHI. Consider: a: %1 = icmp %b, 1 br %1, label %c, label %e c: %2 = icmp %b, 2 br %2, label %d, label %e d: br %e e: phi [0, %a], [1, %c], [2, %d] FoldValueComparisonIntoPredecessors will refuse to fold this, as it doesn't know how to deal with two arcs to a common destination with different PHI values. The answer is obvious - just split all conflicting arcs. llvm-svn: 280338
* Remove whitespace to test commit accessHonggyu Kim2016-09-011-1/+1
| | | | llvm-svn: 280337
* [NFC] Remove unnecessary commentDean Michael Berris2016-09-011-4/+2
| | | | llvm-svn: 280336
* Fix libc++ configuration with -fsanitize-coverageIvan Krasin2016-09-012-0/+6
| | | | | | | | | | | | | | | | | | Summary: a recent change (r280015) in libc++ configuration broke LibFuzzer bot: http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/12245 It's not restricted just to that bot; any code that uses the sanitize coverage and configures libc++ hits it. This CL fixes the issue. Reviewers: compnerd Subscribers: aizatsky Differential Revision: https://reviews.llvm.org/D24116 llvm-svn: 280335
* [XRay] Detect and emit sleds for sibling/tail callsDean Michael Berris2016-09-015-3/+100
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This change promotes the 'isTailCall(...)' member function to TargetInstrInfo as a query interface for determining on a per-target basis whether a given MachineInstr is a tail call instruction. We build upon this in the XRay instrumentation pass to emit special sleds for tail call optimisations, where we emit the correct kind of sled. The tail call sleds look like a mix between the function entry and function exit sleds. Form-wise, the sled comes before the "jmp" instruction that implements the tail call similar to how we do it for the function entry sled. Functionally, because we know this is a tail call, it behaves much like an exit sled -- i.e. at runtime we may use the exit trampolines instead of a different kind of trampoline. A follow-up change to recognise these sleds will be done in compiler-rt, so that we can start intercepting these initially as exits, but also have the option to have different log entries to more accurately reflect that this is actually a tail call. Reviewers: echristo, rSerge, majnemer Subscribers: mehdi_amini, dberris, llvm-commits Differential Revision: https://reviews.llvm.org/D23986 llvm-svn: 280334
* Fix typos in comments.George Burgess IV2016-09-011-3/+3
| | | | llvm-svn: 280333
* [libFuzzer] add -minimize_crash flag (to minimize crashers). also add two ↵Kostya Serebryany2016-09-015-8/+115
| | | | | | tests that I failed to commit last time llvm-svn: 280332
* [XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo.Dean Michael Berris2016-09-014-1/+34
| | | | | | | This change is broken out from D23986, where XRay detects tail call exits. llvm-svn: 280331
* [Sema] Don't diagnose an array type mismatch when the new or previousAkira Hatanaka2016-09-012-2/+35
| | | | | | | | | | | | declaration has a dependent type. This fixes a bug where clang errors out on a valid code. rdar://problem/28051467 Differential Revision: https://reviews.llvm.org/D24110 llvm-svn: 280330
* Revert "Add asm.js-style setjmp/longjmp handling for wasm"Heejin Ahn2016-09-016-1074/+186
| | | | | | This reverts commit r280302, it broke the integration tests. llvm-svn: 280329
* There exists at least one compiler on one platform that doesn't know how to ↵Enrico Granata2016-09-011-1/+1
| | | | | | | | assert on a std::shared_ptr<> Appease it by being very very very explicit about what I mean llvm-svn: 280328
* Change "memory find" over to using a variation of the Boyer–Moore search ↵Enrico Granata2016-09-014-16/+152
| | | | | | | | algorithm Fixes rdar://15455621 (and adds a test case for this command which - surprisingly and sadly - was not there originally) llvm-svn: 280327
* Support: Avoid errors with LLVM_FALLTHROUGH in clang 3.6 and below in C modeJustin Bogner2016-08-311-0/+4
| | | | | | | | | Older versions of clang defined __has_cpp_attribute in C mode, but would choke on scoped attributes, as per llvm.org/PR23435. Since we support building with clang all the way back to 3.1, we have to work around this issue. llvm-svn: 280326
* Fix the use of unitialized value while reporting double free in ASAN.Ivan Krasin2016-08-311-0/+1
| | | | | | | | | | | | | | | | Summary: This is a follow up to https://reviews.llvm.org/rL280201 where this issue was introduced. ASAN tests failed: http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/25219/steps/run%20asan%20tests/logs/stdio Reviewers: filcab Subscribers: kubabrecka Differential Revision: https://reviews.llvm.org/D24109 llvm-svn: 280325
* [StreamExecutor] getOrDie and dieIfError utilsJason Henline2016-08-314-37/+52
| | | | | | | | | | Reviewers: jlebar Subscribers: jprice, parallel_libs-commits Differential Revision: https://reviews.llvm.org/D24107 llvm-svn: 280312
* Add cast to appease windows builder. Fixes build break introduced in r280306.Nick Lewycky2016-08-311-1/+1
| | | | llvm-svn: 280311
* Fix the implementation of R_386_GOTPC and R_386_GOTOFF.Rafael Espindola2016-08-315-5/+15
| | | | | | | | They were both pointing to the start of the got, not the end. Fixes pr28924. llvm-svn: 280310
* Fix all tests under test/CXX (and test/Analysis) to pass if clang's defaultRichard Smith2016-08-3111-57/+241
| | | | | | C++ language standard is not C++98. llvm-svn: 280309
* DR259: Demote the pedantic error for an explicit instantiation after anRichard Smith2016-08-3111-59/+39
| | | | | | | | | explicit specialization to a warning for C++98 mode (this is a defect report resolution, so per our informal policy it should apply in C++98), and turn the warning on by default for C++11 and later. In all cases where it fires, the right thing to do is to remove the pointless explicit instantiation. llvm-svn: 280308
* [codeview] Have visitTypeBegin return the record type.Zachary Turner2016-08-319-23/+43
| | | | | | | | | | | | | | | | | | | Previously we were assuming that any visitation of types would necessarily be against a type we had binary data for. Reasonable assumption when were just reading PDBs and dumping them, but once we start writing PDBs from Yaml this breaks down, because we have no binary data yet, only Yaml, and from that we need to read the record kind and perform the switch based on that. So this patch does that. Instead of having the visitor switch on the kind that is already in the CVType record, we change the visitTypeBegin() method to return the Kind, and switch on the returned value. This way, the default implementation can still return the value from the CVType, but the implementation which visits Yaml records and serializes binary PDB type records can use the field in the Yaml as the source of the switch. llvm-svn: 280307
* Add -fprofile-dir= to clang.Nick Lewycky2016-08-3111-47/+134
| | | | | | | | | | | | | | | | | | | | | -fprofile-dir=path allows the user to specify where .gcda files should be emitted when the program is run. In particular, this is the first flag that causes the .gcno and .o files to have different paths, LLVM is extended to support this. -fprofile-dir= does not change the file name in the .gcno (and thus where lcov looks for the source) but it does change the name in the .gcda (and thus where the runtime library writes the .gcda file). It's different from a GCOV_PREFIX because a user can observe that the GCOV_PREFIX_STRIP will strip paths off of -fprofile-dir= but not off of a supplied GCOV_PREFIX. To implement this we split -coverage-file into -coverage-data-file and -coverage-notes-file to specify the two different names. The !llvm.gcov metadata node grows from a 2-element form {string coverage-file, node dbg.cu} to 3-elements, {string coverage-notes-file, string coverage-data-file, node dbg.cu}. In the 3-element form, the file name is already "mangled" with .gcno/.gcda suffixes, while the 2-element form left that to the middle end pass. llvm-svn: 280306
* Use getSize to find the size of a section. NFC.Rafael Espindola2016-08-312-8/+3
| | | | llvm-svn: 280305
* Fix the MSVC 2013 build by using Elf_Word instead of making a local typedefReid Kleckner2016-08-311-6/+4
| | | | llvm-svn: 280304
* [CMake] Increase stack size to 16MiB for all mingw executables.NAKAMURA Takumi2016-08-312-12/+11
| | | | llvm-svn: 280303
OpenPOWER on IntegriCloud