blob: ba5de228509141bbc9fc7ea6763a85e669cd222e [file] [log] [blame]
Tom Stellardeef2ad92013-08-05 22:45:56 +00001; RUN: llc < %s -march=r600 -mcpu=SI | FileCheck %s
2
3; Tests for indirect addressing on SI, which is implemented using dynamic
4; indexing of vectors.
5
6; CHECK: extract_w_offset
7; CHECK: S_MOV_B32 M0
8; CHECK-NEXT: V_MOVRELS_B32_e32
9define void @extract_w_offset(float addrspace(1)* %out, i32 %in) {
10entry:
11 %0 = add i32 %in, 1
12 %1 = extractelement <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, i32 %0
13 store float %1, float addrspace(1)* %out
14 ret void
15}
16
17; CHECK: extract_wo_offset
18; CHECK: S_MOV_B32 M0
19; CHECK-NEXT: V_MOVRELS_B32_e32
20define void @extract_wo_offset(float addrspace(1)* %out, i32 %in) {
21entry:
22 %0 = extractelement <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, i32 %in
23 store float %0, float addrspace(1)* %out
24 ret void
25}
26
27; CHECK: insert_w_offset
28; CHECK: S_MOV_B32 M0
29; CHECK-NEXT: V_MOVRELD_B32_e32
30define void @insert_w_offset(float addrspace(1)* %out, i32 %in) {
31entry:
32 %0 = add i32 %in, 1
33 %1 = insertelement <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, float 5.0, i32 %0
34 %2 = extractelement <4 x float> %1, i32 2
35 store float %2, float addrspace(1)* %out
36 ret void
37}
38
39; CHECK: insert_wo_offset
40; CHECK: S_MOV_B32 M0
41; CHECK-NEXT: V_MOVRELD_B32_e32
42define void @insert_wo_offset(float addrspace(1)* %out, i32 %in) {
43entry:
44 %0 = insertelement <4 x float> <float 1.0, float 2.0, float 3.0, float 4.0>, float 5.0, i32 %in
45 %1 = extractelement <4 x float> %0, i32 2
46 store float %1, float addrspace(1)* %out
47 ret void
48}