Skip to content
  • Chris Lattner's avatar
    Make CanFallThrough more intelligent (so it can handle blocks with (e.g.) no · 504eeda3
    Chris Lattner authored
    successors), and make island block movement more general.
    
    This compiles CodeGen/X86/2006-04-27-ISelFoldingBug.ll to:
    
    _loadAndRLEsource_no_exit_2E_1_label_2E_0:
            subl $8, %esp
            movl %esi, 4(%esp)
            movl %ebx, (%esp)
            movl 16(%esp), %eax
            movl 12(%esp), %ecx
    LBB1_3: #label.0
            movl _last, %edx
            movl %edx, %esi
            incl %esi
            movl %esi, _last
            movl %ecx, %ebx
            # TRUNCATE movb %bl, %bl
            movl _block, %esi
            movb %bl, 1(%esi,%edx)
            cmpl %eax, _last
            jge LBB1_2      #codeRepl5.exitStub
    LBB1_4: #label.0
            cmpl $257, %ecx
            je LBB1_2       #codeRepl5.exitStub
    LBB1_1: #label.0.no_exit.1_crit_edge.exitStub
            movl $1, %eax
            movl (%esp), %ebx
            movl 4(%esp), %esi
            addl $8, %esp
            ret
    LBB1_2: #codeRepl5.exitStub
            xorl %eax, %eax
            movl (%esp), %ebx
            movl 4(%esp), %esi
            addl $8, %esp
            ret
    
    instead of:
    
    _loadAndRLEsource_no_exit_2E_1_label_2E_0:
            subl $8, %esp
            movl %esi, 4(%esp)
            movl %ebx, (%esp)
            movl 16(%esp), %eax
            movl 12(%esp), %ecx
            jmp LBB1_3      #label.0
    LBB1_1: #label.0.no_exit.1_crit_edge.exitStub
            movl $1, %eax
            movl (%esp), %ebx
            movl 4(%esp), %esi
            addl $8, %esp
            ret
    LBB1_2: #codeRepl5.exitStub
            xorl %eax, %eax
            movl (%esp), %ebx
            movl 4(%esp), %esi
            addl $8, %esp
            ret
    LBB1_3: #label.0
            movl _last, %edx
            movl %edx, %esi
            incl %esi
            movl %esi, _last
            movl %ecx, %ebx
            # TRUNCATE movb %bl, %bl
            movl _block, %esi
            movb %bl, 1(%esi,%edx)
            cmpl %eax, _last
            jge LBB1_2      #codeRepl5.exitStub
    LBB1_4: #label.0
            cmpl $257, %ecx
            jne LBB1_1      #label.0.no_exit.1_crit_edge.exitStub
            jmp LBB1_2      #codeRepl5.exitStub
    
    ... which is much better layout :)
    
    llvm-svn: 31282
    504eeda3
Loading