You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自定义GlobalISel-only LLVM后端:目标机交互错误排查求助

背景

我正在为一款暂未被支持的处理器开发仅基于GlobalISel的自定义LLVM后端,目前已能执行以下命令并生成有效的目标汇编:

clang -target xxx -emit-llvm file.c

llc -march=xxx -global-isel -stop-after=irtranslator file.ll -o -

llc -march=xxx -global-isel -debug-only=instruction-select,xxx-gisel file.ll -o -

问题

但通过Clang驱动执行以下命令时:

clang -fglobal-isel --target=xxx -S file.c

出现错误:

error: unable to interface with target machine

调试

我不确定如何解决该问题。错误来自BackendUtils.cpp,原因是目标未实现TargetMachine→addPassesToEmitFile()方法。手动重写该方法后错误消失,但生成的汇编文件为空(未添加任何Pass)。不过其他后端似乎并未重写此方法,因为IRTranslator、RegBankSelect等Pass应被自动调用。

我尚未在clang/lib/CodeGen/Targets/中实现xxx.cpp,不清楚其中逻辑的作用——它似乎用于定义ABI和调用约定,但我已在llvm/Target/XXX/XXXCallingConvention.td和llvm/Target/XXX/GlobalISel/XXXCallLowering.cpp中完成了相关定义,不确定这是否是相关问题,也不确定是否需要重复实现,以及这些信息是否对Clang和LLVM都必要。

求助

这是个特定问题,若需要更多细节可随时提供,恳请各位提供帮助,谢谢!

内容的提问来源于stack exchange,提问作者Aidan Goldfarb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 02:52:04