forked from OSchip/llvm-project
[AMDGPU] Check for num elts in SelectVOP3PMods
The rest of the code section assumes there are exactly two elements in the vector (Lo, Hi), so add the check before entering the section. Differential Revision: https://reviews.llvm.org/D133852
This commit is contained in:
parent
49e7ef2c09
commit
abd927e5a8
|
@ -2704,7 +2704,7 @@ bool AMDGPUDAGToDAGISel::SelectVOP3PMods(SDValue In, SDValue &Src,
|
|||
Src = Src.getOperand(0);
|
||||
}
|
||||
|
||||
if (Src.getOpcode() == ISD::BUILD_VECTOR &&
|
||||
if (Src.getOpcode() == ISD::BUILD_VECTOR && Src.getNumOperands() == 2 &&
|
||||
(!IsDOT || !Subtarget->hasDOTOpSelHazard())) {
|
||||
unsigned VecMods = Mods;
|
||||
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
; RUN: llc -march=amdgcn -mcpu=gfx1100 -mattr=-wavefrontsize32,+wavefrontsize64 -verify-machineinstrs < %s | FileCheck %s
|
||||
|
||||
declare <4 x float> @llvm.amdgcn.wmma.f32.16x16x16.f16(<16 x half>, <16 x half>, <4 x float>)
|
||||
|
||||
; Make sure we don't crash when trying to select modifiers in SelectVOP3PMods.
|
||||
|
||||
define amdgpu_cs void @xyz () {
|
||||
; CHECK-LABEL: xyz:
|
||||
; CHECK: v_wmma_f32_16x16x16_f16 v[0:3], v[4:11], v[4:11], v[0:3]
|
||||
|
||||
.entry:
|
||||
br label %loop
|
||||
loop:
|
||||
%ld = load <8 x float>, <8 x float> addrspace(5)* null, align 32
|
||||
%in_shuffle = shufflevector <8 x float> %ld, <8 x float> undef, <4 x i32> <i32 0, i32 1, i32 2, i32 3>
|
||||
%wmma = call <4 x float> @llvm.amdgcn.wmma.f32.16x16x16.f16(<16 x half> undef, <16 x half> undef, <4 x float> %in_shuffle)
|
||||
%out_shuffle = shufflevector <4 x float> %wmma, <4 x float> undef, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 undef, i32 undef, i32 undef, i32 undef>
|
||||
store <8 x float> %out_shuffle, <8 x float> addrspace(5)* null, align 32
|
||||
br i1 false, label %.exit, label %loop
|
||||
.exit:
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue