~pali/+junk/llvm-toolchain-3.7

« back to all changes in this revision

Viewing changes to test/CodeGen/AMDGPU/select-vectors.ll

  • Committer: Package Import Robot
  • Author(s): Sylvestre Ledru
  • Date: 2015-07-15 17:51:08 UTC
  • Revision ID: package-import@ubuntu.com-20150715175108-l8mynwovkx4zx697
Tags: upstream-3.7~+rc2
ImportĀ upstreamĀ versionĀ 3.7~+rc2

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
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
 
3
 
 
4
; Test expansion of scalar selects on vectors.
 
5
; Evergreen not enabled since it seems to be having problems with doubles.
 
6
 
 
7
 
 
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
 
17
  ret void
 
18
}
 
19
 
 
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
 
29
  ret void
 
30
}
 
31
 
 
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
 
40
  ret void
 
41
}
 
42
 
 
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
 
53
  ret void
 
54
}
 
55
 
 
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
 
69
  ret void
 
70
}
 
71
 
 
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
 
78
  ret void
 
79
}
 
80
 
 
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
 
87
  ret void
 
88
}
 
89
 
 
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
 
103
  ret void
 
104
}
 
105
 
 
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
 
115
  ret void
 
116
}
 
117
 
 
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
 
131
  ret void
 
132
}
 
133
 
 
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
 
155
  ret void
 
156
}