Mercurial > hg > CbC > CbC_llvm
comparison test/CodeGen/AMDGPU/v_mac.ll @ 120:1172e4bd9c6f
update 4.0.0
author | mir3636 |
---|---|
date | Fri, 25 Nov 2016 19:14:25 +0900 |
parents | afa8332a0e37 |
children | 803732b1fca8 |
comparison
equal
deleted
inserted
replaced
101:34baf5011add | 120:1172e4bd9c6f |
---|---|
1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=GCN %s | 1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=GCN %s |
2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=GCN %s | 2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=VI -check-prefix=GCN %s |
3 | 3 |
4 ; GCN-LABEL: {{^}}mac_vvv: | 4 ; GCN-LABEL: {{^}}mac_vvv: |
5 ; GCN: buffer_load_dword [[A:v[0-9]+]], s[{{[0-9]+:[0-9]+}}], 0{{$}} | 5 ; GCN: buffer_load_dword [[A:v[0-9]+]], off, s[{{[0-9]+:[0-9]+}}], 0{{$}} |
6 ; GCN: buffer_load_dword [[B:v[0-9]+]], s[{{[0-9]+:[0-9]+}}], 0 offset:4 | 6 ; GCN: buffer_load_dword [[B:v[0-9]+]], off, s[{{[0-9]+:[0-9]+}}], 0 offset:4 |
7 ; GCN: buffer_load_dword [[C:v[0-9]+]], s[{{[0-9]+:[0-9]+}}], 0 offset:8 | 7 ; GCN: buffer_load_dword [[C:v[0-9]+]], off, s[{{[0-9]+:[0-9]+}}], 0 offset:8 |
8 ; GCN: v_mac_f32_e32 [[C]], [[B]], [[A]] | 8 ; GCN: v_mac_f32_e32 [[C]], [[B]], [[A]] |
9 ; GCN: buffer_store_dword [[C]] | 9 ; GCN: buffer_store_dword [[C]] |
10 define void @mac_vvv(float addrspace(1)* %out, float addrspace(1)* %in) { | 10 define void @mac_vvv(float addrspace(1)* %out, float addrspace(1)* %in) #0 { |
11 entry: | 11 entry: |
12 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | 12 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 |
13 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 | 13 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 |
14 | 14 |
15 %a = load float, float addrspace(1)* %in | 15 %a = load volatile float, float addrspace(1)* %in |
16 %b = load float, float addrspace(1)* %b_ptr | 16 %b = load volatile float, float addrspace(1)* %b_ptr |
17 %c = load float, float addrspace(1)* %c_ptr | 17 %c = load volatile float, float addrspace(1)* %c_ptr |
18 | 18 |
19 %tmp0 = fmul float %a, %b | 19 %tmp0 = fmul float %a, %b |
20 %tmp1 = fadd float %tmp0, %c | 20 %tmp1 = fadd float %tmp0, %c |
21 store float %tmp1, float addrspace(1)* %out | 21 store float %tmp1, float addrspace(1)* %out |
22 ret void | 22 ret void |
23 } | 23 } |
24 | 24 |
25 ; GCN-LABEL: {{^}}mad_inline_sgpr_inline: | 25 ; GCN-LABEL: {{^}}mad_inline_sgpr_inline: |
26 ; GCN-NOT: v_mac_f32 | 26 ; GCN-NOT: v_mac_f32 |
27 ; GCN: v_mad_f32 v{{[0-9]}}, 0.5, s{{[0-9]+}}, 0.5 | 27 ; GCN: v_mad_f32 v{{[0-9]}}, s{{[0-9]+}}, 0.5, 0.5 |
28 define void @mad_inline_sgpr_inline(float addrspace(1)* %out, float %in) { | 28 define void @mad_inline_sgpr_inline(float addrspace(1)* %out, float %in) #0 { |
29 entry: | 29 entry: |
30 %tmp0 = fmul float 0.5, %in | 30 %tmp0 = fmul float 0.5, %in |
31 %tmp1 = fadd float %tmp0, 0.5 | 31 %tmp1 = fadd float %tmp0, 0.5 |
32 store float %tmp1, float addrspace(1)* %out | 32 store float %tmp1, float addrspace(1)* %out |
33 ret void | 33 ret void |
34 } | 34 } |
35 | 35 |
36 ; GCN-LABEL: {{^}}mad_vvs: | 36 ; GCN-LABEL: {{^}}mad_vvs: |
37 ; GCN-NOT: v_mac_f32 | 37 ; GCN-NOT: v_mac_f32 |
38 ; GCN: v_mad_f32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}, s{{[0-9]+}} | 38 ; GCN: v_mad_f32 v{{[0-9]+}}, v{{[0-9]+}}, v{{[0-9]+}}, s{{[0-9]+}} |
39 define void @mad_vvs(float addrspace(1)* %out, float addrspace(1)* %in, float %c) { | 39 define void @mad_vvs(float addrspace(1)* %out, float addrspace(1)* %in, float %c) #0 { |
40 entry: | 40 entry: |
41 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | 41 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 |
42 | 42 |
43 %a = load float, float addrspace(1)* %in | 43 %a = load float, float addrspace(1)* %in |
44 %b = load float, float addrspace(1)* %b_ptr | 44 %b = load float, float addrspace(1)* %b_ptr |
49 ret void | 49 ret void |
50 } | 50 } |
51 | 51 |
52 ; GCN-LABEL: {{^}}mac_ssv: | 52 ; GCN-LABEL: {{^}}mac_ssv: |
53 ; GCN: v_mac_f32_e64 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}} | 53 ; GCN: v_mac_f32_e64 v{{[0-9]+}}, s{{[0-9]+}}, s{{[0-9]+}} |
54 define void @mac_ssv(float addrspace(1)* %out, float addrspace(1)* %in, float %a) { | 54 define void @mac_ssv(float addrspace(1)* %out, float addrspace(1)* %in, float %a) #0 { |
55 entry: | 55 entry: |
56 %c = load float, float addrspace(1)* %in | 56 %c = load float, float addrspace(1)* %in |
57 | 57 |
58 %tmp0 = fmul float %a, %a | 58 %tmp0 = fmul float %a, %a |
59 %tmp1 = fadd float %tmp0, %c | 59 %tmp1 = fadd float %tmp0, %c |
62 } | 62 } |
63 | 63 |
64 ; GCN-LABEL: {{^}}mac_mad_same_add: | 64 ; GCN-LABEL: {{^}}mac_mad_same_add: |
65 ; GCN: v_mad_f32 v{{[0-9]}}, v{{[0-9]+}}, v{{[0-9]+}}, [[ADD:v[0-9]+]] | 65 ; GCN: v_mad_f32 v{{[0-9]}}, v{{[0-9]+}}, v{{[0-9]+}}, [[ADD:v[0-9]+]] |
66 ; GCN: v_mac_f32_e32 [[ADD]], v{{[0-9]+}}, v{{[0-9]+}} | 66 ; GCN: v_mac_f32_e32 [[ADD]], v{{[0-9]+}}, v{{[0-9]+}} |
67 define void @mac_mad_same_add(float addrspace(1)* %out, float addrspace(1)* %in) { | 67 define void @mac_mad_same_add(float addrspace(1)* %out, float addrspace(1)* %in) #0 { |
68 entry: | 68 entry: |
69 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | 69 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 |
70 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 | 70 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 |
71 %d_ptr = getelementptr float, float addrspace(1)* %in, i32 3 | 71 %d_ptr = getelementptr float, float addrspace(1)* %in, i32 3 |
72 %e_ptr = getelementptr float, float addrspace(1)* %in, i32 4 | 72 %e_ptr = getelementptr float, float addrspace(1)* %in, i32 4 |
73 | 73 |
74 %a = load float, float addrspace(1)* %in | 74 %a = load volatile float, float addrspace(1)* %in |
75 %b = load float, float addrspace(1)* %b_ptr | 75 %b = load volatile float, float addrspace(1)* %b_ptr |
76 %c = load float, float addrspace(1)* %c_ptr | 76 %c = load volatile float, float addrspace(1)* %c_ptr |
77 %d = load float, float addrspace(1)* %d_ptr | 77 %d = load volatile float, float addrspace(1)* %d_ptr |
78 %e = load float, float addrspace(1)* %e_ptr | 78 %e = load volatile float, float addrspace(1)* %e_ptr |
79 | 79 |
80 %tmp0 = fmul float %a, %b | 80 %tmp0 = fmul float %a, %b |
81 %tmp1 = fadd float %tmp0, %c | 81 %tmp1 = fadd float %tmp0, %c |
82 | 82 |
83 %tmp2 = fmul float %d, %e | 83 %tmp2 = fmul float %d, %e |
102 | 102 |
103 %a = load float, float addrspace(1)* %in | 103 %a = load float, float addrspace(1)* %in |
104 %b = load float, float addrspace(1)* %b_ptr | 104 %b = load float, float addrspace(1)* %b_ptr |
105 %c = load float, float addrspace(1)* %c_ptr | 105 %c = load float, float addrspace(1)* %c_ptr |
106 | 106 |
107 %neg_a = fsub float -0.0, %a | |
108 %tmp0 = fmul float %neg_a, %b | |
109 %tmp1 = fadd float %tmp0, %c | |
110 | |
111 store float %tmp1, float addrspace(1)* %out | |
112 ret void | |
113 } | |
114 | |
115 ; GCN-LABEL: {{^}}unsafe_mad_sub0_src0: | |
116 ; GCN-NOT: v_mac_f32 | |
117 ; GCN: v_mad_f32 v{{[0-9]+}}, -v{{[0-9]+}}, v{{[0-9]+}}, v{{[-0-9]}} | |
118 define void @unsafe_mad_sub0_src0(float addrspace(1)* %out, float addrspace(1)* %in) #1 { | |
119 entry: | |
120 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | |
121 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 | |
122 | |
123 %a = load float, float addrspace(1)* %in | |
124 %b = load float, float addrspace(1)* %b_ptr | |
125 %c = load float, float addrspace(1)* %c_ptr | |
126 | |
107 %neg_a = fsub float 0.0, %a | 127 %neg_a = fsub float 0.0, %a |
108 %tmp0 = fmul float %neg_a, %b | 128 %tmp0 = fmul float %neg_a, %b |
109 %tmp1 = fadd float %tmp0, %c | 129 %tmp1 = fadd float %tmp0, %c |
110 | 130 |
111 store float %tmp1, float addrspace(1)* %out | 131 store float %tmp1, float addrspace(1)* %out |
112 ret void | 132 ret void |
113 } | 133 } |
114 | 134 |
135 ; GCN-LABEL: {{^}}safe_mad_sub0_src0: | |
136 ; GCN: v_sub_f32_e32 [[SUB0:v[0-9]+]], 0, | |
137 ; GCN: v_mac_f32_e32 v{{[0-9]+}}, v{{[0-9]+}}, [[SUB0]] | |
138 define void @safe_mad_sub0_src0(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | |
139 entry: | |
140 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | |
141 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 | |
142 | |
143 %a = load float, float addrspace(1)* %in | |
144 %b = load float, float addrspace(1)* %b_ptr | |
145 %c = load float, float addrspace(1)* %c_ptr | |
146 | |
147 %neg_a = fsub float 0.0, %a | |
148 %tmp0 = fmul float %neg_a, %b | |
149 %tmp1 = fadd float %tmp0, %c | |
150 | |
151 store float %tmp1, float addrspace(1)* %out | |
152 ret void | |
153 } | |
154 | |
115 ; GCN-LABEL: {{^}}mad_neg_src1: | 155 ; GCN-LABEL: {{^}}mad_neg_src1: |
116 ; GCN-NOT: v_mac_f32 | 156 ; GCN-NOT: v_mac_f32 |
117 ; GCN: v_mad_f32 v{{[0-9]+}}, -v{{[0-9]+}}, v{{[0-9]+}}, v{{[-0-9]}} | 157 ; GCN: v_mad_f32 v{{[0-9]+}}, -v{{[0-9]+}}, v{{[0-9]+}}, v{{[-0-9]}} |
118 define void @mad_neg_src1(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 158 define void @mad_neg_src1(float addrspace(1)* %out, float addrspace(1)* %in) #0 { |
159 entry: | |
160 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | |
161 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 | |
162 | |
163 %a = load float, float addrspace(1)* %in | |
164 %b = load float, float addrspace(1)* %b_ptr | |
165 %c = load float, float addrspace(1)* %c_ptr | |
166 | |
167 %neg_b = fsub float -0.0, %b | |
168 %tmp0 = fmul float %a, %neg_b | |
169 %tmp1 = fadd float %tmp0, %c | |
170 | |
171 store float %tmp1, float addrspace(1)* %out | |
172 ret void | |
173 } | |
174 | |
175 ; GCN-LABEL: {{^}}unsafe_mad_sub0_src1: | |
176 ; GCN-NOT: v_mac_f32 | |
177 ; GCN: v_mad_f32 v{{[0-9]+}}, -v{{[0-9]+}}, v{{[0-9]+}}, v{{[-0-9]}} | |
178 define void @unsafe_mad_sub0_src1(float addrspace(1)* %out, float addrspace(1)* %in) #1 { | |
119 entry: | 179 entry: |
120 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 | 180 %b_ptr = getelementptr float, float addrspace(1)* %in, i32 1 |
121 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 | 181 %c_ptr = getelementptr float, float addrspace(1)* %in, i32 2 |
122 | 182 |
123 %a = load float, float addrspace(1)* %in | 183 %a = load float, float addrspace(1)* %in |
142 | 202 |
143 %a = load float, float addrspace(1)* %in | 203 %a = load float, float addrspace(1)* %in |
144 %b = load float, float addrspace(1)* %b_ptr | 204 %b = load float, float addrspace(1)* %b_ptr |
145 %c = load float, float addrspace(1)* %c_ptr | 205 %c = load float, float addrspace(1)* %c_ptr |
146 | 206 |
147 %neg_c = fsub float 0.0, %c | 207 %neg_c = fsub float -0.0, %c |
148 %tmp0 = fmul float %a, %b | 208 %tmp0 = fmul float %a, %b |
149 %tmp1 = fadd float %tmp0, %neg_c | 209 %tmp1 = fadd float %tmp0, %neg_c |
150 | 210 |
151 store float %tmp1, float addrspace(1)* %out | 211 store float %tmp1, float addrspace(1)* %out |
152 ret void | 212 ret void |
153 } | 213 } |
154 | 214 |
155 attributes #0 = { "true" "unsafe-fp-math"="true" } | 215 attributes #0 = { nounwind "unsafe-fp-math"="false" } |
216 attributes #1 = { nounwind "unsafe-fp-math"="true" } |