Skip to content

Commit 11c6aa2

Browse files
committed
Ensure that embedded mask handling is covering the right scenarios
1 parent fa1b389 commit 11c6aa2

File tree

5 files changed

+168
-116
lines changed

5 files changed

+168
-116
lines changed

src/coreclr/jit/codegeninterface.h

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,8 @@ class CodeGenInterface
184184

185185
static unsigned instInputSize(instruction ins);
186186
static unsigned instKMaskBaseSize(instruction ins);
187+
188+
bool IsEmbeddedBroadcastEnabled(instruction ins, GenTree* op);
187189
#endif // TARGET_XARCH
188190
//-------------------------------------------------------------------------
189191
// Liveness-related fields & methods
@@ -825,10 +827,6 @@ class CodeGenInterface
825827

826828
virtual const char* siStackVarName(size_t offs, size_t size, unsigned reg, unsigned stkOffs) = 0;
827829
#endif // LATE_DISASM
828-
829-
#if defined(TARGET_XARCH)
830-
bool IsEmbeddedBroadcastEnabled(instruction ins, GenTree* op);
831-
#endif
832830
};
833831

834832
#if !defined(TARGET_LOONGARCH64) && !defined(TARGET_RISCV64)

src/coreclr/jit/hwintrinsic.h

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -557,6 +557,25 @@ struct HWIntrinsicInfo
557557
FloatComparisonMode comparison,
558558
var_types simdBaseType,
559559
unsigned simdSize);
560+
561+
//------------------------------------------------------------------------
562+
// genIsTableDrivenHWIntrinsic:
563+
//
564+
// Arguments:
565+
// category - category of a HW intrinsic
566+
//
567+
// Return Value:
568+
// returns true if this category can be table-driven in CodeGen
569+
//
570+
static bool genIsTableDrivenHWIntrinsic(NamedIntrinsic intrinsicId, HWIntrinsicCategory category)
571+
{
572+
// TODO - make more categories to the table-driven framework
573+
// HW_Category_Helper and HW_Flag_SpecialCodeGen usually need manual codegen
574+
const bool tableDrivenCategory =
575+
(category != HW_Category_Special) && (category != HW_Category_Scalar) && (category != HW_Category_Helper);
576+
const bool tableDrivenFlag = !HWIntrinsicInfo::HasSpecialCodegen(intrinsicId);
577+
return tableDrivenCategory && tableDrivenFlag;
578+
}
560579
#endif
561580

562581
// Member lookup

src/coreclr/jit/hwintrinsiccodegenxarch.cpp

Lines changed: 2 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -62,25 +62,6 @@ static void assertIsContainableHWIntrinsicOp(Lowering* lowering,
6262
#endif // DEBUG
6363
}
6464

65-
//------------------------------------------------------------------------
66-
// genIsTableDrivenHWIntrinsic:
67-
//
68-
// Arguments:
69-
// category - category of a HW intrinsic
70-
//
71-
// Return Value:
72-
// returns true if this category can be table-driven in CodeGen
73-
//
74-
static bool genIsTableDrivenHWIntrinsic(NamedIntrinsic intrinsicId, HWIntrinsicCategory category)
75-
{
76-
// TODO - make more categories to the table-driven framework
77-
// HW_Category_Helper and HW_Flag_SpecialCodeGen usually need manual codegen
78-
const bool tableDrivenCategory =
79-
(category != HW_Category_Special) && (category != HW_Category_Scalar) && (category != HW_Category_Helper);
80-
const bool tableDrivenFlag = !HWIntrinsicInfo::HasSpecialCodegen(intrinsicId);
81-
return tableDrivenCategory && tableDrivenFlag;
82-
}
83-
8465
//------------------------------------------------------------------------
8566
// AddEmbRoundingMode: Adds the embedded rounding mode to the insOpts
8667
//
@@ -408,7 +389,7 @@ void CodeGen::genHWIntrinsic(GenTreeHWIntrinsic* node)
408389
assert(HWIntrinsicInfo::RequiresCodegen(intrinsicId));
409390
assert(!HWIntrinsicInfo::NeedsNormalizeSmallTypeToInt(intrinsicId) || !varTypeIsSmall(node->GetSimdBaseType()));
410391

411-
bool isTableDriven = genIsTableDrivenHWIntrinsic(intrinsicId, category);
392+
bool isTableDriven = HWIntrinsicInfo::genIsTableDrivenHWIntrinsic(intrinsicId, category);
412393
insOpts instOptions = INS_OPTS_NONE;
413394

414395
if (GetEmitter()->UseEvexEncoding())
@@ -1693,7 +1674,7 @@ void CodeGen::genNonTableDrivenHWIntrinsicsJumpTableFallback(GenTreeHWIntrinsic*
16931674

16941675
assert(HWIntrinsicInfo::IsEmbRoundingCompatible(intrinsicId));
16951676
assert(!lastOp->isContained());
1696-
assert(!genIsTableDrivenHWIntrinsic(intrinsicId, category));
1677+
assert(!HWIntrinsicInfo::genIsTableDrivenHWIntrinsic(intrinsicId, category));
16971678

16981679
var_types baseType = node->GetSimdBaseType();
16991680
emitAttr attr = emitActualTypeSize(Compiler::getSIMDTypeForSize(node->GetSimdSize()));

0 commit comments

Comments
 (0)