summaryrefslogtreecommitdiffstats
path: root/llvm/utils
Commit message (Collapse)AuthorAgeFilesLines
...
* [TableGen] Ensure proper ordering of subtarget feature namesKrzysztof Parzyszek2017-03-061-4/+17
| | | | llvm-svn: 297039
* Fix bug in bisect-skip-count not using passed-in argumentsDaniel Berlin2017-03-041-1/+1
| | | | llvm-svn: 296961
* Teach lit to expand glob expressions.Zachary Turner2017-03-033-9/+58
| | | | | | | | | | | This will enable removing hacks throughout the codebase in clang and compiler-rt that feed multiple inputs to a testing utility by globbing, all of which are either disabled on Windows currently or using xargs / find hacks. Differential Revision: https://reviews.llvm.org/D30380 llvm-svn: 296904
* New tool: opt-diff.pyAdam Nemet2017-03-023-3/+88
| | | | | | | | | | This tool allows generating the different between two optimization record files. The result is a YAML file too that can be visualized with opt-viewer. This is very useful to see what optimization were added and removed by a change. llvm-svn: 296767
* [opt-viewer] Treat remarks with different attributes as differentAdam Nemet2017-03-021-1/+16
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We used to exclude arguments but for a diffed YAML file, it's interesting to show these as changes. Turns out this also affects gvn/LoadClobbered because we used to squash multiple entries of this on the same line even if they reported clobbers by *different* instructions. This increases the number of unique entries now and the share of gvn/LoadClobbered. Total number of remarks 902287 Top 10 remarks by pass: inline 43% gvn 37% licm 11% loop-vectorize 4% asm-printer 3% regalloc 1% loop-unroll 1% inline-cost 0% slp-vectorizer 0% loop-delete 0% Top 10 remarks: gvn/LoadClobbered 33% inline/Inlined 16% inline/CanBeInlined 14% inline/NoDefinition 7% licm/Hoisted 6% licm/LoadWithLoopInvariantAddressInvalidated 5% gvn/LoadElim 3% asm-printer/InstructionCount 3% inline/TooCostly 2% loop-vectorize/MissedDetails 2% llvm-svn: 296766
* [opt-viewer] Don't use __getattr__ for missing YAML attributesAdam Nemet2017-03-021-5/+6
| | | | | | | __getattr__ does not work well with debugging. If the attribute function has a run-time error, a missing attribute is reported instead. llvm-svn: 296765
* [opt-viewer] Sort entries with identical hotness by source lineAdam Nemet2017-03-021-1/+1
| | | | | | | We want entries that are close to each other in the source appear next to each other. llvm-svn: 296764
* New tool: opt-stats.pyAdam Nemet2017-03-013-188/+246
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | I am planning to use this tool to find too noisy (missed) optimization remarks. Long term it may actually be better to just have another tool that exports the remarks into an sqlite database and perform queries like this in SQL. This splits out the YAML parsing from opt-viewer.py into a new Python module optrecord.py. This is the result of the script on the LLVM testsuite: Total number of remarks 714433 Top 10 remarks by pass: inline 52% gvn 24% licm 13% loop-vectorize 5% asm-printer 3% loop-unroll 1% regalloc 1% inline-cost 0% slp-vectorizer 0% loop-delete 0% Top 10 remarks: gvn/LoadClobbered 20% inline/Inlined 19% inline/CanBeInlined 18% inline/NoDefinition 9% licm/LoadWithLoopInvariantAddressInvalidated 6% licm/Hoisted 6% asm-printer/InstructionCount 3% inline/TooCostly 3% gvn/LoadElim 3% loop-vectorize/MissedDetails 2% Beside some refactoring, I also changed optrecords not to use context to access global data (max_hotness). Because of the separate module this would have required splitting context into two. However it's not possible to access the optrecord context from the SourceFileRenderer when calling back to Remark.RelativeHotness. llvm-svn: 296682
* [opt-viewer] Suggest installing the faster parser (libYAML)Adam Nemet2017-03-011-3/+2
| | | | llvm-svn: 296553
* [opt-viewer] Handle column number 0Adam Nemet2017-02-281-1/+1
| | | | | | | The asm-printer now emits remarks with function location which have unspecified (0) source column number. llvm-svn: 296547
* This script was meant to be committed with the DebugCounter changes.Daniel Berlin2017-02-281-0/+75
| | | | llvm-svn: 296425
* [utils] allow auto-generation of checks for thumb triplesSanjay Patel2017-02-241-0/+2
| | | | | | | If there's some reason not to do this, feel free to revert and/or fix, but for the cases I'm looking at, the script appears to do fine for these targets. llvm-svn: 296181
* Fixed IntOperandMatcher::emitCxxPredicateExpr argumentsSimon Pilgrim2017-02-241-1/+1
| | | | | | Extra const in the StringRef argument meant that MSVC complained about it not correctly overriding from OperandPredicateMatcher::emitCxxPredicateExpr (which didn't have the const) llvm-svn: 296138
* [globalisel] Decouple src pattern operands from dst pattern operands.Daniel Sanders2017-02-241-53/+282
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Summary: This isn't testable for AArch64 by itself so this patch also adds support for constant immediates in the pattern and physical register uses in the result. The new IntOperandMatcher matches the constant in patterns such as '(set $rd:GPR32, (G_XOR $rs:GPR32, -1))'. It's always safe to fold immediates into an instruction so this is the first rule that will match across multiple BB's. The Renderer hierarchy is responsible for adding operands to the result instruction. Renderers can copy operands (CopyRenderer) or add physical registers (in particular %wzr and %xzr) to the result instruction in any order (OperandMatchers now import the operand names from SelectionDAG to allow renderers to access any operand). This allows us to emit the result instruction for: %1 = G_XOR %0, -1 --> %1 = ORNWrr %wzr, %0 %1 = G_XOR -1, %0 --> %1 = ORNWrr %wzr, %0 although the latter is untested since the matcher/importer has not been taught about commutativity yet. Added BuildMIAction which can build new instructions and mutate them where possible. W.r.t the mutation aspect, MatchActions are now told the name of an instruction they can recycle and BuildMIAction will emit mutation code when the renderers are appropriate. They are appropriate when all operands are rendered using CopyRenderer and the indices are the same as the matcher. This currently assumes that all operands have at least one matcher. Finally, this change also fixes a crash in AArch64InstructionSelector::select() caused by an immediate operand passing isImm() rather than isCImm(). This was uncovered by the other changes and was detected by existing tests. Depends on D29711 Reviewers: t.p.northover, ab, qcolombet, rovka, aditya_nandakumar, javed.absar Reviewed By: rovka Subscribers: aemerson, dberris, kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D29712 llvm-svn: 296131
* Fix missing call to base class constructor in r296121.Daniel Sanders2017-02-241-1/+3
| | | | | | | The 'Kind' member used in RTTI for InstructionPredicateMatcher was not initialized but went undetected since I always ended up with the correct value. llvm-svn: 296126
* [globalisel] Sort RuleMatchers by priority.Daniel Sanders2017-02-241-2/+165
| | | | | | | | | | | | | | | | | | | | | | Summary: This makes more important rules have priority over less important rules. For example, '%a = G_ADD $b:s64, $c:s64' has priority over '%a = G_ADD $b:s32, $c:s32'. Previously these rules were emitted in the correct order by chance. NFC in this patch but it is required to make the next patch work correctly. Depends on D29710 Reviewers: t.p.northover, ab, qcolombet, aditya_nandakumar, rovka Reviewed By: ab, rovka Subscribers: javed.absar, dberris, llvm-commits, kristof.beyls Differential Revision: https://reviews.llvm.org/D29711 llvm-svn: 296121
* Add some testcases for bitfields with illegal widths.Eli Friedman2017-02-241-0/+1
| | | | | | | | clang will generate IR like this for input using packed bitfields; very simple semantically, but it's a bit tricky to actually generate good code. llvm-svn: 296080
* tablegen: Fix android buildPavel Labath2017-02-211-1/+2
| | | | | | use llvm::to_string instead of std:: version. llvm-svn: 295711
* Add a wrapper around copy_if in STLExtras; NFCSanjoy Das2017-02-211-4/+3
| | | | | | I will add one more use for this in a later change. llvm-svn: 295685
* [globalisel] OperandPredicateMatcher's shouldn't need to generate the ↵Daniel Sanders2017-02-201-17/+18
| | | | | | | | | | | | | | | | | | | | | | | | MachineOperand expr. NFC Summary: Each OperandPredicateMatcher shouldn't need to know how to generate the expression to reference a MachineOperand. The OperandMatcher should provide it. In addition to separating responsibilities, this also lays some groundwork for decoupling source patterns from destination patterns to allow invented operands or operands provided by GlobalISel's equivalent to the ComplexPattern<> class. Depends on D29709 Reviewers: t.p.northover, ab, rovka, qcolombet, aditya_nandakumar Reviewed By: ab Subscribers: dberris, kristof.beyls, llvm-commits, igorb Differential Revision: https://reviews.llvm.org/D29710 llvm-svn: 295668
* [globalisel] Separate the SelectionDAG importer from the emitter. NFCDaniel Sanders2017-02-201-5/+11
| | | | | | | | | | | | | | | | Summary: In the near future the rules will be sorted between these two steps to ensure that more important rules are not prevented by less important ones. Reviewers: t.p.northover, ab, rovka, qcolombet, aditya_nandakumar Reviewed By: ab Subscribers: dberris, kristof.beyls, llvm-commits Differential Revision: https://reviews.llvm.org/D29709 llvm-svn: 295661
* [X86][AVX] Extend hasVEX_WPrefix bit to accept WIG value (W Ignore) + update ↵Ayman Musa2017-02-202-11/+15
| | | | | | | | | | | all AVX instructions with the new value. Add WIG value to all of AVX instructions which ignore the W-bit in their encoding, instead of giving them the default value of 0. This patch is needed for a follow up work on EVEX2VEX pass (replacing EVEX encoded instructions with their corresponding VEX version when possible). Differential Revision: https://reviews.llvm.org/D29876 llvm-svn: 295643
* [TableGen] Make sure EnforceSameSize populates the type sets if necessary.Craig Topper2017-02-181-0/+6
| | | | | | This was found by another commit I'm working on. llvm-svn: 295578
* opt-viewer: Fix syntax highlightingBrian Cain2017-02-181-9/+18
| | | | | | | | | | | | | | | Syntax highlighting has been done line-at-a-time. Done this way, the lexer resets the context at each line, distorting the formatting. This change will render the whole file at once and feed the highlighted text line-at-a-time to be wrapped by the SourceFileRenderer. Leading/trailing newlines were being ignored by Pygments but since each line was rendered in its own row, it didn't matter. This bug was masked by the line-at-a-time algorithm. So now we need to add "stripnl=False" to the CppLexer to change its behavior to match the expectation. llvm-svn: 295546
* [Tablegen] Instrumenting table gen DAGGenISelDAGAditya Nandakumar2017-02-141-4/+135
| | | | | | | | | | To help assist in debugging ISEL or to prioritize GlobalISel backend work, this patch adds two more tables to <Target>GenISelDAGISel.inc - one which contains the patterns that are used during selection and the other containing include source location of the patterns Enabled through CMake varialbe LLVM_ENABLE_DAGISEL_COV llvm-svn: 295081
* [opt-viewer] For single-process, fall back on map instead of Pool.mapAdam Nemet2017-02-141-7/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This allows for nicer backtrace and debugging when -j1 is passed: $ opt-viewer.py CMakeFiles/LLVMScalarOpts.dir/LoopVersioningLICM.cpp.opt.yaml html Traceback (most recent call last): File "/org/llvm/utils/opt-viewer/opt-viewer.py", line 405, in <module> generate_report(pmap, all_remarks, file_remarks, args.source_dir, args.output_dir) File "/org/llvm/utils/opt-viewer/opt-viewer.py", line 362, in generate_report pmap(_render_file_bound, file_remarks.items()) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 251, in map return self.map_async(func, iterable, chunksize).get() File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/multiprocessing/pool.py", line 567, in get raise self._value Exception: blah $ opt-viewer.py -j 1 CMakeFiles/LLVMScalarOpts.dir/LoopVersioningLICM.cpp.opt.yaml html Traceback (most recent call last): File "/org/llvm/utils/opt-viewer/opt-viewer.py", line 405, in <module> generate_report(pmap, all_remarks, file_remarks, args.source_dir, args.output_dir) File "/org/llvm/utils/opt-viewer/opt-viewer.py", line 362, in generate_report pmap(_render_file_bound, file_remarks.items()) File "/org/llvm/utils/opt-viewer/opt-viewer.py", line 317, in _render_file SourceFileRenderer(source_dir, output_dir, filename).render(remarks) File "/org/llvm/utils/opt-viewer/opt-viewer.py", line 168, in __init__ raise Exception("blah") Exception: blah llvm-svn: 295080
* vim: add `returned` keywordSaleem Abdulrasool2017-02-101-0/+1
| | | | | | | The `returned` keyword was added in SVN r179925. Update the vim syntax rules. llvm-svn: 294808
* opt-viewer: fix HtmlFormatter encodingAdam Nemet2017-02-101-1/+1
| | | | | | | | | | | | | | | | Summary: Small fix to HtmlFormatter, defaults to ascii encoding, so utf-8 output may get `UnicodeEncodeError: 'ascii' codec can't encode character ... ordinal not in range(128)` during write. Patch by Brian Cain! Reviewers: anemet, fhahn Reviewed By: anemet Subscribers: llvm-commits Differential Revision: https://reviews.llvm.org/D29802 llvm-svn: 294710
* [GlobalISel] Return an Expected<RuleMatcher> for each SDAG pattern. NFC.Ahmed Bougacha2017-02-101-55/+63
| | | | | | | | | | | | | | Instead of emitting the matcher code directly, return the rule matcher and the skip reason as an Expected<RuleMatcher>. This will let us record all matchers and process them before emission. It's a somewhat unconventional use of Error, but it's nicer than, say, std::pair, because of the bool conversions. Differential Revision: https://reviews.llvm.org/D29743 llvm-svn: 294706
* [TableGen][AsmWriterEmitter] Use a deterministic order to sort InstrAliasesQuentin Colombet2017-02-101-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | Inside an alias group, when ordering instruction aliases, we rely on the priority field to sort them. When the priority is not set or more generally when there is a tie between two aliases, we used to rely on the lexicographic order. However, this order can change for the anonymous records when more instruction, intrinsic, etc. are inserted. For instance, given two anonymous records r1 and r2 with respective name A_999 and A_1000, their lexicography order will be r2 then r1. Now, if an instruction is added before them, their name will become respectively A_1000 and A_1001, thus the lexicography order will be r1 then r2, i.e., it changed. If that happens in an alias group, the assembly output would prefer a different alias for no apparent good reasons. A way to fix that is to use proper priority for all aliases, but we can also make the tie breaker comparison smarter and use a deterministic ordering. This is what this patch does. llvm-svn: 294695
* [CMake] Fix pthread handling for out-of-tree buildsEric Fiselier2017-02-101-2/+2
| | | | | | | | | | | | | | | LLVM defines `PTHREAD_LIB` which is used by AddLLVM.cmake and various projects to correctly link the threading library when needed. Unfortunately `PTHREAD_LIB` is defined by LLVM's `config-ix.cmake` file which isn't installed and therefore can't be used when configuring out-of-tree builds. This causes such builds to fail since `pthread` isn't being correctly linked. This patch attempts to fix that problem by renaming and exporting `LLVM_PTHREAD_LIB` as part of`LLVMConfig.cmake`. I renamed `PTHREAD_LIB` because It seemed likely to cause collisions with downstream users of `LLVMConfig.cmake`. llvm-svn: 294690
* [utils] coverage: Add help text about the --restrict flag (NFC)Vedant Kumar2017-02-091-1/+5
| | | | | | | | | | Passing the --restrict flag to the coverage prep script before other positional arguments is wrong, because it prevents the argparse module from telling apart arguments to --restrict versus positional arguments. Pointed out by Sean Callanan! llvm-svn: 294616
* [GlobalISel] Simplify StringRef parameters. NFC.Ahmed Bougacha2017-02-091-9/+8
| | | | | | 'const' on StringRef parameters adds no guarantees. Remove it. llvm-svn: 294555
* Revert r294437 as it broke an asan buildbot.Amara Emerson2017-02-081-7/+2
| | | | llvm-svn: 294523
* build_llvm_package.bat: Build teh clang-format plugin separatelyHans Wennborg2017-02-081-1/+11
| | | | | | | | | | | In r293373 we switched the build to linking dynamically against the Universal CRT and include the redistributables in the installer. However, clang-format.exe is copied into the vsix and needs to be statically linked. This commit makes us build the plugin in a separate step that uses static linking. llvm-svn: 294513
* [AArch64][TableGen] Skip tied result operands for InstAliasAmara Emerson2017-02-081-2/+7
| | | | | | | | | | | | | | | | | | | | | | | This patch checks the number of operands in the resulting instruction instead of just the alias, then skips over tied operands when generating the printing method. This allows us to generate the preferred assembly syntax for the AArch64 'ins' instruction, which should always be displayed as 'mov' according to the ARMARM. Several unit tests have changed as a result, but only to reflect the preferred disassembly. Some other InstAlias patterns (movk/bic/orr) needed a slight adjustment to stop them becoming the default and breaking other unit tests. Patch by Graham Hunter. Differential Revision: https://reviews.llvm.org/D29219 llvm-svn: 294437
* Move mnemonicIsValid to Mips target.Craig Topper2017-02-081-24/+0
| | | | | | | | | | | | | | | | | | | | Summary: The Mips target is the only user of mnemonicIsValid. This patch moves this method from AsmMatcherEmitter.cpp to MipsAsmParser.cpp, getting rid of the method in all other targets where it generated warnings about an unused function. Patch by Gonsolo. Reviewers: craig.topper Reviewed By: craig.topper Subscribers: sdardis Differential Revision: https://reviews.llvm.org/D28748 llvm-svn: 294400
* [TableGen] Use less stack in DAGISelMatcherOptJon Chesterfield2017-02-061-9/+15
| | | | | | | | Refactor a helper function, FactorNodes, to search for a push node in constant space. This resolves a problem in a not-yet-upstreamed backend where a recursive pattern blew the call stack (at a depth of 255) under a debug build of tablegen. No functional change so no new test coverage. The change is minimal to avoid disturbing existing behaviour. Differential Revision: https://reviews.llvm.org/D29080 llvm-svn: 294230
* Add lld to the test-release.sh scriptDimitry Andric2017-02-041-1/+9
| | | | | | | | | | | | | | | Building lld is enabled by default, but it can be disabled using the -no-lld option. Reviewers: tstellarAMD, rengolin, hans Reviewed By: hans Subscribers: grosser, wdng, emaste, llvm-commits Differential Revision: https://reviews.llvm.org/D29539 llvm-svn: 294102
* [GlobalISel] Add a few comments to the tablegen backend. NFC.Ahmed Bougacha2017-02-041-4/+14
| | | | | | Based on a review of D29478 by Kristof Beyls. llvm-svn: 294077
* [GlobalISel] Print the matched patterns using an action.Ahmed Bougacha2017-02-041-8/+16
| | | | | | | | This lets us split out PatternToMatch from the top-level RuleMatcher, where it doesn't really belong. That, in turn, lets us eventually generate RuleMatchers from non-SelectionDAG sources. llvm-svn: 294076
* [GlobalISel] Separate matchers with newlines in emitted selector. NFC.Ahmed Bougacha2017-02-041-4/+4
| | | | | | | We don't try very hard to format the emitted code, but newlines are an easy way to make it more readable. llvm-svn: 294074
* [globalisel] Fix missing break.Daniel Sanders2017-02-031-0/+1
| | | | | | The instruction selector has been emitting the register bank information too. llvm-svn: 294007
* [opt-viewer] HTML-escape function namesAdam Nemet2017-02-021-2/+5
| | | | llvm-svn: 293869
* [opt-viewer] Alternating row background colors on index pageAdam Nemet2017-02-022-6/+12
| | | | llvm-svn: 293868
* [globalisel] Make the MatchAction hierarchy consistent with the matchers. NFC.Daniel Sanders2017-02-011-17/+27
| | | | | | | | | | Reviewers: aditya_nandakumar, rovka, t.p.northover, qcolombet, ab Subscribers: dberris, llvm-commits, kristof.beyls Differential Revision: https://reviews.llvm.org/D29321 llvm-svn: 293760
* [Utils] Update comment in vimrcDan Gohman2017-01-311-2/+2
| | | | | | | | | | Fixed wrong paths in comments for *.vim files. Patch By: Bruno Rosa (brunoalr) Differential Revision: https://reviews.llvm.org/D29174 llvm-svn: 293693
* TableGen: use fully qualified name for StringLiteralSaleem Abdulrasool2017-01-311-2/+2
| | | | | | | | | Use the qualified name for StringLiteral (llvm::StringLiteral) when generating the sources. This is needed as the generated files may be used out-of-tree (e.g. swift) where you may not have a `using namespace llvm;` resulting in an undefined lookup. llvm-svn: 293577
* Fix the GCC build.Benjamin Kramer2017-01-301-2/+2
| | | | | | This is fairly ugly, but apparently GCC still doesn't understand C++11. llvm-svn: 293535
* Turn a TableGen FastISelEmitter warning into an error.Michael Kuperstein2017-01-301-7/+4
| | | | | | | | | | | | | Tablegen emitted a warning when the fast isel emitter created dead code by emitting a pattern that has no predicate before a pattern that has one. This should be an error but was originally only a warning because the X86 backend had a buggy definition that unintentionally caused this to be hit (PR21575). That has been fixed a while ago (r222094), so it's safe to upgrade the warning to an error. llvm-svn: 293534
OpenPOWER on IntegriCloud