Skip to content

Commit

Permalink
[InstCombine] Extra null-checking on TFE/LWE support
Browse files Browse the repository at this point in the history
- If that operand is not ConstantInt, skip enabling TFE/LWE.

Differential Revision: https://reviews.llvm.org/D57539

llvm-svn: 352904
  • Loading branch information
darkbuck committed Feb 1, 2019
1 parent 6e75c7e commit 8b323f5
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 4 deletions.
Expand Up @@ -975,12 +975,11 @@ Value *InstCombiner::simplifyAMDGCNMemoryIntrinsicDemanded(IntrinsicInst *II,
return nullptr;

// Need to change to new instruction format
ConstantInt *TFC = nullptr;
bool TFELWEEnabled = false;
if (TFCIdx > 0) {
TFC = dyn_cast<ConstantInt>(II->getArgOperand(TFCIdx));
TFELWEEnabled = TFC->getZExtValue() & 0x1 // TFE
|| TFC->getZExtValue() & 0x2; // LWE
if (ConstantInt *TFC = dyn_cast<ConstantInt>(II->getArgOperand(TFCIdx)))
TFELWEEnabled = TFC->getZExtValue() & 0x1 // TFE
|| TFC->getZExtValue() & 0x2; // LWE
}

if (TFELWEEnabled)
Expand Down
Expand Up @@ -2395,7 +2395,14 @@ define amdgpu_ps float @extract_elt0_image_getresinfo_1d_v4f32_i32(i32 %mip, <8
ret float %elt0
}

; Verify that we don't creash on non-constant operand.
define protected <4 x half> @__llvm_amdgcn_image_sample_d_1darray_v4f16_f32_f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1 zeroext, i32, i32) local_unnamed_addr {
%tmp = tail call <4 x half> @llvm.amdgcn.image.sample.d.1darray.v4f16.f32.f32(i32 %0, float %1, float %2, float %3, float %4, <8 x i32> %5, <4 x i32> %6, i1 zeroext %7, i32 %8, i32 %9) #1
ret <4 x half> %tmp
}

declare <4 x float> @llvm.amdgcn.image.getresinfo.1d.v4f32.i32(i32, i32, <8 x i32>, i32, i32) #1
declare <4 x half> @llvm.amdgcn.image.sample.d.1darray.v4f16.f32.f32(i32, float, float, float, float, <8 x i32>, <4 x i32>, i1, i32, i32)

attributes #0 = { nounwind }
attributes #1 = { nounwind readonly }
Expand Down

0 comments on commit 8b323f5

Please sign in to comment.