Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/AMDGPU/bitreverse.ll @ 121:803732b1fca8
LLVM 5.0
author | kono |
---|---|
date | Fri, 27 Oct 2017 17:07:41 +0900 |
parents | 1172e4bd9c6f |
children | 3a76565eade5 |
comparison
equal
deleted
inserted
replaced
120:1172e4bd9c6f | 121:803732b1fca8 |
---|---|
1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s | 1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s |
2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s | 2 ; RUN: llc -march=amdgcn -mcpu=tonga -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s |
3 ; RUN: llc -march=amdgcn -mcpu=fiji -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=FUNC %s | 3 ; RUN: llc -march=amdgcn -mcpu=fiji -mattr=-flat-for-global -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=FUNC %s |
4 | |
5 declare i32 @llvm.amdgcn.workitem.id.x() #1 | |
4 | 6 |
5 declare i16 @llvm.bitreverse.i16(i16) #1 | 7 declare i16 @llvm.bitreverse.i16(i16) #1 |
6 declare i32 @llvm.bitreverse.i32(i32) #1 | 8 declare i32 @llvm.bitreverse.i32(i32) #1 |
7 declare i64 @llvm.bitreverse.i64(i64) #1 | 9 declare i64 @llvm.bitreverse.i64(i64) #1 |
8 | 10 |
12 declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) #1 | 14 declare <2 x i64> @llvm.bitreverse.v2i64(<2 x i64>) #1 |
13 declare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>) #1 | 15 declare <4 x i64> @llvm.bitreverse.v4i64(<4 x i64>) #1 |
14 | 16 |
15 ; FUNC-LABEL: {{^}}s_brev_i16: | 17 ; FUNC-LABEL: {{^}}s_brev_i16: |
16 ; SI: s_brev_b32 | 18 ; SI: s_brev_b32 |
17 define void @s_brev_i16(i16 addrspace(1)* noalias %out, i16 %val) #0 { | 19 define amdgpu_kernel void @s_brev_i16(i16 addrspace(1)* noalias %out, i16 %val) #0 { |
18 %brev = call i16 @llvm.bitreverse.i16(i16 %val) #1 | 20 %brev = call i16 @llvm.bitreverse.i16(i16 %val) #1 |
19 store i16 %brev, i16 addrspace(1)* %out | 21 store i16 %brev, i16 addrspace(1)* %out |
20 ret void | 22 ret void |
21 } | 23 } |
22 | 24 |
23 ; FUNC-LABEL: {{^}}v_brev_i16: | 25 ; FUNC-LABEL: {{^}}v_brev_i16: |
24 ; SI: v_bfrev_b32_e32 | 26 ; SI: v_bfrev_b32_e32 |
25 define void @v_brev_i16(i16 addrspace(1)* noalias %out, i16 addrspace(1)* noalias %valptr) #0 { | 27 define amdgpu_kernel void @v_brev_i16(i16 addrspace(1)* noalias %out, i16 addrspace(1)* noalias %valptr) #0 { |
26 %val = load i16, i16 addrspace(1)* %valptr | 28 %val = load i16, i16 addrspace(1)* %valptr |
27 %brev = call i16 @llvm.bitreverse.i16(i16 %val) #1 | 29 %brev = call i16 @llvm.bitreverse.i16(i16 %val) #1 |
28 store i16 %brev, i16 addrspace(1)* %out | 30 store i16 %brev, i16 addrspace(1)* %out |
29 ret void | 31 ret void |
30 } | 32 } |
33 ; SI: s_load_dword [[VAL:s[0-9]+]], | 35 ; SI: s_load_dword [[VAL:s[0-9]+]], |
34 ; SI: s_brev_b32 [[SRESULT:s[0-9]+]], [[VAL]] | 36 ; SI: s_brev_b32 [[SRESULT:s[0-9]+]], [[VAL]] |
35 ; SI: v_mov_b32_e32 [[VRESULT:v[0-9]+]], [[SRESULT]] | 37 ; SI: v_mov_b32_e32 [[VRESULT:v[0-9]+]], [[SRESULT]] |
36 ; SI: buffer_store_dword [[VRESULT]], | 38 ; SI: buffer_store_dword [[VRESULT]], |
37 ; SI: s_endpgm | 39 ; SI: s_endpgm |
38 define void @s_brev_i32(i32 addrspace(1)* noalias %out, i32 %val) #0 { | 40 define amdgpu_kernel void @s_brev_i32(i32 addrspace(1)* noalias %out, i32 %val) #0 { |
39 %brev = call i32 @llvm.bitreverse.i32(i32 %val) #1 | 41 %brev = call i32 @llvm.bitreverse.i32(i32 %val) #1 |
40 store i32 %brev, i32 addrspace(1)* %out | 42 store i32 %brev, i32 addrspace(1)* %out |
41 ret void | 43 ret void |
42 } | 44 } |
43 | 45 |
44 ; FUNC-LABEL: {{^}}v_brev_i32: | 46 ; FUNC-LABEL: {{^}}v_brev_i32: |
45 ; SI: buffer_load_dword [[VAL:v[0-9]+]], | 47 ; SI: {{buffer|flat}}_load_dword [[VAL:v[0-9]+]], |
46 ; SI: v_bfrev_b32_e32 [[RESULT:v[0-9]+]], [[VAL]] | 48 ; SI: v_bfrev_b32_e32 [[RESULT:v[0-9]+]], [[VAL]] |
47 ; SI: buffer_store_dword [[RESULT]], | 49 ; SI: buffer_store_dword [[RESULT]], |
48 ; SI: s_endpgm | 50 ; SI: s_endpgm |
49 define void @v_brev_i32(i32 addrspace(1)* noalias %out, i32 addrspace(1)* noalias %valptr) #0 { | 51 define amdgpu_kernel void @v_brev_i32(i32 addrspace(1)* noalias %out, i32 addrspace(1)* noalias %valptr) #0 { |
50 %val = load i32, i32 addrspace(1)* %valptr | 52 %tid = call i32 @llvm.amdgcn.workitem.id.x() |
53 %gep = getelementptr i32, i32 addrspace(1)* %valptr, i32 %tid | |
54 %val = load i32, i32 addrspace(1)* %gep | |
51 %brev = call i32 @llvm.bitreverse.i32(i32 %val) #1 | 55 %brev = call i32 @llvm.bitreverse.i32(i32 %val) #1 |
52 store i32 %brev, i32 addrspace(1)* %out | 56 store i32 %brev, i32 addrspace(1)* %out |
53 ret void | 57 ret void |
54 } | 58 } |
55 | 59 |
56 ; FUNC-LABEL: {{^}}s_brev_v2i32: | 60 ; FUNC-LABEL: {{^}}s_brev_v2i32: |
57 ; SI: s_brev_b32 | 61 ; SI: s_brev_b32 |
58 ; SI: s_brev_b32 | 62 ; SI: s_brev_b32 |
59 define void @s_brev_v2i32(<2 x i32> addrspace(1)* noalias %out, <2 x i32> %val) #0 { | 63 define amdgpu_kernel void @s_brev_v2i32(<2 x i32> addrspace(1)* noalias %out, <2 x i32> %val) #0 { |
60 %brev = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %val) #1 | 64 %brev = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %val) #1 |
61 store <2 x i32> %brev, <2 x i32> addrspace(1)* %out | 65 store <2 x i32> %brev, <2 x i32> addrspace(1)* %out |
62 ret void | 66 ret void |
63 } | 67 } |
64 | 68 |
65 ; FUNC-LABEL: {{^}}v_brev_v2i32: | 69 ; FUNC-LABEL: {{^}}v_brev_v2i32: |
66 ; SI: v_bfrev_b32_e32 | 70 ; SI: v_bfrev_b32_e32 |
67 ; SI: v_bfrev_b32_e32 | 71 ; SI: v_bfrev_b32_e32 |
68 define void @v_brev_v2i32(<2 x i32> addrspace(1)* noalias %out, <2 x i32> addrspace(1)* noalias %valptr) #0 { | 72 define amdgpu_kernel void @v_brev_v2i32(<2 x i32> addrspace(1)* noalias %out, <2 x i32> addrspace(1)* noalias %valptr) #0 { |
69 %val = load <2 x i32>, <2 x i32> addrspace(1)* %valptr | 73 %tid = call i32 @llvm.amdgcn.workitem.id.x() |
74 %gep = getelementptr <2 x i32>, <2 x i32> addrspace(1)* %valptr, i32 %tid | |
75 %val = load <2 x i32>, <2 x i32> addrspace(1)* %gep | |
70 %brev = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %val) #1 | 76 %brev = call <2 x i32> @llvm.bitreverse.v2i32(<2 x i32> %val) #1 |
71 store <2 x i32> %brev, <2 x i32> addrspace(1)* %out | 77 store <2 x i32> %brev, <2 x i32> addrspace(1)* %out |
72 ret void | 78 ret void |
73 } | 79 } |
74 | 80 |
75 ; FUNC-LABEL: {{^}}s_brev_i64: | 81 ; FUNC-LABEL: {{^}}s_brev_i64: |
76 define void @s_brev_i64(i64 addrspace(1)* noalias %out, i64 %val) #0 { | 82 define amdgpu_kernel void @s_brev_i64(i64 addrspace(1)* noalias %out, i64 %val) #0 { |
77 %brev = call i64 @llvm.bitreverse.i64(i64 %val) #1 | 83 %brev = call i64 @llvm.bitreverse.i64(i64 %val) #1 |
78 store i64 %brev, i64 addrspace(1)* %out | 84 store i64 %brev, i64 addrspace(1)* %out |
79 ret void | 85 ret void |
80 } | 86 } |
81 | 87 |
82 ; FUNC-LABEL: {{^}}v_brev_i64: | 88 ; FUNC-LABEL: {{^}}v_brev_i64: |
83 ; SI-NOT: v_or_b32_e64 v{{[0-9]+}}, 0, 0 | 89 ; SI-NOT: v_or_b32_e64 v{{[0-9]+}}, 0, 0 |
84 define void @v_brev_i64(i64 addrspace(1)* noalias %out, i64 addrspace(1)* noalias %valptr) #0 { | 90 define amdgpu_kernel void @v_brev_i64(i64 addrspace(1)* noalias %out, i64 addrspace(1)* noalias %valptr) #0 { |
85 %val = load i64, i64 addrspace(1)* %valptr | 91 %tid = call i32 @llvm.amdgcn.workitem.id.x() |
92 %gep = getelementptr i64, i64 addrspace(1)* %valptr, i32 %tid | |
93 %val = load i64, i64 addrspace(1)* %gep | |
86 %brev = call i64 @llvm.bitreverse.i64(i64 %val) #1 | 94 %brev = call i64 @llvm.bitreverse.i64(i64 %val) #1 |
87 store i64 %brev, i64 addrspace(1)* %out | 95 store i64 %brev, i64 addrspace(1)* %out |
88 ret void | 96 ret void |
89 } | 97 } |
90 | 98 |
91 ; FUNC-LABEL: {{^}}s_brev_v2i64: | 99 ; FUNC-LABEL: {{^}}s_brev_v2i64: |
92 define void @s_brev_v2i64(<2 x i64> addrspace(1)* noalias %out, <2 x i64> %val) #0 { | 100 define amdgpu_kernel void @s_brev_v2i64(<2 x i64> addrspace(1)* noalias %out, <2 x i64> %val) #0 { |
93 %brev = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %val) #1 | 101 %brev = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %val) #1 |
94 store <2 x i64> %brev, <2 x i64> addrspace(1)* %out | 102 store <2 x i64> %brev, <2 x i64> addrspace(1)* %out |
95 ret void | 103 ret void |
96 } | 104 } |
97 | 105 |
98 ; FUNC-LABEL: {{^}}v_brev_v2i64: | 106 ; FUNC-LABEL: {{^}}v_brev_v2i64: |
99 define void @v_brev_v2i64(<2 x i64> addrspace(1)* noalias %out, <2 x i64> addrspace(1)* noalias %valptr) #0 { | 107 define amdgpu_kernel void @v_brev_v2i64(<2 x i64> addrspace(1)* noalias %out, <2 x i64> addrspace(1)* noalias %valptr) #0 { |
100 %val = load <2 x i64>, <2 x i64> addrspace(1)* %valptr | 108 %tid = call i32 @llvm.amdgcn.workitem.id.x() |
109 %gep = getelementptr <2 x i64> , <2 x i64> addrspace(1)* %valptr, i32 %tid | |
110 %val = load <2 x i64>, <2 x i64> addrspace(1)* %gep | |
101 %brev = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %val) #1 | 111 %brev = call <2 x i64> @llvm.bitreverse.v2i64(<2 x i64> %val) #1 |
102 store <2 x i64> %brev, <2 x i64> addrspace(1)* %out | 112 store <2 x i64> %brev, <2 x i64> addrspace(1)* %out |
103 ret void | 113 ret void |
104 } | 114 } |
105 | 115 |