1
; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2
; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
4
; Test expansion of scalar selects on vectors.
5
; Evergreen not enabled since it seems to be having problems with doubles.
8
; FUNC-LABEL: {{^}}select_v4i8:
9
; SI: v_cndmask_b32_e32
10
; SI: v_cndmask_b32_e32
11
; SI: v_cndmask_b32_e32
12
; SI: v_cndmask_b32_e32
13
define 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
20
; FUNC-LABEL: {{^}}select_v4i16:
21
; SI: v_cndmask_b32_e32
22
; SI: v_cndmask_b32_e32
23
; SI: v_cndmask_b32_e32
24
; SI: v_cndmask_b32_e32
25
define 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
32
; FUNC-LABEL: {{^}}select_v2i32:
33
; SI: v_cndmask_b32_e32
34
; SI: v_cndmask_b32_e32
35
; SI: buffer_store_dwordx2
36
define 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
43
; FUNC-LABEL: {{^}}select_v4i32:
44
; SI: v_cndmask_b32_e32
45
; SI: v_cndmask_b32_e32
46
; SI: v_cndmask_b32_e32
47
; SI: v_cndmask_b32_e32
48
; SI: buffer_store_dwordx4
49
define 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
56
; FUNC-LABEL: {{^}}select_v8i32:
57
; SI: v_cndmask_b32_e32
58
; SI: v_cndmask_b32_e32
59
; SI: v_cndmask_b32_e32
60
; SI: v_cndmask_b32_e32
61
; SI: v_cndmask_b32_e32
62
; SI: v_cndmask_b32_e32
63
; SI: v_cndmask_b32_e32
64
; SI: v_cndmask_b32_e32
65
define 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
72
; FUNC-LABEL: {{^}}select_v2f32:
73
; SI: buffer_store_dwordx2
74
define 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
81
; FUNC-LABEL: {{^}}select_v4f32:
82
; SI: buffer_store_dwordx4
83
define 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
90
; FUNC-LABEL: {{^}}select_v8f32:
91
; SI: v_cndmask_b32_e32
92
; SI: v_cndmask_b32_e32
93
; SI: v_cndmask_b32_e32
94
; SI: v_cndmask_b32_e32
95
; SI: v_cndmask_b32_e32
96
; SI: v_cndmask_b32_e32
97
; SI: v_cndmask_b32_e32
98
; SI: v_cndmask_b32_e32
99
define 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
106
; FUNC-LABEL: {{^}}select_v2f64:
107
; SI: v_cndmask_b32_e32
108
; SI: v_cndmask_b32_e32
109
; SI: v_cndmask_b32_e32
110
; SI: v_cndmask_b32_e32
111
define 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
118
; FUNC-LABEL: {{^}}select_v4f64:
119
; SI: v_cndmask_b32_e32
120
; SI: v_cndmask_b32_e32
121
; SI: v_cndmask_b32_e32
122
; SI: v_cndmask_b32_e32
123
; SI: v_cndmask_b32_e32
124
; SI: v_cndmask_b32_e32
125
; SI: v_cndmask_b32_e32
126
; SI: v_cndmask_b32_e32
127
define 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
134
; FUNC-LABEL: {{^}}select_v8f64:
135
; SI: v_cndmask_b32_e32
136
; SI: v_cndmask_b32_e32
137
; SI: v_cndmask_b32_e32
138
; SI: v_cndmask_b32_e32
139
; SI: v_cndmask_b32_e32
140
; SI: v_cndmask_b32_e32
141
; SI: v_cndmask_b32_e32
142
; SI: v_cndmask_b32_e32
143
; SI: v_cndmask_b32_e32
144
; SI: v_cndmask_b32_e32
145
; SI: v_cndmask_b32_e32
146
; SI: v_cndmask_b32_e32
147
; SI: v_cndmask_b32_e32
148
; SI: v_cndmask_b32_e32
149
; SI: v_cndmask_b32_e32
150
; SI: v_cndmask_b32_e32
151
define 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