Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/dotnet/runtime.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEgor Bogatov <egorbo@gmail.com>2022-11-11 19:25:34 +0300
committerGitHub <noreply@github.com>2022-11-11 19:25:34 +0300
commit0eb7d717c47951f21e5e8bc08a5a601b857abe43 (patch)
tree7f75ab451daf12165feca3d5563762dd26b2eb01
parent803fd02979715a632c9d67b13c3218977dd3f5a9 (diff)
Fix bug in String.Equals unrolling for certain single-char strings (#78190)
Co-authored-by: SingleAccretion <62474226+SingleAccretion@users.noreply.github.com>
-rw-r--r--src/coreclr/jit/importervectorization.cpp2
-rw-r--r--src/tests/JIT/opt/Vectorization/StringEquals.cs14
-rw-r--r--src/tests/JIT/opt/Vectorization/UnrollEqualsStartsWIth.cs8
3 files changed, 21 insertions, 3 deletions
diff --git a/src/coreclr/jit/importervectorization.cpp b/src/coreclr/jit/importervectorization.cpp
index c627ac6592e..5db9251e146 100644
--- a/src/coreclr/jit/importervectorization.cpp
+++ b/src/coreclr/jit/importervectorization.cpp
@@ -380,7 +380,7 @@ GenTree* Compiler::impExpandHalfConstEqualsSWAR(
// [ ch1 ]
// [value]
//
- return impCreateCompareInd(data, TYP_SHORT, dataOffset, cns[0], cmpMode);
+ return impCreateCompareInd(data, TYP_USHORT, dataOffset, cns[0], cmpMode);
}
if (len == 2)
{
diff --git a/src/tests/JIT/opt/Vectorization/StringEquals.cs b/src/tests/JIT/opt/Vectorization/StringEquals.cs
index d5c80c0e411..86739946fa8 100644
--- a/src/tests/JIT/opt/Vectorization/StringEquals.cs
+++ b/src/tests/JIT/opt/Vectorization/StringEquals.cs
@@ -22,7 +22,7 @@ public class StringEquals
}
Console.WriteLine(testCount);
- return testCount == 25920 ? 100 : 0;
+ return testCount == 27888 ? 100 : 0;
}
}
@@ -195,10 +195,22 @@ public static class Tests
[MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_157(string s) => ValidateEquals(s == "2ж1311a23b2212aЙ21Й11жb3233bb3a1", s, "2ж1311a23b2212aЙ21Й11жb3233bb3a1");
[MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_158(string s) => ValidateEquals(s == "01Й11113ь3Й32a3ьЙЙ3Й32b2ab221310", s, "01Й11113ь3Й32a3ьЙЙ3Й32b2ab221310");
[MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_159(string s) => ValidateEquals(s == "a120213b11211\0223223312ьь1Й3222Й", s, "a120213b11211\0223223312ьь1Й3222Й");
+ [MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_160(string s) => ValidateEquals(s == "\u9244", s, "\u9244");
+ [MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_161(string s) => ValidateEquals(s == "\u9244\u9244", s, "\u9244\u9244");
+ [MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_162(string s) => ValidateEquals(s == "\u9244\u9244\u9244", s, "\u9244\u9244\u9244");
+ [MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_163(string s) => ValidateEquals(s == "\uFFFF", s, "\uFFFF");
+ [MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_164(string s) => ValidateEquals(s == "\uFFFF\uFFFF", s, "\uFFFF\uFFFF");
+ [MethodImpl(MethodImplOptions.NoInlining)] public static void Equals_165(string s) => ValidateEquals(s == "\uFFFF\uFFFF\uFFFF", s, "\uFFFF\uFFFF\uFFFF");
public static readonly string[] s_TestData =
{
null,
+ "\u9244",
+ "\u9244\u9244",
+ "\u9244\u9244\u9244",
+ "\uFFFF",
+ "\uFFFF\uFFFF",
+ "\uFFFF\uFFFF\uFFFF",
"",
"\0",
"a",
diff --git a/src/tests/JIT/opt/Vectorization/UnrollEqualsStartsWIth.cs b/src/tests/JIT/opt/Vectorization/UnrollEqualsStartsWIth.cs
index d50deb26def..f81b96c4eaa 100644
--- a/src/tests/JIT/opt/Vectorization/UnrollEqualsStartsWIth.cs
+++ b/src/tests/JIT/opt/Vectorization/UnrollEqualsStartsWIth.cs
@@ -18,7 +18,7 @@ public class UnrollEqualsStartsWIth
int testCount = 0;
foreach (var testType in testTypes)
testCount += RunTests(testType);
- return testCount == 113652 ? 100 : 0;
+ return testCount == 127512 ? 100 : 0;
}
public static int RunTests(Type type)
@@ -37,6 +37,12 @@ public class UnrollEqualsStartsWIth
string[] testData =
{
+ "\u9244",
+ "\u9244\u9244",
+ "\u9244\u9244\u9244",
+ "\uFFFF",
+ "\uFFFF\uFFFF",
+ "\uFFFF\uFFFF\uFFFF",
"",
string.Empty,
"a",