-
Notifications
You must be signed in to change notification settings - Fork 27
Description
Checklist
- Checked the issue tracker for similar issues to ensure this is not a duplicate
- Read the documentation to confirm the issue is not addressed there and your configuration is set correctly
- Tested with the latest version to ensure the issue hasn't been fixed
How often does this bug occurs?
always
Expected behavior
When building llvm-project-xtensa on FreeBSD 14.3 using the official instructions and the Xtensa target, the build fails during the compiler-rt phase.
The Xtensa assembler in Clang reports that several ESP32-specific floating-point/DSP instructions require CPU options which are not enabled by default.
This prevents compiler-rt builtins for Xtensa from being built.
compiler-rt builtins for the Xtensa target should build successfully
with --target=xtensa-esp32-elf, including assembly files that use
ESP32 FPU/DSP instructions (sqrt0.s, maddn.s, nexp01.s, wfr, etc.).
The Xtensa assembler should recognize these instructions via the default
Xtensa CPU/features configuration or an appropriate CPU profile (e.g. ESP32).
OS: FreeBSD 14.3-RELEASE amd64
Kernel: releng/14.3-n271432-8c9ce319fef7 GENERIC amd64
CMake: 3.31.9
ninja: 1.13.1
Clang (system): FreeBSD clang version 19.1.7
Target triple: xtensa-esp32-elf (via CMAKE options)
Actual behavior (suspected bug)
During the compiler-rt build step, the Xtensa assembler in Clang fails to
assemble several ESP32-specific FPU/DSP instructions used in
compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S.
The build stops with multiple errors of the form:
error: instruction use requires an option to be enabled
entry sp, 16
^
error: instruction use requires an option to be enabled
wfr f0, a2
^
error: instruction use requires an option to be enabled
sqrt0.s f1, f0
^
... (many similar errors)
This indicates that the Xtensa backend is not enabling the required CPU
features/extensions (ESP32 FPU/DSP instruction set) when assembling the
builtins.
As a result, the compiler-rt builtins for Xtensa cannot be built and the
entire build process fails.
Error logs or terminal output
100%] Built target builtins-clobber
[100%] Built target builtins-configure
[100%] Performing build step for 'builtins'
[ 0%] Building ASM object CMakeFiles/clang_rt.builtins-xtensa.dir/xtensa/ieee754_sqrtf.S.o
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:17:3: error: instruction use requires an option to be enabled
entry sp, 16
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:19:3: error: instruction use requires an option to be enabled
wfr f0, a2
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:20:3: error: instruction use requires an option to be enabled
sqrt0.s f1, f0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:21:3: error: instruction use requires an option to be enabled
const.s f2, 0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:22:3: error: instruction use requires an option to be enabled
maddn.s f2, f1, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:23:3: error: instruction use requires an option to be enabled
nexp01.s f3, f0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:24:3: error: instruction use requires an option to be enabled
const.s f7, 3
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:25:3: error: instruction use requires an option to be enabled
addexp.s f3, f7
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:26:3: error: instruction use requires an option to be enabled
maddn.s f7, f2, f3
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:27:3: error: instruction use requires an option to be enabled
nexp01.s f2, f0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:28:3: error: instruction use requires an option to be enabled
neg.s f4, f2
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:29:3: error: instruction use requires an option to be enabled
maddn.s f1, f7, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:30:3: error: instruction use requires an option to be enabled
const.s f7, 0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:31:3: error: instruction use requires an option to be enabled
const.s f5, 0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:32:3: error: instruction use requires an option to be enabled
const.s f6, 0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:33:3: error: instruction use requires an option to be enabled
maddn.s f7, f4, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:34:3: error: instruction use requires an option to be enabled
maddn.s f5, f1, f3
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:35:3: error: instruction use requires an option to be enabled
const.s f3, 3
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:36:3: error: instruction use requires an option to be enabled
maddn.s f6, f3, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:37:3: error: instruction use requires an option to be enabled
maddn.s f2, f7, f7
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:38:3: error: instruction use requires an option to be enabled
maddn.s f3, f5, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:39:3: error: instruction use requires an option to be enabled
neg.s f1, f6
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:40:3: error: instruction use requires an option to be enabled
maddn.s f7, f2, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:41:3: error: instruction use requires an option to be enabled
maddn.s f6, f3, f6
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:42:3: error: instruction use requires an option to be enabled
mksadj.s f1, f0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:43:3: error: instruction use requires an option to be enabled
nexp01.s f0, f0
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:44:3: error: instruction use requires an option to be enabled
maddn.s f0, f7, f7
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:45:3: error: instruction use requires an option to be enabled
neg.s f2, f6
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:46:3: error: instruction use requires an option to be enabled
addexpm.s f7, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:47:3: error: instruction use requires an option to be enabled
addexp.s f2, f1
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:48:3: error: instruction use requires an option to be enabled
divn.s f7, f0, f2
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:49:3: error: instruction use requires an option to be enabled
rfr a2, f7
^
/home/res2500/test/llvm-project-release-esp_21.x/compiler-rt/lib/builtins/xtensa/ieee754_sqrtf.S:51:3: error: instruction use requires an option to be enabled
retw
^
gmake[5]: *** [CMakeFiles/clang_rt.builtins-xtensa.dir/build.make:78: CMakeFiles/clang_rt.builtins-xtensa.dir/xtensa/ieee754_sqrtf.S.o] Помилка 1
gmake[4]: *** [CMakeFiles/Makefile2:390: CMakeFiles/clang_rt.builtins-xtensa.dir/all] Помилка 2
gmake[3]: *** [Makefile:136: all] Помилка 2
gmake[2]: *** [runtimes/CMakeFiles/builtins-build.dir/build.make:76: runtimes/builtins-stamps/builtins-build] Помилка 2
gmake[1]: *** [CMakeFiles/Makefile2:57226: runtimes/CMakeFiles/builtins-build.dir/all] Помилка 2
gmake: *** [Makefile:156: all] Помилка 2
res2500@res2500:~/test/llvm-project-release-esp_21.x/build $Steps to reproduce the behavior
git clone https://github.com/espressif/llvm-project-xtensa.git
cd llvm-project-xtensa
mkdir build && cd build
cmake -G "Unix Makefiles"
-DLLVM_TARGETS_TO_BUILD="Xtensa"
-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD="Xtensa"
-DCMAKE_BUILD_TYPE=Release
-DLLVM_ENABLE_PROJECTS="clang;lld"
-DLLVM_ENABLE_RUNTIMES="compiler-rt"
-DCMAKE_INSTALL_PREFIX=/usr/local/xtensa-esp32-elf
-DLLVM_DEFAULT_TARGET_TRIPLE="xtensa-esp32-elf"
-DLLVM_INCLUDE_BENCHMARKS=OFF
-DLLVM_INCLUDE_TESTS=OFF
../llvm
gmake
Project release version
master
System architecture
other (details in Additional context)
Operating system
Linux
Operating system version
OS: FreeBSD 14.3-RELEASE amd64 Kernel: releng/14.3-n271432-8c9ce319fef7 GENERIC amd64
Shell
sh
Additional context
The same source file (ieee754_sqrtf.S) builds correctly when using
Espressif’s prebuilt GCC-based Xtensa toolchain.
The issue appears only when assembling the file using the Clang Xtensa
backend built from this repository.
This suggests that the LLVM Xtensa assembler is missing one or more
feature flags or CPU definitions required for the ESP32 FPU/DSP
instruction subset.
Since ESP32 uses a customized Xtensa core (with specific coprocessors and
instruction extensions), the assembler may need explicit configuration
(e.g. a CPU profile similar to xtensa_esp32) to accept these
instructions during compiler-rt build.
No patches or custom flags were applied; this is a clean build using the
default CMake configuration provided in the documentation.