Skip to content

Commit f728167

Browse files
krystian-andrzejewskiigcbot
authored andcommitted
Fix handling saturation patterns
1 parent 4bff40d commit f728167

File tree

2 files changed

+31
-4
lines changed

2 files changed

+31
-4
lines changed

IGC/Compiler/CISACodeGen/PatternMatchPass.cpp

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3219,6 +3219,19 @@ namespace IGC
32193219
}
32203220
};
32213221

3222+
// dp4a with modifiers
3223+
struct Dp4aSatPattern : Pattern
3224+
{
3225+
GenIntrinsicInst* inst;
3226+
virtual void Emit(EmitPass* pass, const DstModifier& modifier)
3227+
{
3228+
DstModifier mod = modifier;
3229+
mod.sat = true;
3230+
pass->emitDP4A(inst, nullptr, mod);
3231+
}
3232+
};
3233+
3234+
32223235
bool match = false;
32233236
llvm::Value* source = nullptr;
32243237
bool isUnsigned = false;
@@ -3236,6 +3249,13 @@ namespace IGC
32363249
binaryOpInst && (binaryOpInst->getOpcode() == llvm::BinaryOperator::BinaryOps::Add) && isUnsigned)
32373250
{
32383251
match = true;
3252+
3253+
uint numSources = GetNbSources(*sourceInst);
3254+
for (uint i = 0; i < numSources; i++)
3255+
{
3256+
MarkAsSource(sourceInst->getOperand(i));
3257+
}
3258+
32393259
UAddPattern* uAddPattern = new (m_allocator) UAddPattern();
32403260
uAddPattern->inst = binaryOpInst;
32413261
AddPattern(uAddPattern);
@@ -3264,9 +3284,16 @@ namespace IGC
32643284
genIsaInst->getIntrinsicID() == llvm::GenISAIntrinsic::ID::GenISA_dp4a_us))
32653285
{
32663286
match = true;
3267-
SatPattern* satPattern = new (m_allocator) SatPattern();
3268-
satPattern->pattern = Match(*sourceInst);
3269-
AddPattern(satPattern);
3287+
3288+
uint numSources = GetNbSources(*sourceInst);
3289+
for (uint i = 0; i < numSources; i++)
3290+
{
3291+
MarkAsSource(sourceInst->getOperand(i));
3292+
}
3293+
3294+
Dp4aSatPattern* dp4aSatPattern = new (m_allocator) Dp4aSatPattern();
3295+
dp4aSatPattern->inst = genIsaInst;
3296+
AddPattern(dp4aSatPattern);
32703297
}
32713298
else
32723299
{

IGC/Compiler/CISACodeGen/opCode.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ DECLARE_OPCODE(SRem, Instruction, llvm_srem, true, false, false, false, false, f
116116
DECLARE_OPCODE(URem, Instruction, llvm_urem, true, false, false, false, false, false, false)
117117
DECLARE_OPCODE(SExt, Instruction, llvm_sext, true, true, false, false, false, false, false)
118118
DECLARE_OPCODE(ZExt, Instruction, llvm_zext, false, true, false, false, false, false, false)
119-
DECLARE_OPCODE(Trunc, Instruction, llvm_trunc, true, false, false, false, false, false, false)
119+
DECLARE_OPCODE(Trunc, Instruction, llvm_trunc, true, true, false, false, false, false, false)
120120
DECLARE_OPCODE(FPTrunc, Instruction, llvm_fptrunc, true, false, false, false, false, false, false)
121121
DECLARE_OPCODE(GenISA_ftof_rte, GenISAIntrinsic, llvm_fptrunc_rte, true, false, false, false, false, false, false)
122122
DECLARE_OPCODE(GenISA_ftof_rtz, GenISAIntrinsic, llvm_fptrunc_rtz, true, false, false, false, false, false, false)

0 commit comments

Comments
 (0)