-OoDEADSTORE takes on too much, chapter Ⅱ.
This code compiled with -O4 -OoDEADSTORE
on something that uses min/max intrinsics (like x86-64
, or i386
with -CfSSE3
):
- drops
minData := data[0]
, - drops
maxData := data[0]
as well, - and even drops the first copy of the unrolled loop body (with
i = 1
).
var
data: array[0 .. 2] of single = (8, 7, 6);
minData, maxData: single;
i: SizeInt;
begin
minData := data[0];
maxData := data[0];
for i := 1 to High(data) do
begin
if data[i] < minData then minData := data[i];
if data[i] > maxData then maxData := data[i];
end;
writeln('min = ', minData:0:2, ' (must be 6), max = ', maxData:0:2, ' (must be 8).');
end.
min = 0.00 (must be 6), max = 6.00 (must be 8).