Hi,
I observed that in some ELF files there is code present which is not used.
It originates from integer arithmetics.
The following snipped should help to demonstrate the problem.
I have the function in the file foo.c:
```
unsigned long long foo(unsigned long a, unsigned long b)
{
return ((unsigned long long) a + 0) / b;
}
```
Compiling it with `gcc -m32 -O2 -S foo.c` will give an assembler with
references to the symbols `__udivdi3` and `__divdi3`. But only a call to
`__udivdi3` is present. Compiling with `-O1` instead of `-O2` will not
reference the symbol `__divdi3`. The symbol is also not inserted if I use all
the activated optimizations reported be `-fverbose-asm` manually without `-O2`.
And if `-fno-tree-dominator-opts` and `-fno-tree-vrp` are used with `-O2`
`__divdi3` is also not present.
I am not sure how and why this is happening with `-O2` (and `-O3`, `-Os`),
but I suspect it should not be the case.
I tested this with gcc 10.1.0 and the current git (2e47c8c6eac).
Any thoughts?
Thanks,
Tobias