[llvm-bugs] [Bug 31063] New: MergeConsecutiveStores fails in presence of preceding load

via llvm-bugs llvm-bugs at lists.llvm.org
Fri Nov 18 12:37:59 PST 2016


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

            Bug ID: 31063
           Summary: MergeConsecutiveStores fails in presence of preceding
                    load
           Product: libraries
           Version: 3.9
          Hardware: PC
                OS: Linux
            Status: NEW
          Severity: normal
          Priority: P
         Component: Common Code Generator Code
          Assignee: unassignedbugs at nondot.org
          Reporter: djones at xtreme-eda.com
                CC: llvm-bugs at lists.llvm.org
    Classification: Unclassified

Created attachment 17613
  --> https://llvm.org/bugs/attachment.cgi?id=17613&action=edit
IR illustrating bug

The attached IR file defines two functions test_func, and test_func3.  These
functions perform consecutive stores of constants, and expect the backend to
combine the byte stores into a larger store.

Using LLVM 3.9.0 release on x86-64 Debian Linux, I get:

        .text
        .file   "test.ll"
        .globl  test_func
        .p2align        4, 0x90
        .type   test_func, at function
test_func:                              # @test_func
        .cfi_startproc
# BB#0:                                 # %bb_1
        movw    $770, 80(%rdi)          # imm = 0x302
        xorl    %eax, %eax
        retq
.Lfunc_end0:
        .size   test_func, .Lfunc_end0-test_func
        .cfi_endproc

        .globl  test_func3
        .p2align        4, 0x90
        .type   test_func3, at function
test_func3:                             # @test_func3
        .cfi_startproc
# BB#0:                                 # %bb_1
        movq    (%rdi), %rax
        movb    $4, 80(%rax)
        movb    $5, 81(%rax)
        xorl    %eax, %eax
        retq
.Lfunc_end1:
        .size   test_func3, .Lfunc_end1-test_func3
        .cfi_endproc

The stores were merged for the first case, but not the second.  The only
difference between the two is that in the second case, there is a preceding
load, which may alias the stores.  If this load occurred in between the stores,
then it is clear that combining the stores is wrong, as you ought not to move
stores around a possibly aliasing load. However, this is not the case here: the
stores follow the load, and combining them will not affect the load.

-- 
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/20161118/9e2f6f67/attachment.html>


More information about the llvm-bugs mailing list