]> git.ipfire.org Git - thirdparty/gcc.git/commit
Fix loss of optimization of array iteration due to inlining
authorEric Botcazou <ebotcazou@adacore.com>
Wed, 28 Apr 2021 07:43:02 +0000 (09:43 +0200)
committerEric Botcazou <ebotcazou@adacore.com>
Wed, 28 Apr 2021 07:46:22 +0000 (09:46 +0200)
commit852dd866e2faba95cb407c98d31a48b6aae66677
tree5fdf04f62c9004fc0406ef82636e0f496ff35fab
parentd91e7eab3a2c3957c2220ad71e62d9fc78cccb9b
Fix loss of optimization of array iteration due to inlining

This helps loop-invariant motion to hoist complicated offset computations.

gcc/ada/
* gcc-interface/trans.c (language_function): Add comment.
(loop_info_d): Add fndecl and invariants fields.
(find_loop_for): Test fndecl instead of the context of var.
(find_loop): New function.
(Regular_Loop_to_gnu): Fold back into...
(Loop_Statement_to_gnu): ...this.  Emit invariants on entry, if any.
(gnat_to_gnu) <N_Selected_Component>: Record nonconstant invariant
offset computations in loops when optimization is enabled.
* gcc-interface/utils2.c (gnat_invariant_expr): Handle BIT_AND_EXPR.
gcc/testsuite/
* gnat.dg/opt93.ads, gnat.dg/opt93.adb: New test.
gcc/ada/gcc-interface/trans.c
gcc/ada/gcc-interface/utils2.c
gcc/testsuite/gnat.dg/opt93.adb [new file with mode: 0644]
gcc/testsuite/gnat.dg/opt93.ads [new file with mode: 0644]