Possible problem with loop-unrolling, templates and optimisation

Hi CFE-Devs,

I am investigating a number of regressions in my out-of-tree target since I migrated from LLVM v4 to v5. They have been there a while, but waiting for me to have time to analyse. In all cases the enabling of the loop-unroller seems to cause the problem.

There are 14 failures are in ‘tests/std/containers/unord/unord[multimap]’ and 1 other ‘tests/src/utilities/exchange/exchange.pass.cpp’. All appear to be to do with the list constructors and the list iteration. I can’t see any particular issue with my backend, except that it is for non-interlocked VLIW so scheduling tends to be more sensitive to tiny differences in dependencies than for more traditional targets.

Disabling unrolling, or disabling function inlining seems to fix the problem.

Before I go digging deeper, has anybody else come across issues with the loop-unroller and these tests in their targets using the v5.0.0 sources?

I am emailing CFE rather than LLVM, because on the surface it looks like an IR emission issue from CLang, but I won’t know for sure until I start digging deeper. If it transpires that it is not CLang, I will start a new conversation on LLVM-Dev.

Thanks,

MartinO

There are 14 failures are in ‘tests/std/containers/unord/unord[multimap]’
and 1 other ‘tests/src/utilities/exchange/exchange.pass.cpp’. All appear
to be to do with the list constructors and the list iteration. I can’t see
any particular issue with my backend, except that it is for non-interlocked
VLIW so scheduling tends to be more sensitive to tiny differences in
dependencies than for more traditional targets.

​Does Hexagon pass those cases?​

I don’t have a Hexagon test environment, and don’t know how to access the BuildBot results for Hexagon.

Thanks,

MartinO

I would generally assume this indicates an optimization bug. (That isn’t always true; the source code could have undefined behavior.  But if the test doesn’t have any asan or ubsan failures, there isn’t any good way to track down undefined behavior anyway.) You probably want to start with . -Eli

Thanks Eli,

I didn’t know about this document, and it looks like it has good guidance for other types of debugging too.

MartinO