Track multiple stores per object when using AA in ScheduleDAGInstrs
authorHal Finkel <hfinkel@anl.gov>
Mon, 20 Jan 2014 14:03:02 +0000 (14:03 +0000)
committerHal Finkel <hfinkel@anl.gov>
Mon, 20 Jan 2014 14:03:02 +0000 (14:03 +0000)
commit5e908e3bab693adbf84f78c078eb17b63e4c2a7a
treea81d080f1a2256105b6ba591f8eb5d9fec146755
parent9334b07527ff08aab2eabe781a9d85f0d3748862
Track multiple stores per object when using AA in ScheduleDAGInstrs

When using AA to break false chain dependencies, we need to track multiple
stores per object in ScheduleDAGInstrs. Historically, we tracked potential alias
chains at the object level, and so all loads of an object would retain
dependencies on any store to that object. With AA, however, this is not
sufficient: non-overlapping stores and loads to the same object all need to be
tested for dependencies separately, we cannot only test all loads to an object
against only the last store (see PR18497 for an explicit example).

To mitigate any unwelcome compile-time impact when not using AA, only one store
is kept in the list per object when not using AA.

This, along with a stack coloring change to come shortly, will provide a test
case, fix PR18497 (and allow LLVM to compile itself using -enable-aa-sched-mi
on x86-64).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199657 91177308-0d34-0410-b5e6-96231b3b80d8
lib/CodeGen/ScheduleDAGInstrs.cpp