[llvm-bugs] [Bug 37273] New: Stack overflow in PeepHoleOptimizer

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Apr 27 10:18:55 PDT 2018


https://bugs.llvm.org/show_bug.cgi?id=37273

            Bug ID: 37273
           Summary: Stack overflow in PeepHoleOptimizer
           Product: libraries
           Version: 6.0
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Common Code Generator Code
          Assignee: unassignedbugs at nondot.org
          Reporter: david.l.kreitzer at intel.com
                CC: llvm-bugs at lists.llvm.org

Created attachment 20236
  --> https://bugs.llvm.org/attachment.cgi?id=20236&action=edit
Reproducer compile as "llc bugpoint-reduced-function.bc"

The attached test case crashes llc due to deep recursion in this function:

  TargetInstrInfo::RegSubRegPair
  getNewSource(MachineRegisterInfo *MRI, const TargetInstrInfo *TII,
               TargetInstrInfo::RegSubRegPair Def,
               PeepholeOptimizer::RewriteMapTy &RewriteMap,
               bool HandleMultipleSources = true) {

I think this is because PeepholeOptimizer::findNextSource returns true even
though the RewritePHILimit is reached.

I confirmed that the following patch fixes the problem even though it was
intended to be NFC. It restructured the findNextSource code in such a way that
exceeding RewritePHILimit will always cause the routine to return false.

commit e5f83314a1df7ef7843f904da01f2aa236bbe7f0
Author: Matthias Braun <matze at braunis.de>
Date:   Thu Jan 11 22:59:33 2018 +0000

    PeepholeOpt cleanup/refactor; NFC

    - Less unnecessary use of `auto`
    - Add early `using RegSubRegPair(AndIdx) =` to avoid countless
      `TargetInstrInfo::` qualifications.
    - Use references instead of pointers where possible.
    - Remove unused parameters.
    - Rewrite the CopyRewriter class hierarchy:
       - Pull out uncoalescable copy rewriting functionality into
         PeepholeOptimizer class.
       - Use an abstract base class to make it clear that rewriters are
         independent.
    - Remove unnecessary \brief in doxygen comments.
    - Remove unused constructor and method from ValueTracker.
    - Replace UseAdvancedTracking of ValueTracker with DisableAdvCopyOpt use.

-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20180427/639600bf/attachment.html>


More information about the llvm-bugs mailing list