blob: 59082c65cc8ad8cc5287565eedb731146265357e [file] [log] [blame]
Tom Stellard49f8bfd2015-01-06 18:00:21 +00001; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Marek Olsak75170772015-01-27 17:27:15 +00002; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
Matt Arsenault9fe669c2014-03-06 17:34:03 +00003
4; Test expansion of scalar selects on vectors.
5; Evergreen not enabled since it seems to be having problems with doubles.
6
7
Tom Stellard79243d92014-10-01 17:15:17 +00008; FUNC-LABEL: {{^}}select_v4i8:
Tom Stellard326d6ec2014-11-05 14:50:53 +00009; SI: v_cndmask_b32_e64
10; SI: v_cndmask_b32_e64
11; SI: v_cndmask_b32_e64
12; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +000013define void @select_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> %a, <4 x i8> %b, i8 %c) nounwind {
14 %cmp = icmp eq i8 %c, 0
15 %select = select i1 %cmp, <4 x i8> %a, <4 x i8> %b
16 store <4 x i8> %select, <4 x i8> addrspace(1)* %out, align 4
17 ret void
18}
19
Tom Stellard79243d92014-10-01 17:15:17 +000020; FUNC-LABEL: {{^}}select_v4i16:
Tom Stellard326d6ec2014-11-05 14:50:53 +000021; SI: v_cndmask_b32_e64
22; SI: v_cndmask_b32_e64
23; SI: v_cndmask_b32_e64
24; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +000025define void @select_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> %a, <4 x i16> %b, i32 %c) nounwind {
26 %cmp = icmp eq i32 %c, 0
27 %select = select i1 %cmp, <4 x i16> %a, <4 x i16> %b
28 store <4 x i16> %select, <4 x i16> addrspace(1)* %out, align 4
29 ret void
30}
31
Tom Stellard79243d92014-10-01 17:15:17 +000032; FUNC-LABEL: {{^}}select_v2i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000033; SI: v_cndmask_b32_e64
34; SI: v_cndmask_b32_e64
35; SI: buffer_store_dwordx2
Matt Arsenault9fe669c2014-03-06 17:34:03 +000036define void @select_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a, <2 x i32> %b, i32 %c) nounwind {
37 %cmp = icmp eq i32 %c, 0
38 %select = select i1 %cmp, <2 x i32> %a, <2 x i32> %b
39 store <2 x i32> %select, <2 x i32> addrspace(1)* %out, align 8
40 ret void
41}
42
Tom Stellard79243d92014-10-01 17:15:17 +000043; FUNC-LABEL: {{^}}select_v4i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000044; SI: v_cndmask_b32_e64
45; SI: v_cndmask_b32_e64
46; SI: v_cndmask_b32_e64
47; SI: v_cndmask_b32_e64
48; SI: buffer_store_dwordx4
Matt Arsenault9fe669c2014-03-06 17:34:03 +000049define void @select_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> %a, <4 x i32> %b, i32 %c) nounwind {
50 %cmp = icmp eq i32 %c, 0
51 %select = select i1 %cmp, <4 x i32> %a, <4 x i32> %b
52 store <4 x i32> %select, <4 x i32> addrspace(1)* %out, align 16
53 ret void
54}
55
Tom Stellard79243d92014-10-01 17:15:17 +000056; FUNC-LABEL: {{^}}select_v8i32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000057; SI: v_cndmask_b32_e64
58; SI: v_cndmask_b32_e64
59; SI: v_cndmask_b32_e64
60; SI: v_cndmask_b32_e64
61; SI: v_cndmask_b32_e64
62; SI: v_cndmask_b32_e64
63; SI: v_cndmask_b32_e64
64; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +000065define void @select_v8i32(<8 x i32> addrspace(1)* %out, <8 x i32> %a, <8 x i32> %b, i32 %c) nounwind {
66 %cmp = icmp eq i32 %c, 0
67 %select = select i1 %cmp, <8 x i32> %a, <8 x i32> %b
68 store <8 x i32> %select, <8 x i32> addrspace(1)* %out, align 16
69 ret void
70}
71
Tom Stellard79243d92014-10-01 17:15:17 +000072; FUNC-LABEL: {{^}}select_v2f32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000073; SI: buffer_store_dwordx2
Matt Arsenault9fe669c2014-03-06 17:34:03 +000074define void @select_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b, i32 %c) nounwind {
75 %cmp = icmp eq i32 %c, 0
76 %select = select i1 %cmp, <2 x float> %a, <2 x float> %b
77 store <2 x float> %select, <2 x float> addrspace(1)* %out, align 16
78 ret void
79}
80
Tom Stellard79243d92014-10-01 17:15:17 +000081; FUNC-LABEL: {{^}}select_v4f32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000082; SI: buffer_store_dwordx4
Matt Arsenault9fe669c2014-03-06 17:34:03 +000083define void @select_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %a, <4 x float> %b, i32 %c) nounwind {
84 %cmp = icmp eq i32 %c, 0
85 %select = select i1 %cmp, <4 x float> %a, <4 x float> %b
86 store <4 x float> %select, <4 x float> addrspace(1)* %out, align 16
87 ret void
88}
89
Tom Stellard79243d92014-10-01 17:15:17 +000090; FUNC-LABEL: {{^}}select_v8f32:
Tom Stellard326d6ec2014-11-05 14:50:53 +000091; SI: v_cndmask_b32_e64
92; SI: v_cndmask_b32_e64
93; SI: v_cndmask_b32_e64
94; SI: v_cndmask_b32_e64
95; SI: v_cndmask_b32_e64
96; SI: v_cndmask_b32_e64
97; SI: v_cndmask_b32_e64
98; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +000099define void @select_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %a, <8 x float> %b, i32 %c) nounwind {
100 %cmp = icmp eq i32 %c, 0
101 %select = select i1 %cmp, <8 x float> %a, <8 x float> %b
102 store <8 x float> %select, <8 x float> addrspace(1)* %out, align 16
103 ret void
104}
105
Tom Stellard79243d92014-10-01 17:15:17 +0000106; FUNC-LABEL: {{^}}select_v2f64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000107; SI: v_cndmask_b32_e64
108; SI: v_cndmask_b32_e64
109; SI: v_cndmask_b32_e64
110; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +0000111define void @select_v2f64(<2 x double> addrspace(1)* %out, <2 x double> %a, <2 x double> %b, i32 %c) nounwind {
112 %cmp = icmp eq i32 %c, 0
113 %select = select i1 %cmp, <2 x double> %a, <2 x double> %b
114 store <2 x double> %select, <2 x double> addrspace(1)* %out, align 16
115 ret void
116}
117
Tom Stellard79243d92014-10-01 17:15:17 +0000118; FUNC-LABEL: {{^}}select_v4f64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000119; SI: v_cndmask_b32_e64
120; SI: v_cndmask_b32_e64
121; SI: v_cndmask_b32_e64
122; SI: v_cndmask_b32_e64
123; SI: v_cndmask_b32_e64
124; SI: v_cndmask_b32_e64
125; SI: v_cndmask_b32_e64
126; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +0000127define void @select_v4f64(<4 x double> addrspace(1)* %out, <4 x double> %a, <4 x double> %b, i32 %c) nounwind {
128 %cmp = icmp eq i32 %c, 0
129 %select = select i1 %cmp, <4 x double> %a, <4 x double> %b
130 store <4 x double> %select, <4 x double> addrspace(1)* %out, align 16
131 ret void
132}
133
Tom Stellard79243d92014-10-01 17:15:17 +0000134; FUNC-LABEL: {{^}}select_v8f64:
Tom Stellard326d6ec2014-11-05 14:50:53 +0000135; SI: v_cndmask_b32_e64
136; SI: v_cndmask_b32_e64
137; SI: v_cndmask_b32_e64
138; SI: v_cndmask_b32_e64
139; SI: v_cndmask_b32_e64
140; SI: v_cndmask_b32_e64
141; SI: v_cndmask_b32_e64
142; SI: v_cndmask_b32_e64
143; SI: v_cndmask_b32_e64
144; SI: v_cndmask_b32_e64
145; SI: v_cndmask_b32_e64
146; SI: v_cndmask_b32_e64
147; SI: v_cndmask_b32_e64
148; SI: v_cndmask_b32_e64
149; SI: v_cndmask_b32_e64
150; SI: v_cndmask_b32_e64
Matt Arsenault9fe669c2014-03-06 17:34:03 +0000151define void @select_v8f64(<8 x double> addrspace(1)* %out, <8 x double> %a, <8 x double> %b, i32 %c) nounwind {
152 %cmp = icmp eq i32 %c, 0
153 %select = select i1 %cmp, <8 x double> %a, <8 x double> %b
154 store <8 x double> %select, <8 x double> addrspace(1)* %out, align 16
155 ret void
156}