Skip to content

LoopReroll incorrectly reorders memory instrs when there is overlap #47002

Closed as not planned
@llvmbot

Description

@llvmbot
Bugzilla Link 47658
Version trunk
OS All
Reporter LLVM Bugzilla Contributor
CC @efriedma-quic,@hfinkel,@jmolloy,@zhengyang92,@nunoplopes,@regehr

Extended Description

Test: Transforms/LoopReroll/basic.ll
Function: pointer_bitcast_baseinst
Reason: Memory mismatch

Example: https://godbolt.org/z/5c8YK1
Ordering of loads and stores with memory offsets:

source - load 876, load 892, store 892, store 900, ...
target - load 876, store 892, load 892, store 900, ...

Since there is overlap between the memory positions of the second load and first store in source then the swapped ordering of these instructions in target is incorrect.
This optimization should not be performed in case of such a memory overlap.

A detailed and complete Alive report with single iteration loop unroll on this test can be seen here: https://pastebin.com/pQsf61wb

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions