mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 05:01:59 +01:00
6cb5fc80e8
Summary: In getUnderlyingObjectsForInstr(): Don't give up on instructions with multiple MMOs, instead look through all the MMOs and if they all meet the conservative criteria previously used for single MMO instructions, then return all of the underlying objects derived from the MMOs. The change to ScheduleDAGInstrs::buildSchedGraph() is needed to avoid the case where multiple underlying objects are present and are related in such a way that successive iterations of the loop end up adding a dependency from an instruction to itself. Reviewers: atrick, hfinkel Subscribers: MatzeB, mcrosier, llvm-commits Differential Revision: http://reviews.llvm.org/D18093 llvm-svn: 266084
24 lines
998 B
LLVM
24 lines
998 B
LLVM
; REQUIRES: asserts
|
|
; RUN: llc < %s -mtriple=arm64-linux-gnu -mcpu=cortex-a57 -enable-misched=0 -debug-only=misched -o - 2>&1 > /dev/null | FileCheck %s
|
|
|
|
|
|
@G1 = common global [100 x i32] zeroinitializer, align 4
|
|
@G2 = common global [100 x i32] zeroinitializer, align 4
|
|
|
|
; Check that no scheduling dependencies are created between the paired loads and the store during post-RA MI scheduling.
|
|
;
|
|
; CHECK-LABEL: # Machine code for function foo: Properties: <Post SSA
|
|
; CHECK: SU(2): %W{{[0-9]+}}<def>, %W{{[0-9]+}}<def> = LDPWi
|
|
; CHECK: Successors:
|
|
; CHECK-NOT: ch SU(4)
|
|
; CHECK: SU(3)
|
|
; CHECK: SU(4): STRWui %WZR, %X{{[0-9]+}}
|
|
define i32 @foo() {
|
|
entry:
|
|
%0 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @G2, i64 0, i64 0), align 4
|
|
%1 = load i32, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @G2, i64 0, i64 1), align 4
|
|
store i32 0, i32* getelementptr inbounds ([100 x i32], [100 x i32]* @G1, i64 0, i64 0), align 4
|
|
%add = add nsw i32 %1, %0
|
|
ret i32 %add
|
|
}
|