This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Compiler/TDA2EG: INTERNAL ERROR: Number of virtual registers beyond limit. Reduce function size

Part Number: TDA2EG

Tool/software: TI C/C++ Compiler

Hello,

I am using ti arm compiler version 5.2.4. One specific file (calib3d/five-point.cpp) from opencv package I am not able to compile with this version.

I was able to compile file with higher version but due to some limitations I need to use older version.

Basically source file has lot of computations (200 expressions). I tried to break it into small 10 functions each with 20 expressions but that didn't help.

I went further down with 20 helper functions with 10 expressions each but still its giving same issue.

How do I fix this issue?

Please check attached modified source file.five-point.cpp

Thanks,

Shailesh

  • In experimenting with the opencv package I have, I found that using the option --opt_level=off causes the build to succeed.  This disables all optimization.  By default, the TI ARM compiler uses --opt_level=3.  That increases the number of registers needed, thus increasing the chance of running into this limit.  

    I recommend you apply --opt_level=off to only this one file, and not the entire build.  If you apply it to the entire build, your code size and performance will be terrible.

    Thanks and regards,

    -George

  • Alternatively, try disabling just inlining by using the --no_inlining compiler flag for just this file
  • Archaeologist said:
    try disabling just inlining by using the --no_inlining compiler flag for just this file

    I tried it, and the build succeeds.  This is a much better solution than --opt_level=off.

    Thanks and regards,

    -George