Skip to content

Commit 831ab58

Browse files
jgu222igcbot
authored andcommitted
Replace bf_cvt with mov inst
As BF is a new visa type, remove bf_cvt with mov inst.
1 parent 1fb0bd3 commit 831ab58

File tree

3 files changed

+16
-36
lines changed

3 files changed

+16
-36
lines changed

IGC/Compiler/CISACodeGen/CISABuilder.cpp

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -6820,22 +6820,6 @@ namespace IGC
68206820
addressOpnd, srcOpnd));
68216821
}
68226822

6823-
void CEncoder::bf_cvt(CVariable* dst, CVariable* src)
6824-
{
6825-
VISA_PredOpnd* predOpnd = GetFlagOperand(m_encoderState.m_flag);
6826-
VISA_VectorOpnd* dstOpnd = GetDestinationOperand(dst, m_encoderState.m_dstOperand);
6827-
VISA_VectorOpnd* srcOpnd0 = GetSourceOperand(src, m_encoderState.m_srcOperand[0]);
6828-
6829-
V(vKernel->AppendVISADataMovementInst(
6830-
ISA_BF_CVT,
6831-
predOpnd,
6832-
false,
6833-
GetAluEMask(dst),
6834-
visaExecSize(dst->IsUniform()
6835-
? m_encoderState.m_uniformSIMDSize : m_encoderState.m_simdSize),
6836-
dstOpnd,
6837-
srcOpnd0));
6838-
}
68396823

