mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
f633d550ca
If a vector index is out of bounds, the result is supposed to be undefined but is not undefined behavior. Change the legalization for indexing the vector on the stack so that an out of bounds index does not create an out of bounds memory access. llvm-svn: 291604
34 lines
1.0 KiB
LLVM
34 lines
1.0 KiB
LLVM
; RUN: llc < %s -mtriple=arm64-apple-ios | FileCheck %s
|
|
|
|
; CHECK-LABEL: _test:
|
|
; CHECK-DAG: fmov.2d v0, #2.00000000
|
|
; CHECK-DAG: and [[MASK_IDX:x[0-9]+]], x1, #0x3
|
|
; CHECK-DAG: mov x9, sp
|
|
; CHECK-DAG: str q0, [sp], #16
|
|
; CHECK-DAG: bfi [[PTR:x[0-9]+]], [[MASK_IDX]], #2, #2
|
|
; CHECK: ldr s0, {{\[}}[[PTR]]{{\]}}
|
|
; CHECK: str s0, [x0]
|
|
|
|
define void @test(float * %p1, i32 %v1) {
|
|
entry:
|
|
%v2 = extractelement <3 x float> <float 0.000000e+00, float 2.000000e+00, float 0.000000e+00>, i32 %v1
|
|
store float %v2, float* %p1, align 4
|
|
ret void
|
|
}
|
|
|
|
; CHECK-LABEL: _test2
|
|
; CHECK: movi.16b v0, #63
|
|
; CHECK-DAG: and [[MASK_IDX:x[0-9]+]], x1, #0x3
|
|
; CHECK-DAG: str q0, [sp], #16
|
|
; CHECK-DAG: mov x9, sp
|
|
; CHECK-DAG: bfi [[PTR:x[0-9]+]], [[MASK_IDX]], #2, #2
|
|
; CHECK: ldr s0, {{\[}}[[PTR]]{{\]}}
|
|
; CHECK: str s0, [x0]
|
|
|
|
define void @test2(float * %p1, i32 %v1) {
|
|
entry:
|
|
%v2 = extractelement <3 x float> <float 0.7470588088035583, float 0.7470588088035583, float 0.7470588088035583>, i32 %v1
|
|
store float %v2, float* %p1, align 4
|
|
ret void
|
|
}
|