[all-commits] [llvm/llvm-project] 4ddf34: [clang] Define convergence in C++ languages such a...

Sameer Sahasrabuddhe via All-commits all-commits at lists.llvm.org
Thu Apr 17 23:55:02 PDT 2025


  Branch: refs/heads/users/ssahasra/clang-convergence-spec
  Home:   https://github.com/llvm/llvm-project
  Commit: 4ddf344b77cc01282571c643d621af34e6a7d8ad
      https://github.com/llvm/llvm-project/commit/4ddf344b77cc01282571c643d621af34e6a7d8ad
  Author: Sameer Sahasrabuddhe <sameer.sahasrabuddhe at amd.com>
  Date:   2025-04-18 (Fri, 18 Apr 2025)

  Changed paths:
    A clang/docs/ThreadConvergence.rst
    M clang/docs/conf.py
    M clang/docs/index.rst
    M clang/include/clang/AST/ParentMap.h
    A clang/include/clang/Analysis/Analyses/ConvergenceCheck.h
    M clang/include/clang/Analysis/CFG.h
    M clang/include/clang/Basic/AttrDocs.td
    M clang/include/clang/Basic/DiagnosticGroups.td
    M clang/include/clang/Basic/DiagnosticSemaKinds.td
    M clang/lib/AST/ParentMap.cpp
    M clang/lib/Analysis/AnalysisDeclContext.cpp
    M clang/lib/Analysis/CMakeLists.txt
    A clang/lib/Analysis/ConvergenceCheck.cpp
    M clang/lib/Sema/AnalysisBasedWarnings.cpp
    A clang/test/SemaHIP/convergence-warnings.hip

  Log Message:
  -----------
  [clang] Define convergence in C++ languages such as HIP, CUDA, OpenCL

The proposed definition closely follows the existing definition of convergence
in LLVM IR, but using C++ terms to describe language constructs.

There is no undefined behaviour. For each situation, convergence is either fully
specified or implementation-defined.

Two important limitations where LLVM IR requires convergence control tokens to
correctly express the convergence specified here:

1. Some combinations of loops, continue and break statements have different
   convergence specified for the statements inside that region of code, but
   result in the same loops in LLVM IR, thus producing ambiguous convergence in
   LLVM IR.

2. When a divergent condition inside a loop contains a convergent call followed
   by a break statement, these statements are lexically inside the loop, but in
   LLVM IR, they are outside the corresponding CFG loop.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list