mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-10-22 20:43:44 +02:00
3d26dcef22
At some point, ARM stopped getting any benefit from ConstantHoisting because the pass called a different variant of getIntImmCost. Reimplementing the correct variant revealed some problems, however: + ConstantHoisting was modifying switch statements. This is simply invalid, the cases must remain integer constants no matter the notional cost. + ConstantHoisting was mangling alloca instructions in the entry block. These should be handled by FrameLowering, so constants actually have a cost of 0. Worse, the resulting bitcasts meant they became dynamic allocas. rdar://25707382 llvm-svn: 266260
23 lines
673 B
LLVM
23 lines
673 B
LLVM
; RUN: llc -mtriple=thumbv7-apple-ios %s -o - | FileCheck %s
|
|
|
|
define void @multiple_store() {
|
|
; CHECK-LABEL: multiple_store:
|
|
; CHECK: movw r[[BASE1:[0-9]+]], #16960
|
|
; CHECK: movs [[VAL:r[0-9]+]], #42
|
|
; CHECK: movt r[[BASE1]], #15
|
|
|
|
; CHECK: str [[VAL]], [r[[BASE1]]]
|
|
; CHECK: str [[VAL]], [r[[BASE1]], #24]
|
|
; CHECK: str.w [[VAL]], [r[[BASE1]], #42]
|
|
|
|
; CHECK: movw r[[BASE2:[0-9]+]], #20394
|
|
; CHECK: movt r[[BASE2]], #18
|
|
|
|
; CHECK: str [[VAL]], [r[[BASE2]]]
|
|
store i32 42, i32* inttoptr(i32 1000000 to i32*)
|
|
store i32 42, i32* inttoptr(i32 1000024 to i32*)
|
|
store i32 42, i32* inttoptr(i32 1000042 to i32*)
|
|
store i32 42, i32* inttoptr(i32 1200042 to i32*)
|
|
ret void
|
|
}
|