[llvm-dev] Report of Potential Risks when Using Loop Extractor Pass

Tingyuan LIANG via llvm-dev llvm-dev at lists.llvm.org
Sat Jul 6 21:12:40 PDT 2019


Dear all,

    Hi! Recently, I use loop extractor pass in the latest version, which extracts loops into functions, to optimize part of the code.
    However, I notice some problems which might be caused by the assumption of loop extractor and lead to some functionalities may miss in the transformed IR code.
    I walk around the problem by inserting redundant basic blocks for loop header but I think it could cause problem for someone else.

    I guess the problem is caused by the assumption shown in llvm/lib/Transforms/Utils/CodeExtractor.cpp
=================================================
Function *CodeExtractor::extractCodeRegion() {
  // Assumption: this is a single-entry code region, and the header is the first
  // block in the region.
=================================================


   You can try to reproduce the problem with the following simple source code. You can notice that the if-else branch is gone and the IR code is wrong.
=================================================

void f( int A[56][100],  int *C)
{
    int N = 100;
    int M = 56;
    for ( int j = 1; j < N; j++ )
        for ( int i = 1; i < M+1; i++ )
        {
            A[i][j] = A[i-1][j-1] + A[i][j-1] + A[i-1][j] + 1;
        }

    if (*C>10)
    {
      *C = 10;
      for ( int j = 1; j < N; j++ )
          for ( int i = 1; i < M+1; i++ )
          {
              A[i][j] = A[i-1][j-1] + A[i][j-1] + A[i-1][j] + 1;
          }
    }
    return;
}

=================================================




Best regards,
------------------------------------------
Tingyuan LIANG
MPhil Student
Department of Electronic and Computer Engineering
The Hong Kong University of Science and Technology
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20190707/6bae1134/attachment.html>


More information about the llvm-dev mailing list