[multiple changes]
authorArnaud Charlet <charlet@gcc.gnu.org>
Tue, 2 Aug 2011 10:07:34 +0000 (12:07 +0200)
committerArnaud Charlet <charlet@gcc.gnu.org>
Tue, 2 Aug 2011 10:07:34 +0000 (12:07 +0200)
2011-08-02  Eric Botcazou  <ebotcazou@adacore.com>

* einfo.adb (Base_Type): Tune implementation for speed.

2011-08-02  Robert Dewar  <dewar@adacore.com>

* freeze.adb: Minor reformatting.

From-SVN: r177122

gcc/ada/ChangeLog
gcc/ada/einfo.adb
gcc/ada/freeze.adb

index 1bba5f3e50b4270d8c6b88bb4e1db967bd4308e3..a78d1b98fc04ad5296fd79ceb044a5487eeea2c6 100644 (file)
@@ -1,3 +1,11 @@
+2011-08-02  Eric Botcazou  <ebotcazou@adacore.com>
+
+       * einfo.adb (Base_Type): Tune implementation for speed.
+
+2011-08-02  Robert Dewar  <dewar@adacore.com>
+
+       * freeze.adb: Minor reformatting.
+
 2011-08-02  Thomas Quinot  <quinot@adacore.com>
 
        * scos.ads: Update comments.
index 408f3c5760ac11a29eed7f9f84d996c1607e08a7..662af6735a6941d0a4953901351716dd8e64b534 100644 (file)
@@ -5608,7 +5608,13 @@ package body Einfo is
    ---------------
 
    function Base_Type (Id : E) return E is
+      Is_Base_Type : Boolean;
    begin
+      --  Implementation note: this function shows up high in the profile.
+      --  We use a fully static case construct so as to make it easier for
+      --  the compiler to build a static table out of it, instead of using
+      --  a less efficient jump table.
+
       case Ekind (Id) is
          when E_Enumeration_Subtype          |
               E_Incomplete_Type              |
@@ -5628,11 +5634,17 @@ package body Einfo is
               E_Task_Subtype                 |
               E_String_Literal_Subtype       |
               E_Class_Wide_Subtype           =>
-            return Etype (Id);
+            Is_Base_Type := False;
 
          when others =>
-            return Id;
+            Is_Base_Type := True;
       end case;
+
+      if Is_Base_Type then
+         return Id;
+      end if;
+
+      return Etype (Id);
    end Base_Type;
 
    -------------------------
index 08aed5550a83a863d342faab014a9d68754d8a96..0db54598599e15cac47649be1e62b38332b4e5e6 100644 (file)
@@ -2455,8 +2455,7 @@ package body Freeze is
            and then Nkind (Parent (E)) = N_Object_Declaration
            and then Present (Expression (Parent (E)))
            and then Nkind (Expression (Parent (E))) = N_Aggregate
-           and then
-             Is_Atomic_Aggregate (Expression (Parent (E)), Etype (E))
+           and then Is_Atomic_Aggregate (Expression (Parent (E)), Etype (E))
          then
             null;
          end if;