【问题标题】:LLVM ERROR: Cannot select: intrinsic %llvm.objc.clang.arc.useLLVM 错误:无法选择:内在 %llvm.objc.clang.arc.use
【发布时间】:2021-03-17 23:51:35
【问题描述】:

我在尝试链接一些 IR 文件时遇到了 llc 的下一个错误:

LLVM ERROR: Cannot select: intrinsic %llvm.objc.clang.arc.use

我发现如果我在编译期间禁用了 clang 优化 (O0),则不会弹出错误,但我不想这样做

我附上了如何重现它的示例,只需 cd 'issue' 文件夹并运行 'issue.sh' 来重现错误。你必须有 Xcode(12.x 首选)你运行它

https://drive.google.com/file/d/1j0TvMZI2A7QxRbv_Q7aydtlNYaiTPYBm/view?usp=sharing

这就是 issue.sh 包含的内容,这是我实际实现的简化版本:

echo "clang..."

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -x objective-c \
-target arm64-apple-ios12.0 \
-fobjc-arc -fmodules \
-S -Os -flto=thin \
-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS14.1.sdk \
-fembed-bitcode \
-c ${PWD}/GTMSessionFetcher.m \
-o ${PWD}/GTMSessionFetcher.ll

echo "llc..."

${PWD}/llc \
GTMSessionFetcher.ll \
-stats -filetype=obj \
-code-model=small \
-enable-machine-outliner=never \
--mtriple=arm64-apple-ios12.0 \
-o ${PWD}/GTMSessionFetcher.o

正如我之前提到的,如果你将-Os 更改为-O0,错误就会消失,但我确实需要优化大小。

我包含的 Objective-c 文件是来自 Google 库的 pod 的文件

https://github.com/google/gtm-session-fetcher

我发现了一个类似的问题,但还没有任何答案 LLVM Error Cannot select intrinsic %llvm.coro.begin

【问题讨论】:

    标签: objective-c clang llc


    【解决方案1】:

    我认为这是错误,但不是

    正如 Akira 在 LLVM bug report 中指出的那样,我能够通过添加带有 -objc-arc-contract 标志的中间优化器 OPT 步骤来修复它:

    clang
    ...
    
    <path to your LLVM tools>/OPT \
    <Your IR file> \
    -objc-arc-contract \
    -o <Output file>
    
    llc
    ...
    

    【讨论】:

      猜你喜欢
      • 2021-05-19
      • 2013-02-08
      • 1970-01-01
      • 2011-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-04
      • 1970-01-01
      相关资源
      最近更新 更多