diff options
author | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2017-10-06 17:24:45 +0000 |
---|---|---|
committer | Stanislav Mekhanoshin <Stanislav.Mekhanoshin@amd.com> | 2017-10-06 17:24:45 +0000 |
commit | de42c29a68bc4ab1143f6a1e76beda49ca6cde7a (patch) | |
tree | e091fed8d2e451030acb0ead41aa55ca78a00957 /llvm/test | |
parent | 4c4422f9a5813706410a99a9e756f8600be138eb (diff) | |
download | bcm5719-llvm-de42c29a68bc4ab1143f6a1e76beda49ca6cde7a.tar.gz bcm5719-llvm-de42c29a68bc4ab1143f6a1e76beda49ca6cde7a.zip |
[AMDGPU] New 64 bit div/rem expansion
Old expansion was 20 VGPRs, 78 SGPRs and ~380 instructions.
This expansion is 11 VGPRs, 12 SGPRs and ~120 instructions.
Passes OpenCL conformance test_integer_ops quick_[u]long_math
Differential Revision: https://reviews.llvm.org/D38607
llvm-svn: 315081
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/sdivrem64.ll | 80 | ||||
-rw-r--r-- | llvm/test/CodeGen/AMDGPU/udivrem64.ll | 78 |
2 files changed, 25 insertions, 133 deletions
diff --git a/llvm/test/CodeGen/AMDGPU/sdivrem64.ll b/llvm/test/CodeGen/AMDGPU/sdivrem64.ll index 5ad0d8efaed..d51eededd1c 100644 --- a/llvm/test/CodeGen/AMDGPU/sdivrem64.ll +++ b/llvm/test/CodeGen/AMDGPU/sdivrem64.ll @@ -36,40 +36,13 @@ ;EG: BFE_UINT ;EG: BFE_UINT -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN: s_bfe_u32 -; GCN-NOT: v_mad_f32 -; SI-NOT: v_lshr_b64 -; VI-NOT: v_lshrrev_b64 -; GCN: s_endpgm +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000, +;GCN: v_rcp_f32_e32 +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000 +;GCN: v_trunc_f32_e32 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000 +;GCN: s_endpgm define amdgpu_kernel void @s_test_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) { %result = sdiv i64 %x, %y store i64 %result, i64 addrspace(1)* %out @@ -110,39 +83,12 @@ define amdgpu_kernel void @s_test_sdiv(i64 addrspace(1)* %out, i64 %x, i64 %y) { ;EG: BFE_UINT ;EG: AND_INT {{.*}}, 1, -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN-NOT: v_mad_f32 -;SI-NOT: v_lshr_b64 -;VI-NOT: v_lshrrev_b64 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000, +;GCN: v_rcp_f32_e32 +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000 +;GCN: v_trunc_f32_e32 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000 ;GCN: s_endpgm define amdgpu_kernel void @s_test_srem(i64 addrspace(1)* %out, i64 %x, i64 %y) { %result = urem i64 %x, %y diff --git a/llvm/test/CodeGen/AMDGPU/udivrem64.ll b/llvm/test/CodeGen/AMDGPU/udivrem64.ll index bd297920d56..91c27b09b5f 100644 --- a/llvm/test/CodeGen/AMDGPU/udivrem64.ll +++ b/llvm/test/CodeGen/AMDGPU/udivrem64.ll @@ -36,39 +36,12 @@ ;EG: BFE_UINT ;EG: BFE_UINT -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN-NOT: v_mad_f32 -;SI-NOT: v_lshr_b64 -;VI-NOT: v_lshrrev_b64 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000, +;GCN: v_rcp_f32_e32 +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000 +;GCN: v_trunc_f32_e32 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000 ;GCN: s_endpgm define amdgpu_kernel void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) { %result = udiv i64 %x, %y @@ -110,39 +83,12 @@ define amdgpu_kernel void @test_udiv(i64 addrspace(1)* %out, i64 %x, i64 %y) { ;EG: BFE_UINT ;EG: AND_INT {{.*}}, 1, -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN: s_bfe_u32 -;GCN-NOT: v_mad_f32 -;SI-NOT: v_lshr_b64 -;VI-NOT: v_lshrrev_b64 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0x4f800000, +;GCN: v_rcp_f32_e32 +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x5f7ffffc +;GCN: v_mul_f32_e32 v{{[0-9]+}}, 0x2f800000 +;GCN: v_trunc_f32_e32 +;GCN: v_mac_f32_e32 v{{[0-9]+}}, 0xcf800000 ;GCN: s_endpgm define amdgpu_kernel void @test_urem(i64 addrspace(1)* %out, i64 %x, i64 %y) { %result = urem i64 %x, %y |