[llvm-bugs] [Bug 25263] New: LiveIn lists for MBBs are incorrect

via llvm-bugs llvm-bugs at lists.llvm.org
Tue Oct 20 09:40:12 PDT 2015


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

            Bug ID: 25263
           Summary: LiveIn lists for MBBs are incorrect
           Product: clang
           Version: trunk
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: LLVM Codegen
          Assignee: unassignedclangbugs at nondot.org
          Reporter: paulsson at linux.vnet.ibm.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Created attachment 15123
  --> https://llvm.org/bugs/attachment.cgi?id=15123&action=edit
clang input

The provided test case shows that the LiveIn lists for some MBB have been
filled with long lists of non-live registers. This seems to happen after
Control Flow Optimizer, and after If Converter. Target is SystemZ.

Test case provided. It is reduced, but still have two small functions due to
inlining results required to reproduce the interesting function.

Run with:
./bin/clang -cc1 -triple s390x-ibm-linux-gnu -S -disable-free
-mrelocation-model static -mthread-model posix -fmath-errno -target-cpu z13
-momit-leaf-frame-pointer -v -O3 -funroll-loops -vectorize-loops -vectorize-slp
-o c-typeck.reduced.s -x ir c-typeck.reduced.bc -mllvm -print-machineinstrs >&
out

The file 'out' will have the printed instructions. 
The 'build_function_call' function displays the problem.

In the fragments of the dump below, it is clear that some return-blocks or
their fall-through predecessor have very long lists of live-in regs that do not
belong there. This is bad because it will make later optimizations more limited
- for instance those using LivePhysRegs for liveness tracking.

# After Control Flow Optimizer:

BB#114: derived from LLVM BB %cleanup
    Live Ins: %V8 %V9 %V10 %V11 %V12 %V13 %V14 %V15 %F8D %F9D %F10D %F11D %F12D
%F13D %F14D %F15D %F8Q %F9Q %F12Q %F13Q %F8S %F9S %F10S %F11S %F12S %F13S %F14S
%F15S %R2D %R3D %R2
H %R3H %R2L %R3L %R2Q %V8 %V9 %V10 %V11 %V12 %V13 %V14 %V15 %F8D %F9D %F10D
%F11D %F12D %F13D %F14D %F15D %F8Q %F9Q %F12Q %F13Q %F8S %F9S %F10S %F11S %F12S
%F13S %F14S %F15S %R2D 
%R2H %R2L %R2Q %V8 %V9 %V10 %V11 %V12 %V13 %V14 %V15 %F8D %F9D %F10D %F11D
%F12D %F13D %F14D %F15D %F8Q %F9Q %F12Q %F13Q %F8S %F9S %F10S %F11S %F12S %F13S
%F14S %F15S
    Predecessors according to CFG: BB#113 BB#12 BB#10
        %R2D<def> = LGRL <ga:@global_trees>; mem:LD8[getelementptr inbounds
([51 x %union.tree_node*], [51 x %union.tree_node*]* @global_trees, i64 0, i64
0)](tbaa=!3)
    Successors according to CFG: BB#115

BB#115: derived from LLVM BB %cleanup
    Live Ins: %R2D
    Predecessors according to CFG: BB#106 BB#110 BB#108 BB#112 BB#114 BB#109
        %R6D<def>, %R15D<def> = LMG %R15D, 248, %R7D<imp-def>, %R8D<imp-def>,
%R9D<imp-def>, %R10D<imp-def>, %R11D<imp-def>, %R12D<imp-def>, %R13D<imp-def>,
%R14D<imp-def>
        Return %R2D<imp-use>


# After If Converter:

BB#114: 
    Live Ins: %R1D %V8 %V9 %V10 %V11 %V12 %V13 %V14 %V15 %F8D %F9D %F10D %F11D
%F12D %F13D %F14D %F15D %F8Q %F9Q %F12Q %F13Q %F8S %F9S %F10S %F11S %F12S %F13S
%F14S %F15S %R1D %R1H %R1L %R0Q
    Predecessors according to CFG: BB#107 BB#110
        %R2D<def> = LGR %R1D<kill>
        %R6D<def>, %R15D<def> = LMG %R15D, 248, %R7D<imp-def>, %R8D<imp-def>,
%R9D<imp-def>, %R10D<imp-def>, %R11D<imp-def>, %R12D<imp-def>, %R13D<imp-def>,
%R14D<imp-def>
        Return %R2D<imp-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/20151020/0112c08e/attachment.html>


More information about the llvm-bugs mailing list