[llvm-dev] IndVarSimplify: getBackedgeTakenCount and Release vs Assert

Jeroen Dobbelaere via llvm-dev
Wed, 05 Feb 2020 17:45:37 -0000

Hi,

I am investigating a difference in code generation between release and assert
builds of llvm.
The culprit is IndVarSimplify that comes up with different behavior on the same
input:
 in the assertion build, it does do an extra 'INDVARS: Rewriting loop exit
condition'

After digging around, it seems that following change is the culprit:

-----
Author: Philip Reames <listmail at philipreames.com>  2019-08-01 03:16:08
Committer: Philip Reames <listmail at philipreames.com>  2019-08-01
03:16:08

    Fix a release-only build warning triggered by rL367485

    llvm-svn: 367499


[..]


+#ifndef NDEBUG
+  // Used below for a consistency check only
   const SCEV *BackedgeTakenCount = SE->getBackedgeTakenCount(L);
+#endif
-----

It seems that the 'SE->getBackedgeTakenCount(L)' call has
sideeffects.. Is that to be expected ?
Is the correct solution then to always keep the call ?

Thanks,

Jeroen Dobbelaere