1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-21 12:02:58 +02:00
llvm-mirror/test
Philip Reames 6204508de8 [rs4gc] Optionally directly relocated vector of pointers
This patch teaches rewrite-statepoints-for-gc to relocate vector-of-pointers directly rather than trying to split them. This builds on the recent lowering/IR changes to allow vector typed gc.relocates.

The motivation for this is that we recently found a bug in the vector splitting code where depending on visit order, a vector might not be relocated at some safepoint. Specifically, the bug is that the splitting code wasn't updating the side tables (live vector) of other safepoints. As a result, a vector which was live at two safepoints might not be updated at one of them. However, if you happened to visit safepoints in post order over the dominator tree, everything worked correctly. Weirdly, it turns out that post order is actually an incredibly common order to visit instructions in in practice. Frustratingly, I have not managed to write a test case which actually hits this. I can only reproduce it in large IR files produced by actual applications.

Rather than continue to make this code more complicated, we can remove all of the complexity by just representing the relocation of the entire vector natively in the IR.

At the moment, the new functionality is hidden behind a flag. To use this code, you need to pass "-rs4gc-split-vector-values=0". Once I have a chance to stress test with this option and get feedback from other users, my plan is to flip the default and remove the original splitting code. I would just remove it now, but given the rareness of the bug, I figured it was better to leave it in place until the new approach has been stress tested.

Differential Revision: http://reviews.llvm.org/D15982

llvm-svn: 257244
2016-01-09 01:31:13 +00:00
..
Analysis [Vectorization] Actually return from error case in isStridedPtr 2016-01-08 01:55:13 +00:00
Assembler
Bindings Deprecate a few C APIs. 2015-12-18 23:46:42 +00:00
Bitcode [Bitcode] Remove superflous compatibility tests 2016-01-06 23:22:38 +00:00
BugPoint
CodeGen [DAGCombiner] don't dereference an operand that doesn't exist (PR26070) 2016-01-08 19:53:24 +00:00
DebugInfo Temporarily revert r257105 "[Verifier] Check that debug values have proper size" 2016-01-07 22:39:11 +00:00
Examples
ExecutionEngine
Feature
FileCheck
Instrumentation Partial fix for PR25912, see comment 13. Should fix the sanitizer bootstrap bot 2015-12-22 01:18:49 +00:00
Integer
JitListener Fix several accidental DOS line endings in source files 2016-01-03 17:22:03 +00:00
LibDriver
Linker [Linker] Also treat a DIImportedEntity scope DISubprogram as needed. 2016-01-07 03:14:59 +00:00
LTO
MC Make WinCOFFObjectWriter.cpp's timestamp writing not use ENABLE_TIMESTAMPS 2016-01-06 19:05:19 +00:00
Object Handle archives with paths in the names. 2015-12-18 16:07:17 +00:00
Other Recommit r256952 "Filtering IR printing for print-after-all/print-before-all" 2016-01-06 22:55:03 +00:00
SymbolRewriter
TableGen
tools [llvm-symbolizer] -print-source-context-lines option to print source code around the line. 2016-01-09 00:14:35 +00:00
Transforms [rs4gc] Optionally directly relocated vector of pointers 2016-01-09 01:31:13 +00:00
Unit
Verifier [Statepoints] Initial support for relocating vectors of pointers 2016-01-07 03:32:11 +00:00
YAMLParser
.clang-format
CMakeLists.txt
lit.cfg [llvm-symbolizer] -print-source-context-lines option to print source code around the line. 2016-01-09 00:14:35 +00:00
lit.site.cfg.in Make WinCOFFObjectWriter.cpp's timestamp writing not use ENABLE_TIMESTAMPS 2016-01-06 19:05:19 +00:00
Makefile check-llvm: Tweak the feature "timestamps" for autoconf. 2015-12-21 08:46:12 +00:00
Makefile.tests
TestRunner.sh