summaryrefslogtreecommitdiffstats
path: root/llvm
Commit message (Collapse)AuthorAgeFilesLines
...
* LoopVectorize: Use the dependence test utility classArnold Schwaighofer2013-06-244-234/+328
| | | | | | | | | | | | | | | | | | | | | | | | | | | We now no longer need alias analysis - the cases that alias analysis would handle are now handled as accesses with a large dependence distance. We can now vectorize loops with simple constant dependence distances. for (i = 8; i < 256; ++i) { a[i] = a[i+4] * a[i+8]; } for (i = 8; i < 256; ++i) { a[i] = a[i-4] * a[i-8]; } We would be able to vectorize about 200 more loops (in many cases the cost model instructs us no to) in the test suite now. Results on x86-64 are a wash. I have seen one degradation in ammp. Interestingly, the function in which we now vectorize a loop is never executed so we probably see some instruction cache effects. There is a 2% improvement in h264ref. There is one or the other TSCV loop kernel that speeds up. radar://13681598 llvm-svn: 184685
* LoopVectorize: Add utility class for checking dependency among accessesArnold Schwaighofer2013-06-241-0/+379
| | | | | | | | | | | | This class checks dependences by subtracting two Scalar Evolution access functions allowing us to catch very simple linear dependences. The checker assumes source order in determining whether vectorization is safe. We currently don't reorder accesses. Positive true dependencies need to be a multiple of VF otherwise we impede store-load forwarding. llvm-svn: 184684
* LoopVectorize: Add utility class for building sets of dependent accessesArnold Schwaighofer2013-06-241-0/+247
| | | | | | | Sets of dependent accesses are built by unioning sets based on underlying objects. This class will be used by the upcoming dependence checker. llvm-svn: 184683
* SLP Vectorizer: Add support for vectorizing parts of the tree.Nadav Rotem2013-06-242-5/+71
| | | | | | | | | | | | Untill now we detected the vectorizable tree and evaluated the cost of the entire tree. With this patch we can decide to trim-out branches of the tree that are not profitable to vectorizer. Also, increase the max depth from 6 to 12. In the worse possible case where all of the code is made of diamond-shaped graph this can bring the cost to 2**10, but diamonds are not very common. llvm-svn: 184681
* Fix tail merging to assign the (more) correct BasicBlock when splitting.Andrew Trick2013-06-243-7/+16
| | | | | | | | | | | This makes it possible to write unit tests that are less susceptible to minor code motion, particularly copy placement. block-placement.ll covers this case with -pre-RA-sched=source which will soon be default. One incorrectly named block is already fixed, but without this fix, enabling new coalescing and scheduling would cause more failures. llvm-svn: 184680
* SLP Vectorizer: Fix a bug in the code that does CSE on the generated gather ↵Nadav Rotem2013-06-232-4/+61
| | | | | | | | sequences. Make sure that we don't replace and RAUW two sequences if one does not dominate the other. llvm-svn: 184674
* SLP Vectorizer: Erase instructions outside the vectorizeTree method.Nadav Rotem2013-06-231-3/+11
| | | | | | The RAII builder location guard is saving a reference to instructions, so we can't erase instructions during vectorization. llvm-svn: 184671
* DebugInfo: PR14404: Avoid truncating 64 bit values into 32 bits for ↵David Blaikie2013-06-235-8/+45
| | | | | | ULEB128/SLEB128 generation llvm-svn: 184669
* AArch64: fix overzealous NEXTing for Windows testing.Tim Northover2013-06-231-3/+3
| | | | llvm-svn: 184667
* Add MI-Sched support for x86 macro fusion.Andrew Trick2013-06-233-0/+272
| | | | | | | | This is an awful implementation of the target hook. But we don't have abstractions yet for common machine ops, and I don't see any quick way to make it table-driven. llvm-svn: 184664
* SLP Vectorizer: Implement a simple CSE optimization for the gather sequences.Nadav Rotem2013-06-232-24/+130
| | | | llvm-svn: 184660
* SLP Vectorizer: Implement multi-block slp-vectorization.Nadav Rotem2013-06-227-1360/+1220
| | | | | | | | | Rewrote the SLP-vectorization as a whole-function vectorization pass. It is now able to vectorize chains across multiple basic blocks. It still does not vectorize PHIs, but this should be easy to do now that we scan the entire function. I removed the support for extracting values from trees. We are now able to vectorize more programs, but there are some serious regressions in many workloads (such as flops-6 and mandel-2). llvm-svn: 184647
* Replace with a shorter test case produced by Doug Gillmore.Reed Kotler2013-06-221-6392/+28
| | | | llvm-svn: 184645
* DebugInfo: Support (using GNU extensions) for template template parameters ↵David Blaikie2013-06-225-33/+133
| | | | | | and parameter packs llvm-svn: 184643
* The getRegForInlineAsmConstraint function should only accept MVT value types.Chad Rosier2013-06-2226-28/+28
| | | | llvm-svn: 184642
* Revert "FunctionAttrs: Merge attributes once instead of doing it for every ↵Benjamin Kramer2013-06-221-46/+32
| | | | | | | | argument." It doesn't work as I intended it to. This reverts commit r184638. llvm-svn: 184641
* FunctionAttrs: Merge attributes once instead of doing it for every argument.Benjamin Kramer2013-06-221-32/+46
| | | | | | It has become an expensive operation. No functionality change. llvm-svn: 184638
* RelocVisitor: Add another PPC64 relocation that occurs in dwarf output.Benjamin Kramer2013-06-221-0/+6
| | | | | | Should bring the ppc64 buildbot back to life. llvm-svn: 184633
* Create the file with the right permissions instead of setting it afterwards.Rafael Espindola2013-06-221-9/+1
| | | | | | Removes the last use of PathV1.h in llvm-ar. llvm-svn: 184630
* [yaml2obj][ELF] Make symbol table top-level key.Sean Silva2013-06-225-43/+40
| | | | | | | | | Although in reality the symbol table in ELF resides in a section, the standard requires that there be no more than one SHT_SYMTAB. To enforce this constraint, it is cleaner to group all the symbols under a top-level `Symbols` key on the object file. llvm-svn: 184627
* [yaml2obj][ELF] Narrow parameter.Sean Silva2013-06-221-6/+6
| | | | | | The full ELFYAML::Section isn't needed. llvm-svn: 184626
* [yaml2obj][ELF] Don't special case writing these.Sean Silva2013-06-221-2/+2
| | | | | | | Just add them to the vector of section headers like the rest of the section headers. llvm-svn: 184624
* [yaml2obj][ELF] Make this "type switch" actually readable.Sean Silva2013-06-221-7/+20
| | | | llvm-svn: 184623
* [yaml2obj][ELF] Align section contents in the output.Sean Silva2013-06-221-8/+17
| | | | | | | | | | The improperly aligned section content in the output was causing buildbot failures. This should fix them. Incidentally, this results in a simpler and more robust API for ContiguousBlobAccumulator. llvm-svn: 184621
* Prevent LiveRangeEdit from deleting bundled instructions.Andrew Trick2013-06-221-0/+4
| | | | | | | | | We have no targets on trunk that bundle before regalloc. However, we have been advertising regalloc as bundle safe for use with out-of-tree targets. We need to at least contain the parts of the code that are still unsafe. llvm-svn: 184620
* Reapply documentation changes from r184584.Benjamin Kramer2013-06-211-0/+7
| | | | llvm-svn: 184609
* This was a nifty test, but remove it.Sean Silva2013-06-211-6/+0
| | | | | | | | | | | | | | It wouldn't really test anything that doesn't already have a more targeted test: `yaml2obj-elf-section-basic.yaml`: Already tests that section content is correctly passed though. `yaml2obj-elf-symbol-basic.yaml` (this file): Tests that the st_value and st_size attributes of `main` are set correctly. Between those two tests, disassembling the file doesn't really add anything, so just remove mention of disassembling the file. llvm-svn: 184607
* Revert "Put r184469 disassembler test back on X86"Sean Silva2013-06-212-46/+15
| | | | | | | | | This reverts commit r184602. In an upcoming commit, I will just remove the disassembler part of the test; it was mostly just a "nifty" thing marking a milestone but it doesn't test anything that isn't tested elsewhere. llvm-svn: 184606
* DebugInfo: Don't lose unreferenced non-trivial by-value parametersDavid Blaikie2013-06-215-11/+76
| | | | | | | | | | | | A FastISel optimization was causing us to emit no information for such parameters & when they go missing we end up emitting a different function type. By avoiding that shortcut we not only get types correct (very important) but also location information (handy) - even if it's only live at the start of a function & may be clobbered later. Reviewed/discussion by Evan Cheng & Dan Gohman. llvm-svn: 184604
* Put r184469 disassembler test back on X86Renato Golin2013-06-212-15/+46
| | | | llvm-svn: 184602
* Convert some uses of PathV1.h in ArchiveWriter.cpp.Rafael Espindola2013-06-212-28/+29
| | | | llvm-svn: 184599
* [yaml2obj][ELF] Don't do disassembly in this test.Sean Silva2013-06-211-1/+2
| | | | | | | | | This was causing buildbot failures when build without X86 support. Is there a way to conditionalize the test on the X86 target being present? llvm-svn: 184597
* [objc-arc-opts] Make IsTrackingImpreciseReleases a const method.Michael Gottesman2013-06-211-1/+1
| | | | | | Thanks to Bill Wendling for pointing this out! llvm-svn: 184593
* Improve the time it takes to generating dwarf for assembly source filesKevin Enderby2013-06-211-1/+19
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | that have been run through the 'C' pre-processor. The implementation of SrcMgr.FindLineNumber() is slow but OK if it uses its cache when called multiple times with an SMLoc that is forward of the previous call. In the case of generating dwarf for assembly source files that have been run through the 'C' pre-processor we need to calculate the logical line number based on the last parsed cpp hash file line comment. And the current code calls SrcMgr.FindLineNumber() twice to do this causing its cache not to work and results in very slow compile times: % time /Volumes/SandBox/build-llvm/Debug+Asserts/bin/llvm-mc -triple thumbv7-apple-ios -filetype=obj -o /tmp/x.o mscorlib.dll.E -g 672.542u 0.299s 11:13.15 99.9% 0+0k 0+2io 2106pf+0w So we save the info from the last parsed cpp hash file line comment to avoid making the second call to SrcMgr.FindLineNumber() most times and end up with compile times like: % time /Volumes/SandBox/build-llvm/Debug+Asserts/bin/llvm-mc -triple thumbv7-apple-ios -filetype=obj -o /tmp/x.o mscorlib.dll.E -g 3.404u 0.104s 0:03.80 92.1% 0+0k 0+3io 2105pf+0w rdar://14156934 llvm-svn: 184592
* Add '-mcpu=' to prevent breaking on ATOM due to different code scheduleMichael Liao2013-06-211-1/+1
| | | | llvm-svn: 184591
* Revert "BlockFrequency: Saturate at 1 instead of 0 when multiplying a ↵Benjamin Kramer2013-06-214-95/+3
| | | | | | | | frequency with a branch probability." This reverts commit r184584. Breaks PPC selfhost. llvm-svn: 184590
* [objc-arc-opts] Now that PtrState.RRI is encapsulated in PtrState, make ↵Michael Gottesman2013-06-211-5/+7
| | | | | | PtrState.RRI private and delete the TODO. llvm-svn: 184587
* [objc-arc-opts] Encapsulated PtrState.RRI.{Calls,ReverseInsertPts} into ↵Michael Gottesman2013-06-211-12/+28
| | | | | | several methods on PtrState. llvm-svn: 184586
* BlockFrequency: Saturate at 1 instead of 0 when multiplying a frequency with ↵Benjamin Kramer2013-06-214-3/+95
| | | | | | | | | | | | | | | a branch probability. Zero is used by BlockFrequencyInfo as a special "don't know" value. It also causes a sink for frequencies as you can't ever get off a zero frequency with more multiplies. This recovers a 10% regression on MultiSource/Benchmarks/7zip. A zero frequency was propagated into an inner loop causing excessive spilling. PR16402. llvm-svn: 184584
* [objcarcopts] Encapsulated PtrState.RRI.IsTrackingImpreciseRelease() => ↵Michael Gottesman2013-06-211-4/+5
| | | | | | PtrState.IsTrackingImpreciseRelease(). llvm-svn: 184583
* [objcarcopts] Encapsulate PtrState.RRI.CFGHazardAfflicted via methods ↵Michael Gottesman2013-06-211-2/+10
| | | | | | PtrState.{IsCFGHazardAfflicted,SetCFGHazardAfflicted}. llvm-svn: 184582
* [NVPTX] Add support for selecting CUDA vs OCL mode based on tripleJustin Holewinski2013-06-219-22/+29
| | | | | | IR for CUDA should use "nvptx[64]-nvidia-cuda", and IR for NV OpenCL should use "nvptx[64]-nvidia-nvcl" llvm-svn: 184579
* Add missing REQUIRES: asserts in crash.ll.Andrew Trick2013-06-211-0/+1
| | | | llvm-svn: 184576
* Fix PR16360Michael Liao2013-06-212-3/+21
| | | | | | | When (srl (anyextend x), c) is folded into (anyextend (srl x, c)), the high bits are not cleared. Add 'and' to clear off them. llvm-svn: 184575
* Update physreg live intervals during remat.Andrew Trick2013-06-212-4/+32
| | | | llvm-svn: 184574
* Added -precompute-phys-liveness for testing LiveIntervals updates.Andrew Trick2013-06-211-0/+14
| | | | llvm-svn: 184573
* Handle more cases in LiveRangeEdit::eliminateDeadDefs.Andrew Trick2013-06-212-4/+13
| | | | | | | | | | Live intervals for dead physregs may be created during coalescing. We need to update these in the event that their instruction goes away. crash.ll is the unit test that catches it when MI sched is enabled on X86. llvm-svn: 184572
* Refactor LiveRangeEdit::eliminateDeadDefs.Andrew Trick2013-06-212-95/+102
| | | | | | I want to add logic to handle more cases. llvm-svn: 184571
* whitespaceAndrew Trick2013-06-211-2/+2
| | | | llvm-svn: 184570
* Fix a -join-globalcopies bug; handle undef operands.Andrew Trick2013-06-211-0/+3
| | | | llvm-svn: 184569
OpenPOWER on IntegriCloud