]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
sem_ch6.adb (Check_Body_To_Inline): In AAMP and VM targets use frontend inlining...
authorJavier Miranda <miranda@adacore.com>
Fri, 9 Mar 2012 14:48:24 +0000 (14:48 +0000)
committerArnaud Charlet <charlet@gcc.gnu.org>
Fri, 9 Mar 2012 14:48:24 +0000 (15:48 +0100)
2012-03-09  Javier Miranda  <miranda@adacore.com>

* sem_ch6.adb (Check_Body_To_Inline): In AAMP and VM targets
use frontend inlining at all optimization levels.
* sem_util.adb (Must_Inline): In AAMP and VM targets, given that
there is no inlining support in the backend, use also frontend
inlining when compiling with optimizations enabled.
* exp_ch6.adb (Expand_Call): Minor code reorganization.

From-SVN: r185140

gcc/ada/ChangeLog
gcc/ada/exp_ch6.adb
gcc/ada/sem_ch6.adb
gcc/ada/sem_util.adb

index 826383eb5bbe68b5d4edb26e0db5562368ad003a..194f6b00ac9f80168271358f94d0f69ca7882504 100644 (file)
@@ -1,3 +1,12 @@
+2012-03-09  Javier Miranda  <miranda@adacore.com>
+
+       * sem_ch6.adb (Check_Body_To_Inline): In AAMP and VM targets
+       use frontend inlining at all optimization levels.
+       * sem_util.adb (Must_Inline): In AAMP and VM targets, given that
+       there is no inlining support in the backend, use also frontend
+       inlining when compiling with optimizations enabled.
+       * exp_ch6.adb (Expand_Call): Minor code reorganization.
+
 2012-03-09  Eric Botcazou  <ebotcazou@adacore.com>
 
        * gcc-interface/ada-tree.h (TYPE_VAX_FLOATING_POINT_P): Move around.
        can happen in an instantiation in programs that run afoul or
        AI05-0087.
 
-
 2012-02-17  Ed Schonberg  <schonberg@adacore.com>
 
        * exp_ch6.adb (Legal_Copy): If layout is not
index 5afb31c9ca1921fdf3de570980f1fb5348ffa6ff..7b6b296456c184d722065163df9be13cb237f806 100644 (file)
@@ -3790,10 +3790,7 @@ package body Exp_Ch6 is
                Spec : constant Node_Id := Unit_Declaration_Node (Subp);
 
             begin
-               if Optimization_Level > 0 then
-                  Do_Inline (Subp, Orig_Subp);
-
-               elsif Must_Inline (Subp) then
+               if Must_Inline (Subp) then
                   if In_Extended_Main_Code_Unit (Call_Node)
                     and then In_Same_Extended_Unit (Sloc (Spec), Loc)
                     and then not Has_Completion (Subp)
@@ -3805,6 +3802,9 @@ package body Exp_Ch6 is
                   else
                      Do_Inline_Always (Subp, Orig_Subp);
                   end if;
+
+               elsif Optimization_Level > 0 then
+                  Do_Inline (Subp, Orig_Subp);
                end if;
 
                --  The call may have been inlined or may have been passed to
index 57e0ccf886a97a7e86b249c38438d60ade584701..82898b901de70b943f918667cdbff67951d0f72d 100644 (file)
@@ -4888,9 +4888,13 @@ package body Sem_Ch6 is
          Remove (Body_To_Analyze);
 
          --  Keep separate checks needed when compiling without optimizations
+         --  AAMP and VM targets have no support for inlining in the backend
+         --  and hence we use frontend inlining at all optimization levels.
 
-         if Optimization_Level = 0 then
-
+         if Optimization_Level = 0
+           or else AAMP_On_Target
+           or else VM_Target /= No_VM
+         then
             --  Cannot inline functions whose body has a call that returns an
             --  unconstrained type since the secondary stack is involved, and
             --  it is not worth inlining.
index 665e399bf82a8f35972e1a4d2e3032d19691e3d7..67fa2e0fd15074646505a378d9684c4fcf842052 100644 (file)
@@ -9422,7 +9422,13 @@ package body Sem_Util is
 
    function Must_Inline (Subp : Entity_Id) return Boolean is
    begin
-      return Optimization_Level = 0
+      --  AAMP and VM targets have no support for inlining in the backend.
+      --  Hence we do as much inlining as possible in the front end.
+
+      return
+        (Optimization_Level = 0
+           or else AAMP_On_Target
+           or else VM_Target /= No_VM)
         and then Has_Pragma_Inline (Subp)
         and then (Has_Pragma_Inline_Always (Subp) or else Front_End_Inlining);
    end Must_Inline;