llvm-project/llvm/test
Connor Abbott 92638ab625 [AMDGPU] Add support for Whole Wavefront Mode
Summary:
Whole Wavefront Wode (WWM) is similar to WQM, except that all of the
lanes are always enabled, regardless of control flow. This is required
for implementing wavefront reductions in non-uniform control flow, where
we need to use the inactive lanes to propagate intermediate results, so
they need to be enabled. We need to propagate WWM to uses (unless
they're explicitly marked as exact) so that they also propagate
intermediate results correctly. We do the analysis and exec mask munging
during the WQM pass, since there are interactions with WQM for things
that require both WQM and WWM. For simplicity, WWM is entirely
block-local -- blocks are never WWM on entry or exit of a block, and WWM
is not propagated to the block level.  This means that computations
involving WWM cannot involve control flow, but we only ever plan to use
WWM for a few limited purposes (none of which involve control flow)
anyways.

Shaders can ask for WWM using the @llvm.amdgcn.wwm intrinsic. There
isn't yet a way to turn WWM off -- that will be added in a future
change.

Finally, it turns out that turning on inactive lanes causes a number of
problems with register allocation. While the best long-term solution
seems like teaching LLVM's register allocator about predication, for now
we need to add some hacks to prevent ourselves from getting into trouble
due to constraints that aren't currently expressed in LLVM. For the gory
details, see the comments at the top of SIFixWWMLiveness.cpp.

Reviewers: arsenm, nhaehnle, tpr

Subscribers: kzhuravl, wdng, mgorny, yaxunl, dstuttard, t-tye, llvm-commits

Differential Revision: https://reviews.llvm.org/D35524

llvm-svn: 310087
2017-08-04 18:36:52 +00:00
..
Analysis [SCEV] Re-enable "Cache results of computeExitLimit" 2017-08-03 08:41:30 +00:00
Assembler test: add an additional cfi_return_column test 2017-07-30 21:30:54 +00:00
Bindings
Bitcode [ThinLTO] Add FunctionAttrs to ThinLTO index 2017-08-04 16:00:58 +00:00
BugPoint
CodeGen [AMDGPU] Add support for Whole Wavefront Mode 2017-08-04 18:36:52 +00:00
DebugInfo Un-revert r310014: false revert, it wasn't the cause of build break 2017-08-04 04:51:15 +00:00
DllTool [llvm-dlltool] Write correct weak externals 2017-07-31 11:18:41 +00:00
Examples
ExecutionEngine Don't pass the code model to MC 2017-08-02 20:32:26 +00:00
Feature Remove the BBVectorize pass. 2017-06-30 07:09:08 +00:00
FileCheck [llvm] Remove redundant check-prefix=CHECK from tests. NFC. 2017-07-17 17:32:45 +00:00
Instrumentation [sanitizer-coverage] don't instrument available_externally functions 2017-07-31 20:00:22 +00:00
Integer
JitListener
LTO Update the new PM pipeline to make ICP aware if it is SamplePGO build. 2017-08-02 01:28:31 +00:00
LibDriver
Linker ThinLTO: Don't import aliases of any kind (even linkonce_odr) 2017-07-27 15:09:06 +00:00
MC [AMDGPU][MC] Enabled expressions as operands 2017-08-04 13:55:24 +00:00
Object [LTO] Prevent dead stripping and internalization of symbols with sections 2017-07-25 19:42:32 +00:00
ObjectYAML [codeview] Fix YAML for LF_TYPESERVER2 by hoisting PDB_UniqueId 2017-07-17 23:59:44 +00:00
Other Use profile summary to disable peeling for huge working sets 2017-08-03 23:42:58 +00:00
SafepointIRVerifier [SafepointIRVerifier] Avoid false positives in GC verifier for compare between pointers 2017-07-07 13:02:29 +00:00
SymbolRewriter
TableGen [GlobalISel] Only merge memory ops for mayLoad or mayStore instrs. 2017-08-03 14:48:22 +00:00
ThinLTO/X86 ThinLTO: Don't import aliases of any kind (even linkonce_odr) 2017-07-27 15:09:06 +00:00
Transforms [ArgPromotion] Preserve alignment of byval argument in new alloca 2017-08-04 17:09:11 +00:00
Unit Change remaining references to lit.util.capture to use subprocess.check_output. 2017-07-06 21:46:47 +00:00
Verifier Remove the obsolete offset parameter from @llvm.dbg.value 2017-07-28 20:21:02 +00:00
YAMLParser
tools Revert "[llvm][llvm-objcopy] Added support for outputting to binary in llvm-objcopy" 2017-08-04 05:33:44 +00:00
.clang-format
CMakeLists.txt Reland "[LLVM][llvm-objcopy] Added basic plumbing to get things started" 2017-08-01 00:33:58 +00:00
TestRunner.sh
lit.cfg Reland "[LLVM][llvm-objcopy] Added basic plumbing to get things started" 2017-08-01 00:33:58 +00:00
lit.site.cfg.in Correctly enable the llvm-mt tests, now that build flags changed. 2017-07-26 16:35:44 +00:00