Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=amdgcn -mcpu=tahiti -verify-machineinstrs < %s | FileCheck %s |
| 2 | ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck %s |
Tom Stellard | 7512c08 | 2013-07-12 18:14:56 +0000 | [diff] [blame] | 3 | |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 4 | ; CHECK-LABEL: {{^}}v_fadd_f64: |
Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 5 | ; CHECK: v_add_f64 {{v[[0-9]+:[0-9]+]}}, {{v[[0-9]+:[0-9]+]}}, {{v[[0-9]+:[0-9]+]}} |
Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 6 | define amdgpu_kernel void @v_fadd_f64(double addrspace(1)* %out, double addrspace(1)* %in1, |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 7 | double addrspace(1)* %in2) { |
Alexander Timofeev | 982aee6 | 2017-07-04 17:32:00 +0000 | [diff] [blame] | 8 | %tid = call i32 @llvm.amdgcn.workitem.id.x() |
| 9 | %gep1 = getelementptr inbounds double, double addrspace(1)* %in1, i32 %tid |
| 10 | %gep2 = getelementptr inbounds double, double addrspace(1)* %in2, i32 %tid |
| 11 | %r0 = load double, double addrspace(1)* %gep1 |
| 12 | %r1 = load double, double addrspace(1)* %gep2 |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 13 | %r2 = fadd double %r0, %r1 |
| 14 | store double %r2, double addrspace(1)* %out |
| 15 | ret void |
| 16 | } |
Tom Stellard | 7512c08 | 2013-07-12 18:14:56 +0000 | [diff] [blame] | 17 | |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 18 | ; CHECK-LABEL: {{^}}s_fadd_f64: |
Stanislav Mekhanoshin | 56ea488 | 2017-05-30 16:49:24 +0000 | [diff] [blame] | 19 | ; CHECK: v_add_f64 {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{v\[[0-9]+:[0-9]+\]}} |
Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 20 | define amdgpu_kernel void @s_fadd_f64(double addrspace(1)* %out, double %r0, double %r1) { |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 21 | %r2 = fadd double %r0, %r1 |
| 22 | store double %r2, double addrspace(1)* %out |
| 23 | ret void |
| 24 | } |
| 25 | |
| 26 | ; CHECK-LABEL: {{^}}v_fadd_v2f64: |
| 27 | ; CHECK: v_add_f64 |
| 28 | ; CHECK: v_add_f64 |
Matt Arsenault | 7aad8fd | 2017-01-24 22:02:15 +0000 | [diff] [blame] | 29 | ; CHECK: _store_dwordx4 |
Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 30 | define amdgpu_kernel void @v_fadd_v2f64(<2 x double> addrspace(1)* %out, <2 x double> addrspace(1)* %in1, |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 31 | <2 x double> addrspace(1)* %in2) { |
| 32 | %r0 = load <2 x double>, <2 x double> addrspace(1)* %in1 |
| 33 | %r1 = load <2 x double>, <2 x double> addrspace(1)* %in2 |
| 34 | %r2 = fadd <2 x double> %r0, %r1 |
| 35 | store <2 x double> %r2, <2 x double> addrspace(1)* %out |
| 36 | ret void |
| 37 | } |
| 38 | |
| 39 | ; CHECK-LABEL: {{^}}s_fadd_v2f64: |
Matt Arsenault | 61001bb | 2015-11-25 19:58:34 +0000 | [diff] [blame] | 40 | ; CHECK: v_add_f64 {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{v\[[0-9]+:[0-9]+\]}} |
| 41 | ; CHECK: v_add_f64 {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, {{v\[[0-9]+:[0-9]+\]}} |
Matt Arsenault | 7aad8fd | 2017-01-24 22:02:15 +0000 | [diff] [blame] | 42 | ; CHECK: _store_dwordx4 |
Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 43 | define amdgpu_kernel void @s_fadd_v2f64(<2 x double> addrspace(1)* %out, <2 x double> %r0, <2 x double> %r1) { |
Matt Arsenault | b0f87ed | 2015-11-05 01:03:11 +0000 | [diff] [blame] | 44 | %r2 = fadd <2 x double> %r0, %r1 |
| 45 | store <2 x double> %r2, <2 x double> addrspace(1)* %out |
| 46 | ret void |
Tom Stellard | 7512c08 | 2013-07-12 18:14:56 +0000 | [diff] [blame] | 47 | } |
Alexander Timofeev | 982aee6 | 2017-07-04 17:32:00 +0000 | [diff] [blame] | 48 | |
| 49 | declare i32 @llvm.amdgcn.workitem.id.x() #1 |
| 50 | |
| 51 | attributes #0 = { nounwind } |
| 52 | attributes #1 = { nounwind readnone } |