1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-10-22 20:43:44 +02:00
llvm-mirror/test/CodeGen/ARM/static-addr-hoisting.ll
Tim Northover 3d26dcef22 ARM: override cost function to re-enable ConstantHoisting (& fix it).
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
2016-04-13 23:08:27 +00:00

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
}