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

1k Views Asked by At

I'm getting the next error with llc when trying to to link some IR files:

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

I discovered that if I disabled clang optimization (O0) during compilation the error doesn't pop up, but I don't want to do that

I attach a sample of how to reproduce it, just cd the 'issue' folder and run the 'issue.sh' to reproduce the error. You must have Xcode (12.x preferred) tu run it

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

This is what the issue.sh contains, that is a reduced version of my real implementation:

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

As I mentioned before, if you change -Os for -O0, the error disappears, but I do need the size optimization.

The objective-c file that I included is a file from a pod from a Google library

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

I found a similar question, but it doesn't have any answer yet LLVM Error Cannot select intrinsic %llvm.coro.begin

1

There are 1 best solutions below

0
On

I thought it was bug, but it wasn't

As Akira pointed me in LLVM bug report I was able to fix it by adding an intermediate optimizer OPT step with -objc-arc-contract flag:

clang
...

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

llc
...