diff options
author | Robert Dewar <dewar@adacore.com> | 2015-05-22 12:51:36 +0000 |
---|---|---|
committer | Arnaud Charlet <charlet@gcc.gnu.org> | 2015-05-22 14:51:36 +0200 |
commit | 878e58c85ed67d4090e7e04d27695e892bc78580 (patch) | |
tree | 1338b17af8940144bc5deeefeb5dd2bebc22495e /gcc | |
parent | 64a40a7bb33b55a2c0503ef93908dc33896f37d0 (diff) | |
download | gcc-878e58c85ed67d4090e7e04d27695e892bc78580.zip gcc-878e58c85ed67d4090e7e04d27695e892bc78580.tar.gz gcc-878e58c85ed67d4090e7e04d27695e892bc78580.tar.bz2 |
exp_ch4.adb (Expand_N_Op_Eq): Introduce 'Machine for 'Result comparison.
2015-05-22 Robert Dewar <dewar@adacore.com>
* exp_ch4.adb (Expand_N_Op_Eq): Introduce 'Machine for 'Result
comparison.
From-SVN: r223559
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/ada/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/ada/exp_ch4.adb | 24 |
2 files changed, 29 insertions, 0 deletions
diff --git a/gcc/ada/ChangeLog b/gcc/ada/ChangeLog index 9c8ddbf..7105a7a 100644 --- a/gcc/ada/ChangeLog +++ b/gcc/ada/ChangeLog @@ -1,3 +1,8 @@ +2015-05-22 Robert Dewar <dewar@adacore.com> + + * exp_ch4.adb (Expand_N_Op_Eq): Introduce 'Machine for 'Result + comparison. + 2015-05-22 Eric Botcazou <ebotcazou@adacore.com> * sprint.adb (Source_Dump): When generating debug files, deal diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb index 9f3be7e..df73482 100644 --- a/gcc/ada/exp_ch4.adb +++ b/gcc/ada/exp_ch4.adb @@ -7519,7 +7519,31 @@ package body Exp_Ch4 is Rewrite_Comparison (N); + -- Special optimization of length comparison + Optimize_Length_Comparison (N); + + -- One more special case, if we have a comparison of X'Result = expr + -- in floating-point, then if not already there, change expr to be + -- f'Machine (expr) to eliminate suprise from extra precision. + + if Is_Floating_Point_Type (Typl) + and then Nkind (Original_Node (Lhs)) = N_Attribute_Reference + and then Attribute_Name (Original_Node (Lhs)) = Name_Result + then + -- Stick in the Typ'Machine call if not already there + + if Nkind (Rhs) /= N_Attribute_Reference + or else Attribute_Name (Rhs) /= Name_Machine + then + Rewrite (Rhs, + Make_Attribute_Reference (Loc, + Prefix => New_Occurrence_Of (Typl, Loc), + Attribute_Name => Name_Machine, + Expressions => New_List (Relocate_Node (Rhs)))); + Analyze_And_Resolve (Rhs, Typl); + end if; + end if; end Expand_N_Op_Eq; ----------------------- |