HomePhabricator

Add CanonicalizeFreezeInLoops pass

Authored by aqjune on May 7 2020, 1:28 PM.

Description

Add CanonicalizeFreezeInLoops pass

Summary:
If an induction variable is frozen and used, SCEV yields imprecise result
because it doesn't say anything about frozen variables.

Due to this reason, performance degradation happened after
https://reviews.llvm.org/D76483 is merged, causing
SCEV yield imprecise result and preventing LSR to optimize a loop.

The suggested solution here is to add a pass which canonicalizes frozen variables
inside a loop. To be specific, it pushes freezes out of the loop by freezing
the initial value and step values instead & dropping nsw/nuw flags from instructions used by freeze.
This solution was also mentioned at https://reviews.llvm.org/D70623 .

Reviewers: spatel, efriedma, lebedev.ri, fhahn, jdoerfert

Reviewed By: fhahn

Subscribers: nikic, mgorny, hiraditya, javed.absar, llvm-commits, sanwou01, nlopes

Tags: #llvm

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

Details

Committed
aqjuneMay 20 2020, 5:29 PM
Reviewer
fhahn
Differential Revision
D77523: Add CanonicalizeFreezeInLoops pass
Parents
rG51dbda543848: [clang-format][docfix] Update predefined styles in docs
Branches
Unknown
Tags
Unknown