[all-commits] [llvm/llvm-project] cf1302: [OpenMP][test]Flip bit-fields in 'struct flags' fo...

Xing Xue via All-commits all-commits at lists.llvm.org
Fri Feb 16 05:16:52 PST 2024


  Branch: refs/heads/release/18.x
  Home:   https://github.com/llvm/llvm-project
  Commit: cf130269fade1c08e3f83a7f34bc450a27287852
      https://github.com/llvm/llvm-project/commit/cf130269fade1c08e3f83a7f34bc450a27287852
  Author: Xing Xue <xingxue at outlook.com>
  Date:   2024-02-16 (Fri, 16 Feb 2024)

  Changed paths:
    M openmp/runtime/src/kmp.h
    M openmp/runtime/test/tasking/bug_nested_proxy_task.c
    M openmp/runtime/test/tasking/bug_proxy_task_dep_waiting.c
    M openmp/runtime/test/tasking/hidden_helper_task/common.h

  Log Message:
  -----------
  [OpenMP][test]Flip bit-fields in 'struct flags' for big-endian in test cases (#79895)

This patch flips bit-fields in `struct flags` for big-endian in test
cases to be consistent with the definition of the structure in libomp
`kmp.h`.

(cherry picked from commit 7a9b0e4acb3b5ee15f8eb138aad937cfa4763fb8)


  Commit: 34fdf52cce678cb4fd3714c31f1a798bece84303
      https://github.com/llvm/llvm-project/commit/34fdf52cce678cb4fd3714c31f1a798bece84303
  Author: Xing Xue <xingxue at outlook.com>
  Date:   2024-02-16 (Fri, 16 Feb 2024)

  Changed paths:
    M openmp/runtime/src/kmp_csupport.cpp
    M openmp/runtime/src/kmp_gsupport.cpp
    M openmp/runtime/src/kmp_lock.cpp
    M openmp/runtime/src/kmp_lock.h

  Log Message:
  -----------
  [OpenMP][AIX]Define struct kmp_base_tas_lock with the order of two members swapped for big-endian (#79188)

The direct lock data structure has bit `0` (the least significant bit)
of the first 32-bit word set to `1` to indicate it is a direct lock. On
the other hand, the first word (in 32-bit mode) or first two words (in
64-bit mode) of an indirect lock are the address of the entry allocated
from the indirect lock table. The runtime checks bit `0` of the first
32-bit word to tell if this is a direct or an indirect lock. This works
fine for 32-bit and 64-bit little-endian because its memory layout of a
64-bit address is (`low word`, `high word`). However, this causes
problems for big-endian where the memory layout of a 64-bit address is
(`high word`, `low word`). If an address of the indirect lock table
entry is something like `0x110035300`, i.e., (`0x1`, `0x10035300`), it
is treated as a direct lock. This patch defines `struct
kmp_base_tas_lock` with the ordering of the two 32-bit members flipped
for big-endian PPC64 so that when checking/setting tags in member
`poll`, the second word (the low word) is used. This patch also changes
places where `poll` is not already explicitly specified for
checking/setting tags.

(cherry picked from commit ac97562c99c3ae97f063048ccaf08ebdae60ac30)


Compare: https://github.com/llvm/llvm-project/compare/28be6f670fab...34fdf52cce67


More information about the All-commits mailing list