Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ARM] Fix insert point for store rescheduling.
In ARMPreAllocLoadStoreOpt::RescheduleOps, LastOp should be the last operation which we want to merge. If we break out of the loop because an operation has the wrong offset, we shouldn't use that operation as LastOp. This patch fixes some cases where we would move stores to the wrong insert point. Re-commit with a fix to increment NumMove in the right place. Differential Revision: https://reviews.llvm.org/D30124 llvm-svn: 296815
- Loading branch information
Eli Friedman
committed
Mar 2, 2017
1 parent
0a8ada5
commit bb82127
Showing
3 changed files
with
76 additions
and
25 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
; RUN: llc -mtriple=armv7--eabi -verify-machineinstrs < %s | FileCheck %s | ||
|
||
; Check the way we schedule/merge a bunch of loads and stores. | ||
; Originally test/CodeGen/ARM/2011-07-07-ScheduleDAGCrash.ll ; now | ||
; being used as a test of optimizations related to ldm/stm. | ||
|
||
; FIXME: We could merge more loads/stores with regalloc hints. | ||
; FIXME: Fix scheduling so we don't have 16 live registers. | ||
|
||
define void @f(i256* nocapture %a, i256* nocapture %b, i256* nocapture %cc, i256* nocapture %dd) nounwind uwtable noinline ssp { | ||
entry: | ||
%c = load i256, i256* %cc | ||
%d = load i256, i256* %dd | ||
%add = add nsw i256 %c, %d | ||
store i256 %add, i256* %a, align 8 | ||
%or = or i256 %c, 1606938044258990275541962092341162602522202993782792835301376 | ||
%add6 = add nsw i256 %or, %d | ||
store i256 %add6, i256* %b, align 8 | ||
ret void | ||
; CHECK-DAG: ldm r3 | ||
; CHECK-DAG: ldm r2 | ||
; CHECK-DAG: ldr {{.*}}, [r3, #20] | ||
; CHECK-DAG: ldr {{.*}}, [r3, #16] | ||
; CHECK-DAG: ldr {{.*}}, [r3, #28] | ||
; CHECK-DAG: ldr {{.*}}, [r3, #24] | ||
; CHECK-DAG: ldr {{.*}}, [r2, #20] | ||
; CHECK-DAG: ldr {{.*}}, [r2, #16] | ||
; CHECK-DAG: ldr {{.*}}, [r2, #28] | ||
; CHECK-DAG: ldr {{.*}}, [r2, #24] | ||
; CHECK-DAG: stmib r0 | ||
; CHECK-DAG: str {{.*}}, [r0] | ||
; CHECK-DAG: str {{.*}}, [r0, #24] | ||
; CHECK-DAG: str {{.*}}, [r0, #28] | ||
; CHECK-DAG: str {{.*}}, [r1] | ||
; CHECK-DAG: stmib r1 | ||
; CHECK-DAG: str {{.*}}, [r1, #24] | ||
; CHECK-DAG: str {{.*}}, [r1, #28] | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters