diff options
author | Tobias Grosser <tobias@grosser.es> | 2017-08-17 05:25:08 +0000 |
---|---|---|
committer | Tobias Grosser <tobias@grosser.es> | 2017-08-17 05:25:08 +0000 |
commit | ed6a4acc7f590ee5cc144644106217a0c62225a6 (patch) | |
tree | 65a7ee2ddd4183a5a5b70cedf98b5378e52b5826 /llvm/lib/CodeGen/MachineScheduler.cpp | |
parent | 99e5e98eeca1ef675f1608e395494bb3b9b41f6f (diff) | |
download | llvm-ed6a4acc7f590ee5cc144644106217a0c62225a6.zip llvm-ed6a4acc7f590ee5cc144644106217a0c62225a6.tar.gz llvm-ed6a4acc7f590ee5cc144644106217a0c62225a6.tar.bz2 |
Add rewrite by-reference parameter pass
Summary:
This pass detangles induction variables from functions, which take variables by
reference. Most fortran functions compiled with gfortran pass variables by
reference. Unfortunately a common pattern, printf calls of induction variables,
prevent in this situation the promotion of the induction variable to a register,
which again inhibits any kind of loop analysis. To work around this issue
we developed a specialized pass which introduces separate alloca slots for
known-read-only references, which indicate the mem2reg pass that the induction
variables can be promoted to registers and consquently enable SCEV to work.
We currently hardcode the information that a function
_gfortran_transfer_integer_write does not read its second parameter, as
dragonegg does not add the right annotations and we cannot change old dragonegg
releases. Hopefully flang will produce the right annotations.
Reviewers: Meinersbur, bollu, singam-sanjay
Reviewed By: bollu
Subscribers: mgorny, pollydev, llvm-commits
Tags: #polly
Differential Revision: https://reviews.llvm.org/D36800
llvm-svn: 311066
Diffstat (limited to 'llvm/lib/CodeGen/MachineScheduler.cpp')
0 files changed, 0 insertions, 0 deletions