aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJavier Miranda <miranda@adacore.com>2012-03-09 14:48:24 +0000
committerArnaud Charlet <charlet@gcc.gnu.org>2012-03-09 15:48:24 +0100
commitea3a4ad0a334535466172e2860f7f5ed7795e331 (patch)
treef3541728bbceb78cc0bfefa5f0f4aaf895e11126
parent30da483da3ce6ea64ac9b4daea5cd41c59bc4446 (diff)
downloadgcc-ea3a4ad0a334535466172e2860f7f5ed7795e331.zip
gcc-ea3a4ad0a334535466172e2860f7f5ed7795e331.tar.gz
gcc-ea3a4ad0a334535466172e2860f7f5ed7795e331.tar.bz2
sem_ch6.adb (Check_Body_To_Inline): In AAMP and VM targets use frontend inlining at all optimization levels.
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
-rw-r--r--gcc/ada/ChangeLog10
-rw-r--r--gcc/ada/exp_ch6.adb8
-rw-r--r--gcc/ada/sem_ch6.adb8
-rw-r--r--gcc/ada/sem_util.adb8
4 files changed, 26 insertions, 8 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog
index 826383e..194f6b0 100644
--- a/gcc/ada/ChangeLog
+++ b/gcc/ada/ChangeLog
@@ -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.
@@ -504,7 +513,6 @@
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
diff --git a/gcc/ada/exp_ch6.adb b/gcc/ada/exp_ch6.adb
index 5afb31c..7b6b296 100644
--- a/gcc/ada/exp_ch6.adb
+++ b/gcc/ada/exp_ch6.adb
@@ -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
diff --git a/gcc/ada/sem_ch6.adb b/gcc/ada/sem_ch6.adb
index 57e0ccf..82898b9 100644
--- a/gcc/ada/sem_ch6.adb
+++ b/gcc/ada/sem_ch6.adb
@@ -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.
diff --git a/gcc/ada/sem_util.adb b/gcc/ada/sem_util.adb
index 665e399..67fa2e0 100644
--- a/gcc/ada/sem_util.adb
+++ b/gcc/ada/sem_util.adb
@@ -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;