[all-commits] [llvm/llvm-project] fae7de: [CHR] Don't run ControlHeightReduction if any BB h...

Xun Li via All-commits all-commits at lists.llvm.org
Sat Jun 12 10:30:09 PDT 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: fae7debadcea335d4aaddee82406a8d10426e730
      https://github.com/llvm/llvm-project/commit/fae7debadcea335d4aaddee82406a8d10426e730
  Author: Xun Li <lxfind at gmail.com>
  Date:   2021-06-12 (Sat, 12 Jun 2021)

  Changed paths:
    M llvm/lib/Transforms/Instrumentation/ControlHeightReduction.cpp
    M llvm/test/Transforms/PGOProfile/chr.ll

  Log Message:
  -----------
  [CHR] Don't run ControlHeightReduction if any BB has address taken

This patch is to address https://bugs.llvm.org/show_bug.cgi?id=50610.
In computed goto pattern, there are usually a list of basic blocks that are all targets of indirectbr instruction, and each basic block also has address taken and stored in a variable.
CHR pass could potentially clone these basic blocks, which would generate a cloned version of the indirectbr and clonved version of all basic blocks in the list.
However these basic blocks will not have their addresses taken and stored anywhere. So latter SimplifyCFG pass will simply remove all tehse cloned basic blocks, resulting in incorrect code.
To fix this, when searching for scopes, we skip scopes that contains BBs with addresses taken.
Added a few test cases.

Reviewed By: aeubanks, wenlei, hoy

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




More information about the All-commits mailing list