RT-Smart库移植时报错unrecognizable insn。

Viewed 132

我在k230的RT-Smart移植tflite-micro时出现以下报错

/home/scy/k230/k230_sdk/src/big/rt-smart/userapps/tflite-micro/signal/src/filter_bank_spectral_subtraction.cc: In function 'void tflite::tflm_signal::FilterbankSpectralSubtraction(const SpectralSubtractionConfig*, const uint32_t*, uint32_t*, uint32_t*)':
/home/scy/k230/k230_sdk/src/big/rt-smart/userapps/tflite-micro/signal/src/filter_bank_spectral_subtraction.cc:62:1: error: unrecognizable insn:
   62 | }
      | ^
(insn 144 143 145 9 (parallel [
            (set (reg:VNx2SI 279 [ vect_prephitmp_86.34 ])
                (unspec:VNx2SI [
                        (unspec:VNx2SI [
                                (reg:VNx2BI 278 [ _277 ])
                                (lshiftrt:VNx2SI (reg:VNx2SI 277 [ vect__89.32 ])
                                    (subreg/s/u:SI (reg/v:DI 149 [ smoothing_bits ]) 0))
                                (reg:VNx2SI 460)
                            ] UNSPEC_SELECT)
                        (reg:DI 287 [ next_cnt_299 ])
                        (const_int 2 [0x2])
                        (reg:SI 66 vl)
                        (reg:SI 67 vtype)
                    ] UNSPEC_RVV))
            (clobber (reg:DI 463))
        ]) -1
     (nil))
during RTL pass: vregs
/home/scy/k230/k230_sdk/src/big/rt-smart/userapps/tflite-micro/signal/src/filter_bank_spectral_subtraction.cc:62:1: internal compiler error: in extract_insn, at recog.cc:2791
0x1fcb2de internal_error(char const*, ...)
        ???:0
0x8a95e6 fancy_abort(char const*, int, char const*)
        ???:0
0x861b96 _fatal_insn(char const*, rtx_def const*, char const*, int, char const*)
        ???:0
0x861bb8 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
        ???:0
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Preprocessed source stored into /tmp/ccvYRnBd.out file, please attach this to your bugreport.
make[2]: *** [CMakeFiles/tflite.dir/build.make:2109: CMakeFiles/tflite.dir/signal/src/filter_bank_spectral_subtraction.cc.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:87: CMakeFiles/tflite.dir/all] Error 2
make: *** [Makefile:91: all] Error 2

经过搜索发现疑似是gcc的bug,我无法确认。

项目使用cmake构建,修改自https://github.com/espressif/esp-tflite-micro
我使用本机的gcc编译器可以正常编译,本机gcc版本 gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
sdk tools 中的gcc版本 gcc version 12.0.1 20220505 (prerelease) (GCC)

2 Answers

你好,推荐使用nncase,来使用K230的kpu进行神经网络加速

感谢大佬的提议,但是nncase似乎无法满足我模型的需求,有个别关键算子(矩阵求逆)没有支持。请问nncase能添加用户算子吗?

这个可以去nncase提issue,让他们来添加算子支持

目前问题已解决,将源文件中的个别uint32_t改为uint64_t后不再出现问题。
检查汇编处的代码,推测是寄存器操作数长度变化引发的问题。可能是在编译器优化后产生了riscv64指令集中无法识别的指令或者超出指令框架限制的操作。
具体原因不明,尝试复现但是失败,我并不懂汇编,以上是AI分析的结果。