关于RISC-V编译器优化的问题

之前研究发现, 把编译器选项里的lto(链接时优化)的选项打开, 会让生成的代码小一些, 于是我就把一些项目的lto全打开了.

目前用的编译器是GCC 12.

image.png


但是后来发现同一个项目, 没做其他改动, 开了lto编译出来的程序, 容易在一些情况下死在莫名其妙的位置. 只要关闭了lto, 就不会出现这种问题, 请问这是编译器的Bug还是其他什么原因?

您好,开启LTO选项之后,为了减少代码,编译器会在链接阶段对整个程序而不是单独文件来优化,包含提取内联消除冗余等等,可能会在执行时间和顺序上与原来有区别,导致在您的硬件上运行不正常。代码尺寸没有绝对要求的话可以不用开启此选项。如果想要进一步查找原因,可以将代码发送到邮箱yangy@wch.cn


只有登录才能回复,可以选择微信账号登录