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" }