view gcc/testsuite/gnat.dg/opt37.adb @ 118:fd00160c1b76

ifdef TARGET_64BIT
author mir3636
date Tue, 27 Feb 2018 15:01:35 +0900
parents 04ced10e8804
children
line wrap: on
line source

-- { dg-compile }
-- { dg-options "-O2 -gnato -fdump-tree-optimized" }

package body Opt37 is

   function To_Unchecked (Bits : T_Bit_Array) return Unsigned32 is
      Value : Unsigned32 := 0;
   begin
      for I in Bits'Range loop
         Value := Value * 2 + Unsigned32 (Bits(I));
      end loop;
      return Value;
   end;

   function To_Scalar (Bits : T_Bit_Array) return Positive is
      Tmp   : Unsigned32;
      Value : Positive;
   begin
      Tmp := To_Unchecked (Bits);
      if Tmp in 0 .. Unsigned32 (Positive'last) then
         Value := Positive (Tmp);
      else
         Value := -Positive (Unsigned32'last - Tmp);
         if Value > Positive'first then
            Value := Value - 1;
         else
            raise Program_Error;
         end if;
      end if;
      return Value;
   end;

   function Func (Bit_Array : T_Bit_Array;
                  Bit_Index : T_Bit_Index) return Positive is
   begin
      return To_Scalar (Bit_Array (Bit_Index .. Bit_Index + 1));
   end;

end Opt37;

-- { dg-final { scan-tree-dump-not "alloca" "optimized" } }