[all-commits] [llvm/llvm-project] ae05b9: Sink/hoist memory instructions between loop fusion...

aaronkintel via All-commits all-commits at lists.llvm.org
Wed Sep 7 04:59:33 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: ae05b9dc305fc9d56d16fe102e528905da1187f8
      https://github.com/llvm/llvm-project/commit/ae05b9dc305fc9d56d16fe102e528905da1187f8
  Author: Aaron Kogon <aaron.kogon at intel.com>
  Date:   2022-09-07 (Wed, 07 Sep 2022)

  Changed paths:
    M llvm/lib/Transforms/Scalar/LoopFuse.cpp
    A llvm/test/Transforms/LoopFusion/hoist_load.ll
    A llvm/test/Transforms/LoopFusion/hoist_store.ll
    A llvm/test/Transforms/LoopFusion/no_sink_hoist_atomic.ll
    A llvm/test/Transforms/LoopFusion/no_sink_hoist_load.ll
    M llvm/test/Transforms/LoopFusion/no_sink_hoist_store.ll
    M llvm/test/Transforms/LoopFusion/no_sink_hoist_unknown_function.ll
    A llvm/test/Transforms/LoopFusion/no_sink_hoist_volatile.ll
    A llvm/test/Transforms/LoopFusion/sink_load.ll
    A llvm/test/Transforms/LoopFusion/sink_store.ll

  Log Message:
  -----------
  Sink/hoist memory instructions between loop fusion candidates

Currently, instructions in the preheader of the second of two fusion
candidates are sunk and hoisted whenever possible, to try to allow the
loops to fuse. Memory instructions are skipped, and are never sunk or
hoisted. This change adds memory instructions for sinking/hoisting
consideration.

This change uses DependenceAnalysis to check if a mem inst in the
preheader of FC1 depends on an instruction in FC0's header, across
which it will be hoisted, or FC1's header, across which it will be
sunk. We reject cases where the dependency is a data hazard.

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




More information about the All-commits mailing list