Skip to content

-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).
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information