| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 1 | ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 2 |  | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 3 | declare i32 @llvm.amdgcn.workitem.id.x() #1 | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 4 | declare float @llvm.fabs.f32(float) #1 | 
| Matt Arsenault | 581a7a6 | 2014-11-13 19:26:50 +0000 | [diff] [blame] | 5 | declare float @llvm.fma.f32(float, float, float) nounwind readnone | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 6 |  | 
|  | 7 | ; FUNC-LABEL: @commute_add_imm_fabs_f32 | 
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 8 | ; SI: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | bbb47da | 2016-09-08 17:19:29 +0000 | [diff] [blame] | 9 | ; SI: v_add_f32_e64 [[REG:v[0-9]+]], |[[X]]|, 2.0 | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 10 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 11 | define amdgpu_kernel void @commute_add_imm_fabs_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 12 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 13 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 14 | %x = load float, float addrspace(1)* %gep.0 | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 15 | %x.fabs = call float @llvm.fabs.f32(float %x) #1 | 
|  | 16 | %z = fadd float 2.0, %x.fabs | 
|  | 17 | store float %z, float addrspace(1)* %out | 
|  | 18 | ret void | 
|  | 19 | } | 
|  | 20 |  | 
|  | 21 | ; FUNC-LABEL: @commute_mul_imm_fneg_fabs_f32 | 
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 22 | ; SI: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | bbb47da | 2016-09-08 17:19:29 +0000 | [diff] [blame] | 23 | ; SI: v_mul_f32_e64 [[REG:v[0-9]+]], |[[X]]|, -4.0 | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 24 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 25 | define amdgpu_kernel void @commute_mul_imm_fneg_fabs_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 26 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 27 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 28 | %x = load float, float addrspace(1)* %gep.0 | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 29 | %x.fabs = call float @llvm.fabs.f32(float %x) #1 | 
|  | 30 | %x.fneg.fabs = fsub float -0.000000e+00, %x.fabs | 
|  | 31 | %z = fmul float 4.0, %x.fneg.fabs | 
|  | 32 | store float %z, float addrspace(1)* %out | 
|  | 33 | ret void | 
|  | 34 | } | 
|  | 35 |  | 
|  | 36 | ; FUNC-LABEL: @commute_mul_imm_fneg_f32 | 
| Tom Stellard | 326d6ec | 2014-11-05 14:50:53 +0000 | [diff] [blame] | 37 | ; SI: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
|  | 38 | ; SI: v_mul_f32_e32 [[REG:v[0-9]+]], -4.0, [[X]] | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 39 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 40 | define amdgpu_kernel void @commute_mul_imm_fneg_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 41 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 42 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 43 | %x = load float, float addrspace(1)* %gep.0 | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 44 | %x.fneg = fsub float -0.000000e+00, %x | 
|  | 45 | %z = fmul float 4.0, %x.fneg | 
|  | 46 | store float %z, float addrspace(1)* %out | 
|  | 47 | ret void | 
|  | 48 | } | 
|  | 49 |  | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 50 | ; FIXME: Should use SGPR for literal. | 
|  | 51 | ; FUNC-LABEL: @commute_add_lit_fabs_f32 | 
|  | 52 | ; SI: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
|  | 53 | ; SI: v_mov_b32_e32 [[K:v[0-9]+]], 0x44800000 | 
| Stanislav Mekhanoshin | 56ea488 | 2017-05-30 16:49:24 +0000 | [diff] [blame] | 54 | ; SI: v_add_f32_e64 [[REG:v[0-9]+]], |[[X]]|, [[K]] | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 55 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 56 | define amdgpu_kernel void @commute_add_lit_fabs_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 57 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 58 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
| David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 59 | %x = load float, float addrspace(1)* %gep.0 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 60 | %x.fabs = call float @llvm.fabs.f32(float %x) #1 | 
|  | 61 | %z = fadd float 1024.0, %x.fabs | 
|  | 62 | store float %z, float addrspace(1)* %out | 
|  | 63 | ret void | 
|  | 64 | } | 
|  | 65 |  | 
|  | 66 | ; FUNC-LABEL: @commute_add_fabs_f32 | 
|  | 67 | ; SI-DAG: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | fb13b22 | 2014-12-03 03:12:13 +0000 | [diff] [blame] | 68 | ; SI-DAG: buffer_load_dword [[Y:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 69 | ; SI: v_add_f32_e64 [[REG:v[0-9]+]], [[X]], |[[Y]]| | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 70 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 71 | define amdgpu_kernel void @commute_add_fabs_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 72 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 73 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
|  | 74 | %gep.1 = getelementptr float, float addrspace(1)* %gep.0, i32 1 | 
| Matt Arsenault | 44e5483 | 2016-04-12 13:38:18 +0000 | [diff] [blame] | 75 | %x = load volatile float, float addrspace(1)* %gep.0 | 
|  | 76 | %y = load volatile float, float addrspace(1)* %gep.1 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 77 | %y.fabs = call float @llvm.fabs.f32(float %y) #1 | 
|  | 78 | %z = fadd float %x, %y.fabs | 
|  | 79 | store float %z, float addrspace(1)* %out | 
|  | 80 | ret void | 
|  | 81 | } | 
|  | 82 |  | 
|  | 83 | ; FUNC-LABEL: @commute_mul_fneg_f32 | 
|  | 84 | ; SI-DAG: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | fb13b22 | 2014-12-03 03:12:13 +0000 | [diff] [blame] | 85 | ; SI-DAG: buffer_load_dword [[Y:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 86 | ; SI: v_mul_f32_e64 [[REG:v[0-9]+]], [[X]], -[[Y]] | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 87 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 88 | define amdgpu_kernel void @commute_mul_fneg_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 89 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 90 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
|  | 91 | %gep.1 = getelementptr float, float addrspace(1)* %gep.0, i32 1 | 
| Matt Arsenault | 44e5483 | 2016-04-12 13:38:18 +0000 | [diff] [blame] | 92 | %x = load volatile float, float addrspace(1)* %gep.0 | 
|  | 93 | %y = load volatile float, float addrspace(1)* %gep.1 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 94 | %y.fneg = fsub float -0.000000e+00, %y | 
|  | 95 | %z = fmul float %x, %y.fneg | 
|  | 96 | store float %z, float addrspace(1)* %out | 
|  | 97 | ret void | 
|  | 98 | } | 
|  | 99 |  | 
|  | 100 | ; FUNC-LABEL: @commute_mul_fabs_fneg_f32 | 
|  | 101 | ; SI-DAG: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | fb13b22 | 2014-12-03 03:12:13 +0000 | [diff] [blame] | 102 | ; SI-DAG: buffer_load_dword [[Y:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 103 | ; SI: v_mul_f32_e64 [[REG:v[0-9]+]], [[X]], -|[[Y]]| | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 104 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 105 | define amdgpu_kernel void @commute_mul_fabs_fneg_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 106 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 107 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
|  | 108 | %gep.1 = getelementptr float, float addrspace(1)* %gep.0, i32 1 | 
| Matt Arsenault | 44e5483 | 2016-04-12 13:38:18 +0000 | [diff] [blame] | 109 | %x = load volatile float, float addrspace(1)* %gep.0 | 
|  | 110 | %y = load volatile float, float addrspace(1)* %gep.1 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 111 | %y.fabs = call float @llvm.fabs.f32(float %y) #1 | 
|  | 112 | %y.fabs.fneg = fsub float -0.000000e+00, %y.fabs | 
|  | 113 | %z = fmul float %x, %y.fabs.fneg | 
|  | 114 | store float %z, float addrspace(1)* %out | 
|  | 115 | ret void | 
|  | 116 | } | 
|  | 117 |  | 
|  | 118 | ; There's no reason to commute this. | 
|  | 119 | ; FUNC-LABEL: @commute_mul_fabs_x_fabs_y_f32 | 
|  | 120 | ; SI-DAG: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | fb13b22 | 2014-12-03 03:12:13 +0000 | [diff] [blame] | 121 | ; SI-DAG: buffer_load_dword [[Y:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 122 | ; SI: v_mul_f32_e64 [[REG:v[0-9]+]], |[[X]]|, |[[Y]]| | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 123 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 124 | define amdgpu_kernel void @commute_mul_fabs_x_fabs_y_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 125 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 126 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
|  | 127 | %gep.1 = getelementptr float, float addrspace(1)* %gep.0, i32 1 | 
| Matt Arsenault | 44e5483 | 2016-04-12 13:38:18 +0000 | [diff] [blame] | 128 | %x = load volatile float, float addrspace(1)* %gep.0 | 
|  | 129 | %y = load volatile float, float addrspace(1)* %gep.1 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 130 | %x.fabs = call float @llvm.fabs.f32(float %x) #1 | 
|  | 131 | %y.fabs = call float @llvm.fabs.f32(float %y) #1 | 
|  | 132 | %z = fmul float %x.fabs, %y.fabs | 
|  | 133 | store float %z, float addrspace(1)* %out | 
|  | 134 | ret void | 
|  | 135 | } | 
|  | 136 |  | 
|  | 137 | ; FUNC-LABEL: @commute_mul_fabs_x_fneg_fabs_y_f32 | 
|  | 138 | ; SI-DAG: buffer_load_dword [[X:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | fb13b22 | 2014-12-03 03:12:13 +0000 | [diff] [blame] | 139 | ; SI-DAG: buffer_load_dword [[Y:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 140 | ; SI: v_mul_f32_e64 [[REG:v[0-9]+]], |[[X]]|, -|[[Y]]| | 
| Tom Stellard | 0bc954e | 2016-03-30 16:35:09 +0000 | [diff] [blame] | 141 | ; SI: buffer_store_dword [[REG]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 142 | define amdgpu_kernel void @commute_mul_fabs_x_fneg_fabs_y_f32(float addrspace(1)* %out, float addrspace(1)* %in) #0 { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 143 | %tid = call i32 @llvm.amdgcn.workitem.id.x() #1 | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 144 | %gep.0 = getelementptr float, float addrspace(1)* %in, i32 %tid | 
|  | 145 | %gep.1 = getelementptr float, float addrspace(1)* %gep.0, i32 1 | 
| Matt Arsenault | 44e5483 | 2016-04-12 13:38:18 +0000 | [diff] [blame] | 146 | %x = load volatile float, float addrspace(1)* %gep.0 | 
|  | 147 | %y = load volatile float, float addrspace(1)* %gep.1 | 
| Matt Arsenault | 95e4866 | 2014-11-13 19:26:47 +0000 | [diff] [blame] | 148 | %x.fabs = call float @llvm.fabs.f32(float %x) #1 | 
|  | 149 | %y.fabs = call float @llvm.fabs.f32(float %y) #1 | 
|  | 150 | %y.fabs.fneg = fsub float -0.000000e+00, %y.fabs | 
|  | 151 | %z = fmul float %x.fabs, %y.fabs.fneg | 
|  | 152 | store float %z, float addrspace(1)* %out | 
|  | 153 | ret void | 
|  | 154 | } | 
|  | 155 |  | 
| Matt Arsenault | 581a7a6 | 2014-11-13 19:26:50 +0000 | [diff] [blame] | 156 | ; Make sure we commute the multiply part for the constant in src0 even | 
|  | 157 | ; though we have negate modifier on src2. | 
|  | 158 |  | 
|  | 159 | ; SI-LABEL: {{^}}fma_a_2.0_neg_b_f32 | 
|  | 160 | ; SI-DAG: buffer_load_dword [[R1:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64{{$}} | 
| Matt Arsenault | fb13b22 | 2014-12-03 03:12:13 +0000 | [diff] [blame] | 161 | ; SI-DAG: buffer_load_dword [[R2:v[0-9]+]], {{v\[[0-9]+:[0-9]+\]}}, {{s\[[0-9]+:[0-9]+\]}}, 0 addr64 offset:4 | 
| Matt Arsenault | 3d1c1de | 2016-04-14 21:58:24 +0000 | [diff] [blame] | 162 | ; SI: v_fma_f32 [[RESULT:v[0-9]+]], [[R1]], 2.0, |[[R2]]| | 
| Matt Arsenault | 581a7a6 | 2014-11-13 19:26:50 +0000 | [diff] [blame] | 163 | ; SI: buffer_store_dword [[RESULT]] | 
| Matt Arsenault | 3dbeefa | 2017-03-21 21:39:51 +0000 | [diff] [blame] | 164 | define amdgpu_kernel void @fma_a_2.0_neg_b_f32(float addrspace(1)* %out, float addrspace(1)* %in) { | 
| Matt Arsenault | 9c47dd5 | 2016-02-11 06:02:01 +0000 | [diff] [blame] | 165 | %tid = call i32 @llvm.amdgcn.workitem.id.x() nounwind readnone | 
| David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 166 | %gep.0 = getelementptr float, float addrspace(1)* %out, i32 %tid | 
|  | 167 | %gep.1 = getelementptr float, float addrspace(1)* %gep.0, i32 1 | 
|  | 168 | %gep.out = getelementptr float, float addrspace(1)* %out, i32 %tid | 
| Matt Arsenault | 581a7a6 | 2014-11-13 19:26:50 +0000 | [diff] [blame] | 169 |  | 
| Matt Arsenault | 44e5483 | 2016-04-12 13:38:18 +0000 | [diff] [blame] | 170 | %r1 = load volatile float, float addrspace(1)* %gep.0 | 
|  | 171 | %r2 = load volatile float, float addrspace(1)* %gep.1 | 
| Matt Arsenault | 581a7a6 | 2014-11-13 19:26:50 +0000 | [diff] [blame] | 172 |  | 
|  | 173 | %r2.fabs = call float @llvm.fabs.f32(float %r2) | 
|  | 174 |  | 
|  | 175 | %r3 = tail call float @llvm.fma.f32(float %r1, float 2.0, float %r2.fabs) | 
|  | 176 | store float %r3, float addrspace(1)* %gep.out | 
|  | 177 | ret void | 
|  | 178 | } | 
|  | 179 |  | 
| Matt Arsenault | d282ada | 2014-10-17 18:00:48 +0000 | [diff] [blame] | 180 | attributes #0 = { nounwind } | 
|  | 181 | attributes #1 = { nounwind readnone } |