  Introduction: Decompilers are useful tools for software analysis and support
in the absence of source code. They are available for many hardware
architectures and programming languages. However, none of the existing
decompilers support modern AMD GPU architectures such as AMD GCN and RDNA.
Purpose: We aim at developing the first assembly decompiler tool for a modern
AMD GPU architecture that generates code in the OpenCL language, which is
widely used for programming GPGPUs. Results: We developed the algorithms for
the following operations: preprocessing assembly code, searching data accesses,
extracting system values, decompiling arithmetic operations and recovering data
types. We also developed templates for decompilation of branching operations.
Practical relevance: We implemented the presented algorithms in Python as a
tool called OpenCLDecompiler, which supports a large subset of AMD GCN
instructions. This tool automatically converts disassembled GPGPU code into the
equivalent OpenCL code, which reduces the effort required to analyze assembly
code.