68406824
std::string CEncoder::GetVariableName(CVariable* var)
68416825
{

IGC/Compiler/CISACodeGen/CISABuilder.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -318,7 +318,6 @@ namespace IGC
318318
void dpas(CVariable* dst, CVariable* input, CVariable* weight, PrecisionType weight_precision,
319319
CVariable* actication, PrecisionType activation_precision, uint8_t systolicDepth,
320320
uint8_t repeatCount, bool IsDpasw);
321-
void bf_cvt(CVariable* dst, CVariable* src);
322321
void fcvt(CVariable* dst, CVariable* src);
323322
void Bfn(uint8_t booleanFuncCtrl, CVariable* dst, CVariable* src0, CVariable* src1, CVariable* src2);
324323
void QWGather(CVariable* dst, const ResourceDescriptor& resource, CVariable* offset, unsigned elementSize, unsigned numElems);

IGC/Compiler/CISACodeGen/EmitVISAPass.cpp

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -18661,31 +18661,28 @@ void EmitPass::emitfcvt(llvm::GenIntrinsicInst* GII)
1866118661
if (FP_RM != ERoundingMode::ROUND_TO_ANY)
1866218662
SetRoundingMode_FP(FP_RM);
1866318663

18664-
// BF_CVT vISA instruction doesn't support immediate source
18665-
if (id == GenISAIntrinsic::GenISA_ftobf ||
18666-
id == GenISAIntrinsic::GenISA_bftof) {
18667-
if (src->IsImmediate()) {
18668-
CVariable* tempMov = m_currShader->GetNewVariable(
18669-
1, src->GetType(), EALIGN_GRF, true, src->getName());
18670-
m_encoder->Copy(tempMov, src);
18671-
m_encoder->Push();
18672-
src = tempMov;
18673-
}
18664+
// vISA instruction doesn't support immediate source of type BF
18665+
if (id == GenISAIntrinsic::GenISA_bftof && src->IsImmediate())
18666+
{
18667+
uint32_t imm32 = ((uint32_t)src->GetImmediateValue()) & 0xFFFF;
18668+
imm32 = imm32 << 16; // make it as float immediate
18669+
CVariable* fSrc = m_currShader->ImmToVariable((uint64_t)imm32, ISA_TYPE_F);
18670+
m_encoder->Copy(dst, fSrc);
18671+
m_encoder->Push();
18672+
return;
1867418673
}
1867518674

1867618675
if (id == GenISAIntrinsic::GenISA_ftobf ||
1867718676
id == GenISAIntrinsic::GenISA_bftof)
1867818677
{
18679-
/// Use UW as we are not exposing BF for now.
18680-
/// vISA will convert it to BF.
1868118678
CVariable* tDst = nullptr, * tSrc = nullptr;
1868218679
if (id == GenISAIntrinsic::GenISA_ftobf) {
18683-
tDst = m_currShader->GetNewAlias(dst, ISA_TYPE_UW, 0, 0);
18680+
tDst = m_currShader->GetNewAlias(dst, ISA_TYPE_BF, 0, 0);
1868418681
tSrc = src;
1868518682
}
1868618683
else if (id == GenISAIntrinsic::GenISA_bftof) {
1868718684
tDst = dst;
18688-
tSrc = m_currShader->GetNewAlias(src, ISA_TYPE_UW, 0, 0);
18685+
tSrc = m_currShader->GetNewAlias(src, ISA_TYPE_BF, 0, 0);
1868918686
}
1869018687
else {
1869118688
IGC_ASSERT_EXIT_MESSAGE(0, "Something wrong in cvt!");
@@ -18710,7 +18707,7 @@ void EmitPass::emitfcvt(llvm::GenIntrinsicInst* GII)
1871018707
uint32_t stride = (esize >= 8 ? 8 : esize);
1871118708
m_encoder->SetSrcRegion(0, stride, stride, 1);
1871218709
}
18713-
m_encoder->bf_cvt(tDst, tSrc);
18710+
m_encoder->Cast(tDst, tSrc);
1871418711
m_encoder->Push();
1871518712
}
1871618713
}
@@ -18721,7 +18718,7 @@ void EmitPass::emitfcvt(llvm::GenIntrinsicInst* GII)
1872118718
{
1872218719
m_encoder->SetDstSubReg(dstOff);
1872318720
m_encoder->SetSrcSubReg(0, srcOff);
18724-
m_encoder->bf_cvt(tDst, tSrc);
18721+
m_encoder->Cast(tDst, tSrc);
1872518722
m_encoder->Push();
1872618723

1872718724
dstOff += (isDstUniform ? 1 : nsimdsize);
@@ -18734,7 +18731,7 @@ void EmitPass::emitfcvt(llvm::GenIntrinsicInst* GII)
1873418731
CVariable* srcs[2];
1873518732
srcs[0] = src;
1873618733
srcs[1] = GetSymbol(GII->getOperand(1));
18737-
CVariable* tDst = m_currShader->GetNewAlias(dst, ISA_TYPE_HF, 0, 0);
18734+
CVariable* tDst = m_currShader->GetNewAlias(dst, ISA_TYPE_BF, 0, 0);
1873818735
SmallVector<uint32_t, 16> insts;
1873918736
getAllExecsize(insts, nelts);
1874018737
for (int e = 0; e < 2; ++e)
@@ -18759,7 +18756,7 @@ void EmitPass::emitfcvt(llvm::GenIntrinsicInst* GII)
1875918756
uint32_t stride = (esize >= 8 ? 8 : esize);
1876018757
m_encoder->SetSrcRegion(0, stride, stride, 1);
1876118758
}
18762-
m_encoder->bf_cvt(tDst, tSrc);
18759+
m_encoder->Cast(tDst, tSrc);
1876318760
m_encoder->Push();
1876418761
}
1876518762
}
@@ -18771,7 +18768,7 @@ void EmitPass::emitfcvt(llvm::GenIntrinsicInst* GII)
1877118768
m_encoder->SetDstSubReg(2 * dstOff + e);
1877218769
m_encoder->SetDstRegion(2);
1877318770
m_encoder->SetSrcSubReg(0, srcOff);
18774-
m_encoder->bf_cvt(tDst, tSrc);
18771+
m_encoder->Cast(tDst, tSrc);
1877518772
m_encoder->Push();
1877618773

1877718774
dstOff += (isDstUniform ? 1 : nsimdsize);

0 commit comments

Comments
 (0)