summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* Revert "Verifier: Reject any unknown named MD nodes in the llvm.dbg namespace."Adrian Prantl2016-10-053-48/+79
| | | | | | Forgot to add a testcase in r283390. llvm-svn: 283399
* Add an llvm-opt-report tool to generate basic source-annotated optimization ↵Hal Finkel2016-10-057-0/+771
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | summaries LLVM now has the ability to record information from optimization remarks in a machine-consumable YAML file for later analysis. This can be enabled in opt (see r282539), and D25225 adds a Clang flag to do the same. This patch adds llvm-opt-report, a tool to generate basic optimization "listing" files (annotated sources with information about what optimizations were performed) from one of these YAML inputs. D19678 proposed to add this capability directly to Clang, but this more-general YAML-based infrastructure was the direction we decided upon in that review thread. For this optimization report, I focused on making the output as succinct as possible while providing information on inlining and loop transformations. The goal here is that the source code should still be easily readable in the report. My primary inspiration here is the reports generated by Cray's tools (http://docs.cray.com/books/S-2496-4101/html-S-2496-4101/z1112823641oswald.html). These reports are highly regarded within the HPC community. Intel's compiler, for example, also has an optimization-report capability (https://software.intel.com/sites/default/files/managed/55/b1/new-compiler-optimization-reports.pdf). $ cat /tmp/v.c void bar(); void foo() { bar(); } void Test(int *res, int *c, int *d, int *p, int n) { int i; #pragma clang loop vectorize(assume_safety) for (i = 0; i < 1600; i++) { res[i] = (p[i] == 0) ? res[i] : res[i] + d[i]; } for (i = 0; i < 16; i++) { res[i] = (p[i] == 0) ? res[i] : res[i] + d[i]; } foo(); foo(); bar(); foo(); } D25225 adds -fsave-optimization-record (and -fsave-optimization-record=filename), and this would be used as follows: $ clang -O3 -o /tmp/v.o -c /tmp/v.c -fsave-optimization-record $ llvm-opt-report /tmp/v.yaml > /tmp/v.lst $ cat /tmp/v.lst < /tmp/v.c 2 | void bar(); 3 | void foo() { bar(); } 4 | 5 | void Test(int *res, int *c, int *d, int *p, int n) { 6 | int i; 7 | 8 | #pragma clang loop vectorize(assume_safety) 9 V4,2 | for (i = 0; i < 1600; i++) { 10 | res[i] = (p[i] == 0) ? res[i] : res[i] + d[i]; 11 | } 12 | 13 U16 | for (i = 0; i < 16; i++) { 14 | res[i] = (p[i] == 0) ? res[i] : res[i] + d[i]; 15 | } 16 | 17 I | foo(); 18 | 19 | foo(); bar(); foo(); I | ^ I | ^ 20 | } Each source line gets a prefix giving the line number, and a few columns for important optimizations: inlining, loop unrolling and loop vectorization. An 'I' is printed next to a line where a function was inlined, a 'U' next to an unrolled loop, and 'V' next to a vectorized loop. These are printed on the relevant code line when that seems unambiguous, or on subsequent lines when multiple potential options exist (messages, both positive and negative, from the same optimization with different column numbers are taken to indicate potential ambiguity). When on subsequent lines, a '^' is output in the relevant column. Annotated source for all relevant input files are put into the listing file (each starting with '<' and then the file name). You can disable having the unrolling/vectorization factors appear by using the -s flag. Differential Revision: https://reviews.llvm.org/D25262 llvm-svn: 283398
* Add exact number of streams for reserved stream #s.Rui Ueyama2016-10-052-12/+11
| | | | llvm-svn: 283397
* Fixes for libc++ std::unordered_map data formatter against trunkEnrico Granata2016-10-051-4/+30
| | | | | | Fixes rdar://28237467 llvm-svn: 283396
* Remove extra semicolonReid Kleckner2016-10-051-1/+1
| | | | llvm-svn: 283395
* Fix the build with MSVC 2013, still cannot default move ctors yetReid Kleckner2016-10-051-1/+2
| | | | | | Ten days. llvm-svn: 283394
* [DAG] change test to use 'unsafe' function attribute instead of global settingSanjay Patel2016-10-051-4/+11
| | | | | | But we have node-level FMF, so the next step is to fix this at the instruction/node-level. llvm-svn: 283393
* Add an empty IPI stream.Rui Ueyama2016-10-052-7/+18
| | | | | | | | With this, "llvm-pdbdump yaml -ipi-stream" prints out an IPI stream. Previously it crashed because it can't handle the case where IPI stream doesn't exist. llvm-svn: 283392
* Modify df_iterator to support post-order actionsDavid Callahan2016-10-0514-29/+48
| | | | | | | | | | | | Summary: This makes a change to the state used to maintain visited information for depth first iterator. We know assume a method "completed(...)" which is called after all children of a node have been visited. In all existing cases, this method does nothing so this patch has no functional changes. It will however allow a client to distinguish back from cross edges in a DFS tree. Reviewers: nadav, mehdi_amini, dberlin Subscribers: MatzeB, mzolotukhin, twoh, freik, llvm-commits Differential Revision: https://reviews.llvm.org/D25191 llvm-svn: 283391
* Verifier: Reject any unknown named MD nodes in the llvm.dbg namespace.Adrian Prantl2016-10-053-79/+48
| | | | | | | | | | | This came out of a discussion in https://reviews.llvm.org/D25285. There used to be various other llvm.dbg.* nodes, but we don't support upgrading them and we want to reserve the namespace for future uses. This also removes an entirely obsolete and bitrotted testcase for PR7662. llvm-svn: 283390
* [WebAssembly] Add binary-encoding opcode values to instruction descriptions.Dan Gohman2016-10-058-133/+147
| | | | llvm-svn: 283389
* [codeview] Translate bitpiece metadata to DEFRANGE_SUBFIELD* recordsReid Kleckner2016-10-054-52/+520
| | | | | | | | | | | | | This allows LLVM to describe locations of aggregate variables that have been split by SROA. Fixes PR29141 Reviewers: amccarth, majnemer Differential Revision: https://reviews.llvm.org/D25253 llvm-svn: 283388
* [Object] Fix a crash in Archive::child_iterator's default constructor.Lang Hames2016-10-052-5/+8
| | | | | | | | | | To be default constructible, Archive::child_iterator needs to be able to construct an Archive::Child with a null parent, however Archive::Child's constructor always dereferenced its Parent argument to compute the remaining archive size. This commit fixes Archive::Child's constructor to only do the size calculation when the parent is non-null. llvm-svn: 283387
* Convert some more aliasing and CI functions to StringRef.Zachary Turner2016-10-056-30/+22
| | | | llvm-svn: 283386
* Update some command aliasing functions to use StringRef.Zachary Turner2016-10-055-39/+35
| | | | llvm-svn: 283385
* Convert CommandObject constructors to StringRef.Zachary Turner2016-10-0526-173/+159
| | | | llvm-svn: 283384
* [ARM] Use __rt_div functions for divrem on WindowsMartin Storsjo2016-10-053-56/+68
| | | | | | | | | | | | | | | | | | | | This avoids falling back to calling out to the GCC rem functions (__moddi3, __umoddi3) when targeting Windows. The __rt_div functions have flipped the two arguments compared to the __aeabi_divmod functions. To match MSVC, we emit a check for division by zero before actually calling the library function (even if the library function itself also might do the same check). Not all calls to __rt_div functions for division are currently merged with calls to the same function with the same parameters for the remainder. This is more wasteful than a div + mls as before, but avoids calls to __moddi3. Differential Revision: https://reviews.llvm.org/D24076 llvm-svn: 283383
* Early continue. NFC.Rui Ueyama2016-10-051-9/+9
| | | | llvm-svn: 283382
* [Sparc] Implement UMUL_LOHI and SMUL_LOHI instead of MULHS/MULHU/MUL.James Y Knight2016-10-054-22/+8
| | | | | | | This is what the instruction-set actually provides, and the default expansions of the others into the lohi opcodes are good. llvm-svn: 283381
* Fixup the xfail situation on Windows.Zachary Turner2016-10-0517-8/+16
| | | | | | Xfails added and/or removed to reflect the current state of Windows. llvm-svn: 283380
* [compiler-rt] Enable building iOS by default.Anna Zaks2016-10-051-1/+1
| | | | llvm-svn: 283379
* [asan] Fixup: Switch to using dynamic shadow offset on iOSAnna Zaks2016-10-051-1/+1
| | | | | | Address lint comments. llvm-svn: 283378
* [ADT] Add missing const_iterator DenseSet::find() constVitaly Buka2016-10-052-11/+28
| | | | | | | | | | | | Summary: Probably overlooked. Reviewers: eugenis, dblaikie Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D24689 llvm-svn: 283377
* [asan] Reapply: Switch to using dynamic shadow offset on iOSAnna Zaks2016-10-051-2/+3
| | | | | | | | | | The VM layout is not stable between iOS version releases, so switch to dynamic shadow offset. This is the LLVM counterpart of https://reviews.llvm.org/D25218 Differential Revision: https://reviews.llvm.org/D25219 llvm-svn: 283376
* [asan] Reapply: Switch to using dynamic shadow offset on iOSAnna Zaks2016-10-054-7/+55
| | | | | | | | The VM layout is not stable between iOS version releases, so switch to dynamic shadow offset. Differential Revision: https://reviews.llvm.org/D25218 llvm-svn: 283375
* Improve the debug-info test created in r274263.Yunzhong Gao2016-10-051-3/+20
| | | | | | | | | | | | | This patch is related to r274263 or Phabricator/D21818. This patch aims to improve the test case added in the previous commit to verify specifically that the stack protector pass is adding the debug line info as intended. Before, the test only verified that the verifier pass does not crash. The current approach is to generate the assembly output and then look for the .loc directive. Differential Revision: https://reviews.llvm.org/D25290 llvm-svn: 283374
* [LV] Pass profitability analysis in vectorizer constructor (NFC)Matthew Simpson2016-10-051-23/+28
| | | | | | | | | The vectorizer already holds a pointer to one cost model artifact in a member variable (i.e., MinBWs). As we add more, it will be easier to communicate these artifacts to the vectorizer if we simply pass a pointer to the cost model instead. llvm-svn: 283373
* Remove trailing whitespace.Rui Ueyama2016-10-0520-221/+221
| | | | llvm-svn: 283372
* [RDF] Fix live def propagation through basic blockKrzysztof Parzyszek2016-10-052-45/+274
| | | | llvm-svn: 283371
* Convert various CommandInterpreter functions to StringRef.Zachary Turner2016-10-0511-297/+286
| | | | llvm-svn: 283370
* AMDGPU: Do not re-use tmpreg in spill/restore loweringMatthias Braun2016-10-051-2/+2
| | | | | | | | | The register scavenging code does not support multiple definitions of the same vreg. Differential Revision: https://reviews.llvm.org/D25220 llvm-svn: 283369
* [LV] Pass legality analysis in vectorizer constructor (NFC)Matthew Simpson2016-10-051-12/+12
| | | | | | | The vectorizer already holds a pointer to the legality analysis in a member variable, so it makes sense that we would pass it in the constructor. llvm-svn: 283368
* Store the hash in SectionPiece.Rafael Espindola2016-10-054-6/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This spreads out computing the hash and using it in a hash table. The speedups are: firefox master 6.811232891 patch 6.559280249 1.03841162939x faster chromium master 4.369323666 patch 4.33171853 1.00868134338x faster chromium fast master 1.856679971 patch 1.850617741 1.00327578725x faster the gold plugin master 0.32917962 patch 0.325711944 1.01064645023x faster clang master 0.558015452 patch 0.550284165 1.01404962652x faster llvm-as master 0.032563515 patch 0.032152077 1.01279662275x faster the gold plugin fsds master 0.356221362 patch 0.352772162 1.00977741549x faster clang fsds master 0.635096494 patch 0.627249229 1.01251060127x faster llvm-as fsds master 0.030183188 patch 0.029889544 1.00982430511x faster scylla master 3.071448906 patch 2.938484138 1.04524944215x faster This seems to be because we don't stall as much. When linking firefox stalled-cycles-frontend goes from 57.56% to 55.55%. With -O2 the difference is even more significant since we avoid recomputing the hash. For firefox we go from 9.990295265 to 9.149627521 seconds (1.09x faster). llvm-svn: 283367
* FastISel: Remove unused/un-overridden entry points. NFCI.Peter Collingbourne2016-10-053-38/+1
| | | | llvm-svn: 283366
* [LV] Remove obsolete comment (NFC)Matthew Simpson2016-10-051-3/+1
| | | | llvm-svn: 283365
* [LV] Use getScalarizationOverhead in memory instruction costs (NFC)Matthew Simpson2016-10-051-14/+10
| | | | | | | | | This patch refactors the cost estimation of scalarized loads and stores to reuse getScalarizationOverhead for the cost of the extractelement and insertelement instructions we might create. The existing code accounted for this cost, but it was functionally equivalent to the helper function. llvm-svn: 283364
* Removing optimization from the RUN lines and adjusting the checksNemanja Ivanovic2016-10-051-50/+2
| | | | | | to not rely on optimization. llvm-svn: 283363
* Add the ability to set breakpoints on named RenderScript reductionsLuke Drummond2016-10-052-40/+404
| | | | | | | | | | | | | | | | | | | | | | | | | | | - Add new `lldb_private::lldb_renderscript::RSReduceBreakpointResolver` class that can set breakpoints on kernels that are constituent functions of named reduction groups. Also support debugging of subsets of the the reduction group with the `-t, --function-role` flag which takes a comma-separated list of reduction function types outconverter,combiner,initializer,accumulator (defaults to all) - Add 2 new helper methods to `RenderScriptRuntime`, 1. `CreateReductionBreakpoint(name, types)`: instantiates a new RSReduceBreakpointResolver and inserts that resolver into the running process. 2. `PlaceBreakpointOnReduction`: which is a public helper function. - hook up the above functionality to the command-line with new `CommandObject*` classes that handle parsing of function roles and dispatch to the runtime. These are namespaced under the snappy `language renderscript reduction breakpoint ...` subcommand - [incidental] Factor multiple common uses of `FindFirstSymbolWithNameAndType(ConstString(".rs.info")` into static `IsRenderScriptScriptModule(ModuleSP module)` function, and replace original uses. llvm-svn: 283362
* fix documentation comments; NFCSanjay Patel2016-10-052-46/+6
| | | | llvm-svn: 283361
* Comment out failing test while I figure out who is at faultMarshall Clow2016-10-051-1/+1
| | | | llvm-svn: 283360
* Allow the caller to pass in the hash.Rafael Espindola2016-10-052-4/+7
| | | | | | | If the caller already has the hash we don't have to compute it. This will be used in lld. llvm-svn: 283359
* Fix some test failures due to the recent Breakpoint patch.Zachary Turner2016-10-051-9/+3
| | | | llvm-svn: 283358
* Compact SectionPiece.Rafael Espindola2016-10-053-8/+14
| | | | | | | | | It is pretty easy to get the data from the InputSection, so we don't have to store it. This opens the way for storing the hash instead. llvm-svn: 283357
* Mark LWG#2679 as completeMarshall Clow2016-10-051-2/+2
| | | | llvm-svn: 283356
* Improve DEBUG_VALUE assembly comments for spilled bitpiecesReid Kleckner2016-10-052-7/+91
| | | | | | | | Previously we would give up when we saw the bitpiece DWARF expression and print "[complex expression]" when actually we handled bitpiece expressions outside the loop. llvm-svn: 283355
* [LV] Add helper function for predicated block probability (NFC)Matthew Simpson2016-10-051-13/+25
| | | | | | | | | | | | The cost model has to estimate the probability of executing predicated blocks. However, we currently always assume predicated blocks have a 50% chance of executing (this value is hardcoded in several places throughout the code). Since we always use the same value, this patch adds a helper function for getting this uniform probability. The function simplifies some comments and makes our assumptions more clear. In the future, we may want to extend this with actual block probability information if it's available. llvm-svn: 283354
* [mips][ias] fix li macro when values are negated with ~Simon Dardis2016-10-054-8/+44
| | | | | | | | | | | | | | | The integrated assembler evaluates the expressions such as ~0x80000000 to 0xffffffff7fffffff early in the parsing process. This patch adds compatibility with gas so that li loads the expected value (0x7fffffff) in those cases. This only occurs iff all the upper 32bits are set and maintains existing checks by not truncating the result down to 32 bits if any of the the upper bits are not set. Reviewers: dsanders, zoran.jovanovic Differential Review: https://reviews.llvm.org/D23399 llvm-svn: 283353
* Removing the new Minidump pluginDimitar Vlahovski2016-10-0520-820/+25
| | | | | | | | | | | | | | | | | | | | | | | Tests are failing and build is failing on windows and darwin. Will fix and commit it later ------------------------------------------------------------- Revert "xfailing minidump tests again ... :(" This reverts commit 97eade002c9e43c1e0d11475a4888083a8965044. Revert "Fixing new Minidump plugin tests" This reverts commit 0dd93b3ab39c8288696001dd50b9a093b813b09c. Revert "Add the new minidump files to the Xcode project." This reverts commit 2f638a1d046b8a88e61e212220edc40aecd2ce44. Revert "xfailing tests for Minidump plugin" This reverts commit 99311c0b22338a83e6a00c4fbddfd3577914c003. Revert "Adding a new Minidump post-mortem debugging plugin" This reverts commit b09a7e4dae231663095a84dac4be3da00b03a021. llvm-svn: 283352
* Try to fix Android build.Zachary Turner2016-10-051-1/+1
| | | | | | | Seems it doesn't like the implicit conversion from StringRef[] to ArrayRef<StringRef>. llvm-svn: 283351
* [LV] Add isScalarWithPredication helper function (NFC)Matthew Simpson2016-10-051-11/+23
| | | | | | | | | This patch adds a single helper function for checking if an instruction will be scalarized with predication. Such instructions include conditional stores and instructions that may divide by zero. Existing checks have been updated to use the new function. llvm-svn: 283350
OpenPOWER on IntegriCloud