Skip to content

Commit

Permalink
JIT: disable scev analysis for non-integral types (#107618)
Browse files Browse the repository at this point in the history
We could conceivably handle some cases of double and vector evolution, or perhaps
invariant subtrees of these types in integral scevs, but we're not set up to do this today.

Fixes #107543.
  • Loading branch information
AndyAyersMS authored Sep 10, 2024
1 parent 699bf83 commit 636c863
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 0 deletions.
5 changes: 5 additions & 0 deletions src/coreclr/jit/scev.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -515,6 +515,11 @@ Scev* ScalarEvolutionContext::CreateScevForConstant(GenTreeIntConCommon* tree)
//
Scev* ScalarEvolutionContext::AnalyzeNew(BasicBlock* block, GenTree* tree, int depth)
{
if (!varTypeIsIntegralOrI(tree->TypeGet()))
{
return nullptr;
}

switch (tree->OperGet())
{
case GT_CNS_INT:
Expand Down
31 changes: 31 additions & 0 deletions src/tests/JIT/Regression/JitBlue/Runtime_107543/Runtime_107543.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

// Generated by Fuzzlyn v2.4 on 2024-09-08 14:58:55
// Run on X64 Windows
// Seed: 9273539092987075617-vectort,vector128,vector256,x86aes,x86avx,x86avx2,x86avx512bw,x86avx512bwvl,x86avx512cd,x86avx512cdvl,x86avx512dq,x86avx512dqvl,x86avx512f,x86avx512fvl,x86avx512fx64,x86bmi1,x86bmi1x64,x86bmi2,x86bmi2x64,x86fma,x86lzcnt,x86lzcntx64,x86pclmulqdq,x86popcnt,x86popcntx64,x86sse,x86ssex64,x86sse2,x86sse2x64,x86sse3,x86sse41,x86sse41x64,x86sse42,x86sse42x64,x86ssse3,x86x86base
// Reduced from 133.3 KiB to 1.6 KiB in 00:01:44
// Hits JIT assert in Release:
// Assertion failed '(unop->Type == TYP_LONG) && (op1->Type == TYP_INT)' in 'Program:Main(Fuzzlyn.ExecutionServer.IRuntime)' during 'Optimize Induction Variables' (IL size 100; hash 0xade6b36b; FullOpts)
//
// File: D:\a\_work\1\s\src\coreclr\jit\scev.cpp Line: 1094
//
// Further simplified by hand

using System;
using Xunit;

public class Runtime_107543
{
[Fact]
public static int Problem()
{
double d = 0;
long i = 0;
for (int v = 0; v < 100; v++)
{
i += (long)d++;
}
return (int)(i - 4850);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<Optimize>True</Optimize>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(MSBuildProjectName).cs" />
</ItemGroup>
</Project>

0 comments on commit 636c863

Please sign in to comment.