[all-commits] [llvm/llvm-project] 596e4a: [LCSSA] Forget values we create LCSSA phis for

Florian Hahn via All-commits all-commits at lists.llvm.org
Tue Oct 29 05:05:47 PDT 2019


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 596e4ab97a1637d2c7781aed20e3d62bcf07ef5d
      https://github.com/llvm/llvm-project/commit/596e4ab97a1637d2c7781aed20e3d62bcf07ef5d
  Author: Florian Hahn <florian_hahn at apple.com>
  Date:   2019-10-29 (Tue, 29 Oct 2019)

  Changed paths:
    M llvm/include/llvm/Transforms/Utils/LoopUtils.h
    M llvm/lib/Transforms/Utils/LCSSA.cpp
    A llvm/test/Transforms/LoopUnroll/unroll-preserve-scev-lcssa.ll

  Log Message:
  -----------
  [LCSSA] Forget values we create LCSSA phis for

Summary:
Currently we only forget the loop we added LCSSA phis for. But SCEV
expressions in other loops could also depend on the instruction we added
a PHI for and currently we do not invalidate those expressions. This can
happen when we use ScalarEvolution before converting a function to LCSSA
form. The SCEV expressions will refer to the non-LCSSA value. If this
SCEV expression is then used with the expander, we do not preserve LCSSA
form.

This patch properly forgets the values we created PHIs for. Those need
to be recomputed again. This patch fixes PR43458.

Currently SCEV::verify does not catch this mismatch and any test would
need to run multiple passes to trigger the error (e.g. -loop-reduce
-loop-unroll). I will also look into catching this kind of mismatch in
the verifier. Also, we currently forget the whole loop in LCSSA and I'll
check if we can be more surgical.

Reviewers: efriedma, sanjoy.google, reames

Reviewed By: efriedma

Subscribers: zzheng, hiraditya, javed.absar, llvm-commits

Tags: #llvm

Differential Revision: https://reviews.llvm.org/D68194




More information about the All-commits mailing list