[Openmp-commits] [openmp] [OpenMP][test] Define print_possible_return_addresses on SPARC (PR #138523)

via Openmp-commits openmp-commits at lists.llvm.org
Fri May 9 22:10:23 PDT 2025


================
@@ -311,6 +311,14 @@ ompt_label_##id:
   printf("%" PRIu64 ": current_address=%p or %p or %p\n",                      \
          ompt_get_thread_data()->value, ((char *)addr) - 2,                    \
          ((char *)addr) - 8, ((char *)addr) - 12)
+#elif KMP_ARCH_SPARC
+// FIXME: Need to distinguish between 32 and 64-bit SPARC?
+// On SPARC the NOP instruction is 4 bytes long.
+// FIXME: Explain.  Can use __builtin_frob_return_addr?
+#define print_possible_return_addresses(addr)                                  \
----------------
koachan wrote:

Wait, so this is essencially tries to find where the start of the inserted `nop` is right?
If so, then I understand the `addr-12` case:
- `nop` itself is 4 byte, so we need to decrement the label's address by that much: `addr-4`
- Depending on optimization level there might be a `ba` plus the corresponding delay slot inserted, so need to decrement again by zero or two instruction: `addr-4-0` -> `addr-4` or `addr-4-8` -> `addr-12`

See e.g https://godbolt.org/z/8hYcsWTTd
Though, as far as I can tell there's no difference between 32 and 64 bit SPARC.

But what I still don't understand is, why is `addr-20` a possible address?

https://github.com/llvm/llvm-project/pull/138523


More information about the Openmp-commits mailing list