diff mbox series

[Ada] Move down call to Narrow_Large_Operation in Expand_N_Op_Multiply

Message ID 20201127091800.GA63173@adacore.com
State New
Headers show
Series [Ada] Move down call to Narrow_Large_Operation in Expand_N_Op_Multiply | expand

Commit Message

Pierre-Marie de Rodat Nov. 27, 2020, 9:18 a.m. UTC
It can block the transformation of the multiplication by a power of 2
into a shift operation when the context is Universal_Integer and checks
are disabled.

Tested on x86_64-pc-linux-gnu, committed on trunk

gcc/ada/

	* exp_ch4.adb (Expand_N_Op_Multiply): Move down block calling
	Narrow_Large_Operation if the type is Universal_Integer.
diff mbox series

Patch

diff --git a/gcc/ada/exp_ch4.adb b/gcc/ada/exp_ch4.adb
--- a/gcc/ada/exp_ch4.adb
+++ b/gcc/ada/exp_ch4.adb
@@ -9716,16 +9716,6 @@  package body Exp_Ch4 is
          end if;
       end if;
 
-      --  Try to narrow the operation
-
-      if Typ = Universal_Integer then
-         Narrow_Large_Operation (N);
-
-         if Nkind (N) /= N_Op_Multiply then
-            return;
-         end if;
-      end if;
-
       --  Convert x * 2 ** y to Shift_Left (x, y). Note that the fact that
       --  Is_Power_Of_2_For_Shift is set means that we know that our left
       --  operand is an integer, as required for this to work.
@@ -9802,6 +9792,16 @@  package body Exp_Ch4 is
          return;
       end if;
 
+      --  Try to narrow the operation
+
+      if Typ = Universal_Integer then
+         Narrow_Large_Operation (N);
+
+         if Nkind (N) /= N_Op_Multiply then
+            return;
+         end if;
+      end if;
+
       --  Do required fixup of universal fixed operation
 
       if Typ = Universal_Fixed then