[PATCH] R600: Fix nonsensical implementation of computeKnownBits for BFE
Tom Stellard
tom at stellard.net
Thu Oct 16 06:40:08 PDT 2014
On Wed, Oct 15, 2014 at 07:43:48PM +0000, Matt Arsenault wrote:
> This was resulting in invalid simplifications of sdiv
>
LGTM.
-Tom
> http://reviews.llvm.org/D5804
>
> Files:
> lib/Target/R600/AMDGPUISelLowering.cpp
> test/CodeGen/R600/llvm.AMDGPU.bfe.i32.ll
> Index: lib/Target/R600/AMDGPUISelLowering.cpp
> ===================================================================
> --- lib/Target/R600/AMDGPUISelLowering.cpp
> +++ lib/Target/R600/AMDGPUISelLowering.cpp
> @@ -2394,11 +2394,7 @@
> return;
> }
>
> - // FIXME: This could do a lot more. If offset is 0, should be the same as
> - // sign_extend_inreg implementation, but that involves duplicating it.
> - if (Opc == AMDGPUISD::BFE_I32)
> - KnownOne = APInt::getHighBitsSet(BitWidth, BitWidth - Width);
> - else
> + if (Opc == AMDGPUISD::BFE_U32)
> KnownZero = APInt::getHighBitsSet(BitWidth, BitWidth - Width);
>
> break;
> Index: test/CodeGen/R600/llvm.AMDGPU.bfe.i32.ll
> ===================================================================
> --- test/CodeGen/R600/llvm.AMDGPU.bfe.i32.ll
> +++ test/CodeGen/R600/llvm.AMDGPU.bfe.i32.ll
> @@ -424,3 +424,18 @@
> store i32 %ashr, i32 addrspace(1)* %out, align 4
> ret void
> }
> +
> +; FUNC-LABEL: @simplify_demanded_bfe_sdiv
> +; SI: BUFFER_LOAD_DWORD [[LOAD:v[0-9]+]]
> +; SI: V_BFE_I32 [[BFE:v[0-9]+]], [[LOAD]], 1, 16
> +; SI: V_LSHRREV_B32_e32 [[TMP0:v[0-9]+]], 31, [[BFE]]
> +; SI: V_ADD_I32_e32 [[TMP1:v[0-9]+]], [[TMP0]], [[BFE]]
> +; SI: V_ASHRREV_I32_e32 [[TMP2:v[0-9]+]], 1, [[TMP1]]
> +; SI: BUFFER_STORE_DWORD [[TMP2]]
> +define void @simplify_demanded_bfe_sdiv(i32 addrspace(1)* %out, i32 addrspace(1)* %in) nounwind {
> + %src = load i32 addrspace(1)* %in, align 4
> + %bfe = call i32 @llvm.AMDGPU.bfe.i32(i32 %src, i32 1, i32 16) nounwind readnone
> + %div = sdiv i32 %bfe, 2
> + store i32 %div, i32 addrspace(1)* %out, align 4
> + ret void
> +}
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list