blob: 37314d590c36bcf1d96b5fa94da699b81eb9674e [file] [log] [blame]
Matt Arsenault4085e8f2016-01-18 21:13:56 +00001; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI -check-prefix=FUNC %s
3; RUN: llc -march=r600 -mcpu=redwood < %s | FileCheck -check-prefix=EG -check-prefix=FUNC %s
Tom Stellard7fb39632013-05-10 02:09:29 +00004
Matt Arsenault4085e8f2016-01-18 21:13:56 +00005declare i32 @llvm.r600.read.tidig.x() #0
Tom Stellard7fb39632013-05-10 02:09:29 +00006
Matt Arsenault4085e8f2016-01-18 21:13:56 +00007; FUNC-LABEL: {{^}}ashr_v2i32:
8; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
9; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
Aaron Watry16d80c02013-06-25 13:55:40 +000010
Matt Arsenault4085e8f2016-01-18 21:13:56 +000011; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
12; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
Marek Olsak191507e2015-02-03 17:38:12 +000013
Matt Arsenault4085e8f2016-01-18 21:13:56 +000014; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
15; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
Aaron Watry16d80c02013-06-25 13:55:40 +000016define void @ashr_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> addrspace(1)* %in) {
David Blaikie79e6c742015-02-27 19:29:02 +000017 %b_ptr = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %in, i32 1
Matt Arsenault4085e8f2016-01-18 21:13:56 +000018 %a = load <2 x i32>, <2 x i32> addrspace(1)* %in
19 %b = load <2 x i32>, <2 x i32> addrspace(1)* %b_ptr
Aaron Watry16d80c02013-06-25 13:55:40 +000020 %result = ashr <2 x i32> %a, %b
21 store <2 x i32> %result, <2 x i32> addrspace(1)* %out
22 ret void
23}
24
Matt Arsenault4085e8f2016-01-18 21:13:56 +000025; FUNC-LABEL: {{^}}ashr_v4i32:
26; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
27; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
28; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
29; SI: v_ashr_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
Aaron Watry16d80c02013-06-25 13:55:40 +000030
Matt Arsenault4085e8f2016-01-18 21:13:56 +000031; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
32; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
33; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
34; VI: v_ashrrev_i32_e32 v{{[0-9]+, v[0-9]+, v[0-9]+}}
Aaron Watry16d80c02013-06-25 13:55:40 +000035
Matt Arsenault4085e8f2016-01-18 21:13:56 +000036; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
37; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
38; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
39; EG: ASHR {{\*? *}}T{{[0-9]+\.[XYZW], T[0-9]+\.[XYZW], T[0-9]+\.[XYZW]}}
Aaron Watry16d80c02013-06-25 13:55:40 +000040define void @ashr_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> addrspace(1)* %in) {
David Blaikie79e6c742015-02-27 19:29:02 +000041 %b_ptr = getelementptr <4 x i32>, <4 x i32> addrspace(1)* %in, i32 1
Matt Arsenault4085e8f2016-01-18 21:13:56 +000042 %a = load <4 x i32>, <4 x i32> addrspace(1)* %in
43 %b = load <4 x i32>, <4 x i32> addrspace(1)* %b_ptr
Tom Stellard7fb39632013-05-10 02:09:29 +000044 %result = ashr <4 x i32> %a, %b
45 store <4 x i32> %result, <4 x i32> addrspace(1)* %out
46 ret void
47}
Tom Stellard31209cc2013-07-15 19:00:09 +000048
Matt Arsenault4085e8f2016-01-18 21:13:56 +000049; FUNC-LABEL: {{^}}s_ashr_i64:
50; GCN: s_ashr_i64 s[{{[0-9]}}:{{[0-9]}}], s[{{[0-9]}}:{{[0-9]}}], 8
Tom Stellard31209cc2013-07-15 19:00:09 +000051
Matt Arsenault4085e8f2016-01-18 21:13:56 +000052; EG: ASHR
53define void @s_ashr_i64(i64 addrspace(1)* %out, i32 %in) {
Tom Stellard31209cc2013-07-15 19:00:09 +000054entry:
Matt Arsenault4085e8f2016-01-18 21:13:56 +000055 %in.ext = sext i32 %in to i64
56 %ashr = ashr i64 %in.ext, 8
57 store i64 %ashr, i64 addrspace(1)* %out
Tom Stellard31209cc2013-07-15 19:00:09 +000058 ret void
59}
60
Matt Arsenault4085e8f2016-01-18 21:13:56 +000061; FUNC-LABEL: {{^}}ashr_i64_2:
62; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}}
Jan Veselyecf51332014-06-18 12:27:17 +000063
Matt Arsenault4085e8f2016-01-18 21:13:56 +000064; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}}
Marek Olsak191507e2015-02-03 17:38:12 +000065
Matt Arsenault4085e8f2016-01-18 21:13:56 +000066; EG: SUB_INT {{\*? *}}[[COMPSH:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHIFT:T[0-9]+\.[XYZW]]]
67; EG: LSHL {{\* *}}[[TEMP:T[0-9]+\.[XYZW]]], [[OPHI:T[0-9]+\.[XYZW]]], {{[[COMPSH]]|PV.[XYZW]}}
68; EG-DAG: ADD_INT {{\*? *}}[[BIGSH:T[0-9]+\.[XYZW]]], [[SHIFT]], literal
69; EG-DAG: LSHL {{\*? *}}[[OVERF:T[0-9]+\.[XYZW]]], {{[[TEMP]]|PV.[XYZW]}}, 1
70; EG-DAG: LSHR {{\*? *}}[[LOSMTMP:T[0-9]+\.[XYZW]]], [[OPLO:T[0-9]+\.[XYZW]]], [[SHIFT]]
71; EG-DAG: OR_INT {{\*? *}}[[LOSM:T[0-9]+\.[XYZW]]], {{[[LOSMTMP]]|PV.[XYZW]|PS}}, {{[[OVERF]]|PV.[XYZW]}}
72; EG-DAG: ASHR {{\*? *}}[[HISM:T[0-9]+\.[XYZW]]], [[OPHI]], {{PS|PV.[XYZW]|[[SHIFT]]}}
73; EG-DAG: ASHR {{\*? *}}[[LOBIG:T[0-9]+\.[XYZW]]], [[OPHI]], literal
74; EG-DAG: ASHR {{\*? *}}[[HIBIG:T[0-9]+\.[XYZW]]], [[OPHI]], literal
75; EG-DAG: SETGT_UINT {{\*? *}}[[RESC:T[0-9]+\.[XYZW]]], [[SHIFT]], literal
76; EG-DAG: CNDE_INT {{\*? *}}[[RESLO:T[0-9]+\.[XYZW]]], {{T[0-9]+\.[XYZW]}}
77; EG-DAG: CNDE_INT {{\*? *}}[[RESHI:T[0-9]+\.[XYZW]]], {{T[0-9]+\.[XYZW]}}
Jan Veselyecf51332014-06-18 12:27:17 +000078define void @ashr_i64_2(i64 addrspace(1)* %out, i64 addrspace(1)* %in) {
79entry:
David Blaikie79e6c742015-02-27 19:29:02 +000080 %b_ptr = getelementptr i64, i64 addrspace(1)* %in, i64 1
Matt Arsenault4085e8f2016-01-18 21:13:56 +000081 %a = load i64, i64 addrspace(1)* %in
82 %b = load i64, i64 addrspace(1)* %b_ptr
Jan Veselyecf51332014-06-18 12:27:17 +000083 %result = ashr i64 %a, %b
84 store i64 %result, i64 addrspace(1)* %out
85 ret void
86}
87
Matt Arsenault4085e8f2016-01-18 21:13:56 +000088; FUNC-LABEL: {{^}}ashr_v2i64:
89; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}}
90; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}}
Jan Veselyecf51332014-06-18 12:27:17 +000091
Matt Arsenault4085e8f2016-01-18 21:13:56 +000092; EG-DAG: SUB_INT {{\*? *}}[[COMPSHA:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHA:T[0-9]+\.[XYZW]]]
93; EG-DAG: SUB_INT {{\*? *}}[[COMPSHB:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHB:T[0-9]+\.[XYZW]]]
94; EG-DAG: LSHL {{\*? *}}[[COMPSHA]]
95; EG-DAG: LSHL {{\*? *}}[[COMPSHB]]
96; EG-DAG: LSHL {{.*}}, 1
97; EG-DAG: LSHL {{.*}}, 1
98; EG-DAG: ASHR {{.*}}, [[SHA]]
99; EG-DAG: ASHR {{.*}}, [[SHB]]
100; EG-DAG: LSHR {{.*}}, [[SHA]]
101; EG-DAG: LSHR {{.*}}, [[SHB]]
102; EG-DAG: OR_INT
103; EG-DAG: OR_INT
104; EG-DAG: ADD_INT {{\*? *}}[[BIGSHA:T[0-9]+\.[XYZW]]]{{.*}}, literal
105; EG-DAG: ADD_INT {{\*? *}}[[BIGSHB:T[0-9]+\.[XYZW]]]{{.*}}, literal
106; EG-DAG: ASHR
107; EG-DAG: ASHR
108; EG-DAG: ASHR {{.*}}, literal
109; EG-DAG: ASHR {{.*}}, literal
110; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHA]], literal
111; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHB]], literal
112; EG-DAG: CNDE_INT
113; EG-DAG: CNDE_INT
114; EG-DAG: CNDE_INT
115; EG-DAG: CNDE_INT
Jan Veselyecf51332014-06-18 12:27:17 +0000116define void @ashr_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* %in) {
David Blaikie79e6c742015-02-27 19:29:02 +0000117 %b_ptr = getelementptr <2 x i64>, <2 x i64> addrspace(1)* %in, i64 1
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000118 %a = load <2 x i64>, <2 x i64> addrspace(1)* %in
119 %b = load <2 x i64>, <2 x i64> addrspace(1)* %b_ptr
Jan Veselyecf51332014-06-18 12:27:17 +0000120 %result = ashr <2 x i64> %a, %b
121 store <2 x i64> %result, <2 x i64> addrspace(1)* %out
122 ret void
123}
124
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000125; FIXME: Broken on r600
126; XFUNC-LABEL: {{^}}s_ashr_v2i64:
127; XGCN: s_ashr_i64 {{s\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], s[0-9]+}}
128; XGCN: s_ashr_i64 {{s\[[0-9]+:[0-9]+\], s\[[0-9]+:[0-9]+\], s[0-9]+}}
129; define void @s_ashr_v2i64(<2 x i64> addrspace(1)* %out, <2 x i64> addrspace(1)* %in, <2 x i64> %a, <2 x i64> %b) {
130; %result = ashr <2 x i64> %a, %b
131; store <2 x i64> %result, <2 x i64> addrspace(1)* %out
132; ret void
133; }
Jan Veselyecf51332014-06-18 12:27:17 +0000134
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000135; FUNC-LABEL: {{^}}ashr_v4i64:
136; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}}
137; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}}
138; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}}
139; SI: v_ashr_i64 {{v\[[0-9]+:[0-9]+\], v\[[0-9]+:[0-9]+\], v[0-9]+}}
Jan Veselyecf51332014-06-18 12:27:17 +0000140
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000141; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}}
142; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}}
143; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}}
144; VI: v_ashrrev_i64 {{v\[[0-9]+:[0-9]+\], v[0-9]+, v\[[0-9]+:[0-9]+\]}}
Marek Olsak191507e2015-02-03 17:38:12 +0000145
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000146; EG-DAG: SUB_INT {{\*? *}}[[COMPSHA:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHA:T[0-9]+\.[XYZW]]]
147; EG-DAG: SUB_INT {{\*? *}}[[COMPSHB:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHB:T[0-9]+\.[XYZW]]]
148; EG-DAG: SUB_INT {{\*? *}}[[COMPSHC:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHC:T[0-9]+\.[XYZW]]]
149; EG-DAG: SUB_INT {{\*? *}}[[COMPSHD:T[0-9]+\.[XYZW]]], {{literal.[xy]}}, [[SHD:T[0-9]+\.[XYZW]]]
150; EG-DAG: LSHL {{\*? *}}[[COMPSHA]]
151; EG-DAG: LSHL {{\*? *}}[[COMPSHB]]
152; EG-DAG: LSHL {{\*? *}}[[COMPSHC]]
153; EG-DAG: LSHL {{\*? *}}[[COMPSHD]]
154; EG-DAG: LSHL {{.*}}, 1
155; EG-DAG: LSHL {{.*}}, 1
156; EG-DAG: LSHL {{.*}}, 1
157; EG-DAG: LSHL {{.*}}, 1
158; EG-DAG: ASHR {{.*}}, [[SHA]]
159; EG-DAG: ASHR {{.*}}, [[SHB]]
160; EG-DAG: ASHR {{.*}}, [[SHC]]
161; EG-DAG: ASHR {{.*}}, [[SHD]]
162; EG-DAG: LSHR {{.*}}, [[SHA]]
163; EG-DAG: LSHR {{.*}}, [[SHB]]
164; EG-DAG: LSHR {{.*}}, [[SHA]]
165; EG-DAG: LSHR {{.*}}, [[SHB]]
166; EG-DAG: OR_INT
167; EG-DAG: OR_INT
168; EG-DAG: OR_INT
169; EG-DAG: OR_INT
170; EG-DAG: ADD_INT {{\*? *}}[[BIGSHA:T[0-9]+\.[XYZW]]]{{.*}}, literal
171; EG-DAG: ADD_INT {{\*? *}}[[BIGSHB:T[0-9]+\.[XYZW]]]{{.*}}, literal
172; EG-DAG: ADD_INT {{\*? *}}[[BIGSHC:T[0-9]+\.[XYZW]]]{{.*}}, literal
173; EG-DAG: ADD_INT {{\*? *}}[[BIGSHD:T[0-9]+\.[XYZW]]]{{.*}}, literal
174; EG-DAG: ASHR
175; EG-DAG: ASHR
176; EG-DAG: ASHR
177; EG-DAG: ASHR
178; EG-DAG: ASHR {{.*}}, literal
179; EG-DAG: ASHR {{.*}}, literal
180; EG-DAG: ASHR {{.*}}, literal
181; EG-DAG: ASHR {{.*}}, literal
182; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHA]], literal
183; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHB]], literal
184; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHC]], literal
185; EG-DAG: SETGT_UINT {{\*? *T[0-9]\.[XYZW]}}, [[SHD]], literal
186; EG-DAG: CNDE_INT
187; EG-DAG: CNDE_INT
188; EG-DAG: CNDE_INT
189; EG-DAG: CNDE_INT
190; EG-DAG: CNDE_INT
191; EG-DAG: CNDE_INT
192; EG-DAG: CNDE_INT
193; EG-DAG: CNDE_INT
Jan Veselyecf51332014-06-18 12:27:17 +0000194define void @ashr_v4i64(<4 x i64> addrspace(1)* %out, <4 x i64> addrspace(1)* %in) {
David Blaikie79e6c742015-02-27 19:29:02 +0000195 %b_ptr = getelementptr <4 x i64>, <4 x i64> addrspace(1)* %in, i64 1
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000196 %a = load <4 x i64>, <4 x i64> addrspace(1)* %in
197 %b = load <4 x i64>, <4 x i64> addrspace(1)* %b_ptr
Jan Veselyecf51332014-06-18 12:27:17 +0000198 %result = ashr <4 x i64> %a, %b
199 store <4 x i64> %result, <4 x i64> addrspace(1)* %out
200 ret void
201}
202
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000203; GCN-LABEL: {{^}}s_ashr_32_i64:
Matt Arsenault33e3ece2016-01-18 22:09:04 +0000204; GCN: s_load_dword s[[HI:[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, {{0xc|0x30}}
205; GCN: s_ashr_i32 s[[SHIFT:[0-9]+]], s[[HI]], 31
206; GCN: s_add_u32 s{{[0-9]+}}, s[[HI]], s{{[0-9]+}}
207; GCN: s_addc_u32 s{{[0-9]+}}, s[[SHIFT]], s{{[0-9]+}}
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000208define void @s_ashr_32_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) {
209 %result = ashr i64 %a, 32
210 %add = add i64 %result, %b
211 store i64 %add, i64 addrspace(1)* %out
212 ret void
213}
214
215; GCN-LABEL: {{^}}v_ashr_32_i64:
Matt Arsenault33e3ece2016-01-18 22:09:04 +0000216; SI: buffer_load_dword v[[HI:[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4
217; VI: flat_load_dword v[[HI:[0-9]+]]
218; GCN: v_ashrrev_i32_e32 v[[SHIFT:[0-9]+]], 31, v[[HI]]
Tom Stellard46937ca2016-02-12 17:57:54 +0000219; GCN: {{buffer|flat}}_store_dwordx2 {{.*}}v{{\[}}[[HI]]:[[SHIFT]]{{\]}}
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000220define void @v_ashr_32_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) {
221 %tid = call i32 @llvm.r600.read.tidig.x() #0
222 %gep.in = getelementptr i64, i64 addrspace(1)* %in, i32 %tid
223 %gep.out = getelementptr i64, i64 addrspace(1)* %out, i32 %tid
224 %a = load i64, i64 addrspace(1)* %gep.in
225 %result = ashr i64 %a, 32
226 store i64 %result, i64 addrspace(1)* %gep.out
227 ret void
228}
229
230; GCN-LABEL: {{^}}s_ashr_63_i64:
Matt Arsenault33e3ece2016-01-18 22:09:04 +0000231; GCN-DAG: s_load_dword s[[HI:[0-9]+]], {{s\[[0-9]+:[0-9]+\]}}, {{0xc|0x30}}
232; GCN: s_ashr_i32 s[[SHIFT:[0-9]+]], s[[HI]], 31
233; GCN: s_mov_b32 s[[COPYSHIFT:[0-9]+]], s[[SHIFT]]
234; GCN: s_add_u32 {{s[0-9]+}}, s[[HI]], {{s[0-9]+}}
235; GCN: s_addc_u32 {{s[0-9]+}}, s[[COPYSHIFT]], {{s[0-9]+}}
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000236define void @s_ashr_63_i64(i64 addrspace(1)* %out, i64 %a, i64 %b) {
237 %result = ashr i64 %a, 63
238 %add = add i64 %result, %b
239 store i64 %add, i64 addrspace(1)* %out
240 ret void
241}
242
243; GCN-LABEL: {{^}}v_ashr_63_i64:
Matt Arsenault33e3ece2016-01-18 22:09:04 +0000244; SI: buffer_load_dword v[[HI:[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4
245; VI: flat_load_dword v[[HI:[0-9]+]]
246; GCN: v_ashrrev_i32_e32 v[[SHIFT:[0-9]+]], 31, v[[HI]]
247; GCN: v_mov_b32_e32 v[[COPY:[0-9]+]], v[[SHIFT]]
Tom Stellard46937ca2016-02-12 17:57:54 +0000248; GCN: {{buffer|flat}}_store_dwordx2 {{.*}}v{{\[}}[[SHIFT]]:[[COPY]]{{\]}}
Matt Arsenault4085e8f2016-01-18 21:13:56 +0000249define void @v_ashr_63_i64(i64 addrspace(1)* %out, i64 addrspace(1)* %in) {
250 %tid = call i32 @llvm.r600.read.tidig.x() #0
251 %gep.in = getelementptr i64, i64 addrspace(1)* %in, i32 %tid
252 %gep.out = getelementptr i64, i64 addrspace(1)* %out, i32 %tid
253 %a = load i64, i64 addrspace(1)* %gep.in
254 %result = ashr i64 %a, 63
255 store i64 %result, i64 addrspace(1)* %gep.out
256 ret void
257}
258
259attributes #0 = { nounwind readnone }