[llvm-bugs] [Bug 32784] New: Multiple returns are not canonicalized to a single return

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Apr 25 02:30:20 PDT 2017


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

            Bug ID: 32784
           Summary: Multiple returns are not canonicalized to a single
                    return
           Product: libraries
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: Transformation Utilities
          Assignee: unassignedbugs at nondot.org
          Reporter: me at manueljacob.de
                CC: llvm-bugs at lists.llvm.org

The patch for PR8575 stopped canonicalizing in the other direction, but other
than the bug title suggests, a canonicalization from multiple returns to a
single return was never implemented.

There are examples where this canonicalization would enable other
optimizations.  For example, this isn't optimized further:

define void @test(i1 %cond, i64* %ptr1, i64* %ptr2, i64 %value) {
  br i1 %cond, label %true_block, label %false_block

true_block:
  store i64 %value, i64* %ptr1
  ret void

false_block:
  store i64 %value, i64* %ptr2
  ret void
}

Changing the function to have a single return...

define void @test(i1 %cond, i64* %ptr1, i64* %ptr2, i64 %value) {
  br i1 %cond, label %true_block, label %false_block

true_block:
  store i64 %value, i64* %ptr1
  br label %join

false_block:
  store i64 %value, i64* %ptr2
  br label %join

join:
  ret void
}

... enables common instruction sinking:

define void @test(i1 %cond, i64* nocapture %ptr1, i64* nocapture %ptr2, i64
%value) local_unnamed_addr #0 {
join:
  %ptr2.sink = select i1 %cond, i64* %ptr1, i64* %ptr2
  store i64 %value, i64* %ptr2.sink, align 8
  ret void
}

-- 
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/20170425/c77230ca/attachment-0001.html>


More information about the llvm-bugs mailing list