https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88481

            Bug ID: 88481
           Summary: -O1 causes optimizer to drop 'then' clause in
                    conditional
           Product: gcc
           Version: 8.2.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: heinrich.seebauer at swistec dot de
  Target Milestone: ---

Compiling with option -O1 causes the optimizer to drop code for the 'then'
branch.
Verified for targets
  gnueabi-linux (host=x86/linux, target=arm/linux), and
  x86 (native)

Compilation produces correct results with options -O0, -O2, -O3, -Os.

If -O1 options
-fdefer-pop 
-fdelayed-branch 
-fguess-branch-probability 
-fcprop-registers 
-floop-optimize 
-fif-conversion 
-fif-conversion2 
-ftree-ccp 
-ftree-dce 
-ftree-dominator-opts 
-ftree-dse 
-ftree-ter 
-ftree-lrs 
-ftree-sra 
-ftree-copyrename 
-ftree-fre 
-ftree-ch 
-funit-at-a-time 
-fmerge-constants
are used, the result is correct. However, adding -O1 to this list of options
results in the missing code.

-------------------------------------------------------------------------
the exact version of GCC:
gcc --version
gcc (SUSE Linux) 8.2.1 20181108 [gcc-8-branch revision 265914]

the options given when GCC was configured/built:
unknown

the complete command line that triggers the bug:
gcc -D_GNU_SOURCE=1 -D_POSIX_SOURCE=1 -DDEBUG=1 -DWITH_MBEDTLS=1 -DTARGET=PC
-I.././inc -I../modelSource -I../../libiec61850/config
-I../../libiec61850/src/logging -I../../libiec61850/src/hal/inc
-I../../libiec61850/src/common/inc -I../../libiec61850/src/mms/inc
-I../../libiec61850/src/iec61850/inc
-I../../libiec61850/src/iec61850/inc_private
-I../../libiec61850/src/mms/inc_private -I../../libiec61850/third_party/sqlite
-I../../libiec61850/third_party/mbedtls/include -I../../libiec61850/src/tls
-I../../libiec61850/src/tls/mbedtls -I../../libiec61850/src/mms/iso_mms/asn1c
-O1 -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations -g -Wall -c
-fmessage-length=0 -MMD -MP -MF"src/runtime/actPow_ggioRt.d"
-MT"src/runtime/actPow_ggioRt.o" -o "src/runtime/actPow_ggioRt.o"
"../src/runtime/actPow_ggioRt.c"

the compiler output (error messages, warnings, etc.):
gcc -D_GNU_SOURCE=1 -D_POSIX_SOURCE=1 -DDEBUG=1 -DWITH_MBEDTLS=1 -DTARGET=PC
-I.././inc -I../modelSource -I../../libiec61850/config
-I../../libiec61850/src/logging -I../../libiec61850/src/hal/inc
-I../../libiec61850/src/common/inc -I../../libiec61850/src/mms/inc
-I../../libiec61850/src/iec61850/inc
-I../../libiec61850/src/iec61850/inc_private
-I../../libiec61850/src/mms/inc_private -I../../libiec61850/third_party/sqlite
-I../../libiec61850/third_party/mbedtls/include -I../../libiec61850/src/tls
-I../../libiec61850/src/tls/mbedtls -I../../libiec61850/src/mms/iso_mms/asn1c
-O1 -fno-strict-aliasing -fwrapv -fno-aggressive-loop-optimizations -g -Wall -c
-fmessage-length=0 -MMD -MP -MF"src/iec61850/fsch.d" -MT"src/iec61850/fsch.o"
-o "src/iec61850/fsch.o" "../src/iec61850/fsch.c"
Finished building: ../src/iec61850/fsch.c

the preprocessed file: see attachment
-------------------------------------------------------------------------

source code snippet:
...
fsch.c:423: if (forwardBackwardDiff < 0)
fsch.c:427:   timeMatchedSec += SECONDS_PER_HOUR;
...

if condition (forwardBackwardDiff < 0) is true, the addition is not executed.
Disassembly shows that no code has been generated for line 427. Debugging shows
that the code line is effectively skipped, though the condition is true.

gdb disassembly:
423                         if (forwardBackwardDiff < 0)
0000000000409111:   lea     0xe10(%r12),%rax
0000000000409119:   pxor    %xmm1,%xmm1
000000000040911d:   comisd  %xmm0,%xmm1
0000000000409121:   cmova   %rax,%r12
429                         strTmRt->nextStartTimeSec=timeMatchedSec;
0000000000409125:   mov     %r12,0x28(%rbx)
430                        
strTmRt->prevStartTimeSec=timeMatchedSec-SECONDS_PER_HOUR;
0000000000409129:   lea     -0xe10(%r12),%rdi
0000000000409131:   mov     %rdi,0x20(%rbx)

Reply via email to