blob: 0ba161427941315d43f5f625b33469944b321e82 [file] [log] [blame]
Tom Stellard70f13db2013-10-10 17:11:46 +00001; RUN: llc < %s -march=r600 -mcpu=SI -verify-machineinstrs | FileCheck %s
Tom Stellardeef2ad92013-08-05 22:45:56 +00002
3; Tests for indirect addressing on SI, which is implemented using dynamic
4; indexing of vectors.
5
6; CHECK: extract_w_offset
Tom Stellard326d6ec2014-11-05 14:50:53 +00007; CHECK: s_mov_b32 m0
8; CHECK-NEXT: v_movrels_b32_e32
Tom Stellardeef2ad92013-08-05 22:45:56 +00009define 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
Tom Stellard326d6ec2014-11-05 14:50:53 +000018; CHECK: s_mov_b32 m0
19; CHECK-NEXT: v_movrels_b32_e32
Tom Stellardeef2ad92013-08-05 22:45:56 +000020define 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
Tom Stellard326d6ec2014-11-05 14:50:53 +000028; CHECK: s_mov_b32 m0
29; CHECK-NEXT: v_movreld_b32_e32
Tom Stellardeef2ad92013-08-05 22:45:56 +000030define 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
Tom Stellard326d6ec2014-11-05 14:50:53 +000040; CHECK: s_mov_b32 m0
41; CHECK-NEXT: v_movreld_b32_e32
Tom Stellardeef2ad92013-08-05 22:45:56 +000042define 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}