Senior Compiler Engineer, GPU Code Object Rewriting & Tooling

AMD AMD · Semiconductors · San Jose, CA · Engineering

Senior Compiler Engineer focused on GPU code object rewriting and tooling for HIP, OpenCL, OpenMP, and ROCm. The role involves designing and implementing ISA rewriting, ELF/DWARF manipulation, and AMDGPU codegen to support hardware fixes, errata workarounds, instrumentation, and performance experiments without recompiling user code. This is a multi-year investment in a foundation for post-link transformation and experimentation across GPU generations.

What you'd actually do

  1. Design, implement, and maintain the HotSwap ISA rewriting subsystem in COMGR (amd/comgr/src/comgr-hotswap-*) — including ELF patching, DWARF debug-line adjustment, trampoline growth, NOP-sled management, and branch encoding
  2. Build and extend LLVM MC-based disassembly, assembly, and re-encoding pipelines used by post-link transformation tools
  3. Prototype and evaluate raising-based rewriting pipelines — lifting disassembled AMDGPU machine code into a structured intermediate representation (LLVM MachineIR or a domain-specific in-tree IR) for analysis and transformation, then lowering back to valid code objects
  4. Author ISA-specific rewrite policies (e.g., GFX1250 B0-to-A0 style errata mitigations) and generalize them into reusable, ISA-parametric infrastructure
  5. Implement and harden CFG construction, backward liveness analysis, and scratch VGPR allocation on raw AMDGPU machine code

Skills

Required

  • Strong C/C++ programming skills
  • Strong background in compilers and compiler IRs — LLVM IR, MachineIR, or an equivalent production compiler stack
  • Hands-on experience with the LLVM MC layer (MCInst, MCDisassembler, MCCodeEmitter, MCStreamer, TargetRegistry)
  • Working knowledge of ELF, DWARF, and related object-file formats
  • Familiarity with GPU ISAs (AMDGPU / GCN / RDNA / CDNA, or NVIDIA PTX/SASS)

Nice to have

  • Experience designing or extending custom in-tree IRs
  • Exposure to binary lifting / raising
  • Experience with dataflow analyses (liveness, reaching-definitions, dominance) and basic register allocation
  • Understanding of GPU execution models
  • Clang/LLVM upstream contribution experience
  • Exposure to the ROCm stack
  • Background in any of: debug information (DWARF/PDB), binary instrumentation, dynamic binary translation, JIT engines, linker internals, or code-object loaders

What the JD emphasized

  • own this codebase as it matures
  • own problems end-to-end
  • master a domain across multiple architecture generations