[AMDGPU] Use wavefront scope for single-wave workgroup synchronization (#187673) Workgroup-scoped fences and non-relaxed workgroup atomics were previously legalized with synchronization strong enough for multi-wave workgroups. When the kernel's maximum flat work-group size does not exceed the wavefront size, the workgroup contains only a single wavefront, so workgroup-scoped synchronization is equivalent to wavefront scope and the stronger legalization is unnecessary. SIMemoryLegalizer now demotes workgroup scope to wavefront scope in this case for workgroup-scoped fences and for non-relaxed atomic load, store, atomicrmw, and cmpxchg operations. This allows subsequent legalization to operate at wavefront scope. The decision is based on AMDGPUSubtarget::isSingleWavefrontWorkgroup. --------- Co-authored-by: Barbara Mitic <Barbara.Mitic@amd.com>
Welcome to the LLVM project!
This repository contains the source code for LLVM, a toolkit for the construction of highly optimized compilers, optimizers, and run-time environments.
The LLVM project has multiple components. The core of the project is itself called “LLVM”. This contains all of the tools, libraries, and header files needed to process intermediate representations and convert them into object files. Tools include an assembler, disassembler, bitcode analyzer, and bitcode optimizer.
C-like languages use the Clang frontend. This component compiles C, C++, Objective-C, and Objective-C++ code into LLVM bitcode -- and from there into object files, using LLVM.
Other components include: the libc++ C++ standard library, the LLD linker, and more.
Consult the Getting Started with LLVM page for information on building and running LLVM.
For information on how to contribute to the LLVM project, please take a look at the Contributing to LLVM guide.
Join the LLVM Discourse forums, Discord chat, LLVM Office Hours or Regular sync-ups.
The LLVM project has adopted a code of conduct for participants to all modes of communication within the project.