@@ -27,8 +27,8 @@ define amdgpu_kernel void @v_unsafe_fsqrt_f32(float addrspace(1)* %out, float ad
2727; FUNC-LABEL: {{^}}s_sqrt_f32:
2828; GCN: v_sqrt_f32_e32
2929
30- ; R600: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[2].Z
31- ; R600: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[2].Z , PS
30+ ; R600: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[2].Z
31+ ; R600: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, PS
3232define amdgpu_kernel void @s_sqrt_f32 (float addrspace (1 )* %out , float %in ) #1 {
3333entry:
3434 %fdiv = call float @llvm.sqrt.f32 (float %in )
@@ -40,10 +40,10 @@ entry:
4040; GCN: v_sqrt_f32_e32
4141; GCN: v_sqrt_f32_e32
4242
43- ; R600-DAG: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[2].W
44- ; R600-DAG: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[2].W , PS
45- ; R600-DAG: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[3].X
46- ; R600-DAG: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[3].X, PS
43+ ; R600-DAG: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[2].W
44+ ; R600-DAG: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, PS
45+ ; R600-DAG: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[3].X
46+ ; R600-DAG: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, T{{[0-9]\.[XYZW]}}
4747define amdgpu_kernel void @s_sqrt_v2f32 (<2 x float > addrspace (1 )* %out , <2 x float > %in ) #1 {
4848entry:
4949 %fdiv = call <2 x float > @llvm.sqrt.v2f32 (<2 x float > %in )
@@ -57,14 +57,14 @@ entry:
5757; GCN: v_sqrt_f32_e32
5858; GCN: v_sqrt_f32_e32
5959
60- ; R600-DAG: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[3].Y
61- ; R600-DAG: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[3].Y , PS
62- ; R600-DAG: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[3].Z
63- ; R600-DAG: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[3].Z, PS
64- ; R600-DAG: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[3].W
65- ; R600-DAG: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[3].W, PS
66- ; R600-DAG: RECIPSQRT_CLAMPED * T{{[0-9]\.[XYZW]}}, KC0[4].X
67- ; R600-DAG: MUL NON-IEEE T{{[0-9]\.[XYZW]}}, KC0[4].X, PS
60+ ; R600-DAG: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[3].Y
61+ ; R600-DAG: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, PS
62+ ; R600-DAG: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[3].Z
63+ ; R600-DAG: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, T{{[0-9]\.[XYZW]}}
64+ ; R600-DAG: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[3].W
65+ ; R600-DAG: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, T{{[0-9]\.[XYZW]}}
66+ ; R600-DAG: RECIPSQRT_IEEE * T{{[0-9]\.[XYZW]}}, KC0[4].X
67+ ; R600-DAG: RECIP_IEEE * T{{[0-9]\.[XYZW]}}, T{{[0-9]\.[XYZW]}}
6868define amdgpu_kernel void @s_sqrt_v4f32 (<4 x float > addrspace (1 )* %out , <4 x float > %in ) #1 {
6969entry:
7070 %fdiv = call <4 x float > @llvm.sqrt.v4f32 (<4 x float > %in )
@@ -134,6 +134,16 @@ entry:
134134 ret void
135135}
136136
137+ ; FUNC-LABEL: {{^}}recip_sqrt:
138+ ; R600: RECIPSQRT_IEEE
139+ ; R600-NOT: RECIP_IEEE
140+ define amdgpu_kernel void @recip_sqrt (float addrspace (1 )* %out , float %src ) nounwind {
141+ %sqrt = call float @llvm.sqrt.f32 (float %src )
142+ %recipsqrt = fdiv fast float 1 .0 , %sqrt
143+ store float %recipsqrt , float addrspace (1 )* %out , align 4
144+ ret void
145+ }
146+
137147declare float @llvm.sqrt.f32 (float %in ) #0
138148declare <2 x float > @llvm.sqrt.v2f32 (<2 x float > %in ) #0
139149declare <4 x float > @llvm.sqrt.v4f32 (<4 x float > %in ) #0
0 commit comments