Skip to content

Commit 78e840e

Browse files
authored
Extend Equals/StartsWith auto-vectorization for OrdinalIgnoreCase (#66095)
1 parent 0e8422d commit 78e840e

2 files changed

Lines changed: 283 additions & 120 deletions

File tree

src/coreclr/jit/compiler.h

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4413,17 +4413,37 @@ class Compiler
44134413
void impResetLeaveBlock(BasicBlock* block, unsigned jmpAddr);
44144414
GenTree* impTypeIsAssignable(GenTree* typeTo, GenTree* typeFrom);
44154415

4416+
// Mirrors StringComparison.cs
4417+
enum StringComparison
4418+
{
4419+
Ordinal = 4,
4420+
OrdinalIgnoreCase = 5
4421+
};
4422+
enum StringComparisonJoint
4423+
{
4424+
Eq, // (d1 == cns1) && (s2 == cns2)
4425+
Xor, // (d1 ^ cns1) | (s2 ^ cns2)
4426+
};
44164427
GenTree* impStringEqualsOrStartsWith(bool startsWith, CORINFO_SIG_INFO* sig, unsigned methodFlags);
44174428
GenTree* impSpanEqualsOrStartsWith(bool startsWith, CORINFO_SIG_INFO* sig, unsigned methodFlags);
4418-
GenTree* impExpandHalfConstEquals(GenTreeLclVar* data,
4419-
GenTree* lengthFld,
4420-
bool checkForNull,
4421-
bool startsWith,
4422-
WCHAR* cnsData,
4423-
int len,
4424-
int dataOffset);
4425-
GenTree* impExpandHalfConstEqualsSWAR(GenTreeLclVar* data, WCHAR* cns, int len, int dataOffset);
4426-
GenTree* impExpandHalfConstEqualsSIMD(GenTreeLclVar* data, WCHAR* cns, int len, int dataOffset);
4429+
GenTree* impExpandHalfConstEquals(GenTreeLclVar* data,
4430+
GenTree* lengthFld,
4431+
bool checkForNull,
4432+
bool startsWith,
4433+
WCHAR* cnsData,
4434+
int len,
4435+
int dataOffset,
4436+
StringComparison cmpMode);
4437+
GenTree* impCreateCompareInd(GenTreeLclVar* obj,
4438+
var_types type,
4439+
ssize_t offset,
4440+
ssize_t value,
4441+
StringComparison ignoreCase,
4442+
StringComparisonJoint joint = Eq);
4443+
GenTree* impExpandHalfConstEqualsSWAR(
4444+
GenTreeLclVar* data, WCHAR* cns, int len, int dataOffset, StringComparison cmpMode);
4445+
GenTree* impExpandHalfConstEqualsSIMD(
4446+
GenTreeLclVar* data, WCHAR* cns, int len, int dataOffset, StringComparison cmpMode);
44274447
GenTreeStrCon* impGetStrConFromSpan(GenTree* span);
44284448

44294449
GenTree* impIntrinsic(GenTree* newobjThis,

0 commit comments

Comments
 (0)