Skip to content

Commit da757a1

Browse files
authored
ARM64-SVE: Avoid containing non-embedded conditional select #105719 (#105812)
1 parent dbdfabf commit da757a1

File tree

4 files changed

+90
-5
lines changed

4 files changed

+90
-5
lines changed

eng/pipelines/coreclr/jitstress-isas-sve.yml

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,15 @@ pr:
88
- main
99
paths:
1010
include:
11+
- src/coreclr/jit/codegenarmarch.cpp
12+
- src/coreclr/jit/emitarm64sve.cpp
13+
- src/coreclr/jit/emitfmtsarm64sve.h
14+
- src/coreclr/jit/hwintrinsicarm64.cpp
1115
- src/coreclr/jit/hwintrinsiccodegenarm64.cpp
1216
- src/coreclr/jit/hwintrinsiclistarm64sve.h
13-
- src/coreclr/jit/hwintrinsicarm64.cpp
1417
- src/coreclr/jit/instrsarm64sve.h
15-
- src/coreclr/jit/emitarm64sve.cpp
16-
- src/coreclr/jit/emitfmtsarm64sve.h
18+
- src/coreclr/jit/lowerarmarch.cpp
19+
- src/coreclr/jit/lsraarmarch.cpp
1720
- src/coreclr/jit/lsraarm64.cpp
1821

1922
schedules:

src/coreclr/jit/lowerarmarch.cpp

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4050,7 +4050,7 @@ GenTree* Lowering::LowerHWIntrinsicCndSel(GenTreeHWIntrinsic* cndSelNode)
40504050
GenTree* nestedOp2 = nestedCndSel->Op(2);
40514051
GenTree* nestedOp3 = nestedCndSel->Op(3);
40524052

4053-
JITDUMP("lowering ConditionalSelect HWIntrinisic (before):\n");
4053+
JITDUMP("lowering nested ConditionalSelect HWIntrinisic (before):\n");
40544054
DISPTREERANGE(BlockRange(), cndSelNode);
40554055
JITDUMP("\n");
40564056

@@ -4072,13 +4072,55 @@ GenTree* Lowering::LowerHWIntrinsicCndSel(GenTreeHWIntrinsic* cndSelNode)
40724072
BlockRange().Remove(nestedOp1);
40734073
BlockRange().Remove(nestedCndSel);
40744074

4075-
JITDUMP("lowering ConditionalSelect HWIntrinisic (after):\n");
4075+
JITDUMP("lowering nested ConditionalSelect HWIntrinisic (after):\n");
40764076
DISPTREERANGE(BlockRange(), cndSelNode);
40774077
JITDUMP("\n");
40784078

40794079
return cndSelNode;
40804080
}
40814081
}
4082+
else if (op1->IsMaskAllBitsSet())
4083+
{
4084+
// Any case where op2 is not an embedded HWIntrinsic
4085+
if (!op2->OperIsHWIntrinsic() ||
4086+
!HWIntrinsicInfo::IsEmbeddedMaskedOperation(op2->AsHWIntrinsic()->GetHWIntrinsicId()))
4087+
{
4088+
JITDUMP("lowering ConditionalSelect HWIntrinisic (before):\n");
4089+
DISPTREERANGE(BlockRange(), cndSelNode);
4090+
JITDUMP("\n");
4091+
4092+
// Transform
4093+
// CndSel(AllTrue, op2, op3) to
4094+
// op2
4095+
4096+
LIR::Use use;
4097+
if (BlockRange().TryGetUse(cndSelNode, &use))
4098+
{
4099+
use.ReplaceWith(op2);
4100+
}
4101+
else
4102+
{
4103+
op2->SetUnusedValue();
4104+
}
4105+
4106+
if (op3->IsMaskZero())
4107+
{
4108+
BlockRange().Remove(op3);
4109+
}
4110+
else
4111+
{
4112+
op3->SetUnusedValue();
4113+
}
4114+
op1->SetUnusedValue();
4115+
BlockRange().Remove(cndSelNode);
4116+
4117+
JITDUMP("lowering ConditionalSelect HWIntrinisic (after):\n");
4118+
DISPTREERANGE(BlockRange(), op2);
4119+
JITDUMP("\n");
4120+
4121+
return op2;
4122+
}
4123+
}
40824124

40834125
ContainCheckHWIntrinsic(cndSelNode);
40844126
return cndSelNode->gtNext;
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
// Licensed to the .NET Foundation under one or more agreements.
2+
// The .NET Foundation licenses this file to you under the MIT license.
3+
4+
using Xunit;
5+
using System;
6+
using System.Runtime.CompilerServices;
7+
using System.Numerics;
8+
using System.Runtime.Intrinsics;
9+
using System.Runtime.Intrinsics.Arm;
10+
11+
public class Runtime_105723
12+
{
13+
[Fact]
14+
public static void TestEntryPoint()
15+
{
16+
if (Sve.IsSupported)
17+
{
18+
var vr3 = Sve.CreateTrueMaskInt32();
19+
var vr4 = Vector.Create<int>(1);
20+
var vr5 = Vector128.CreateScalar(0).AsVector();
21+
Vector<int> vr6 = Sve.ConditionalSelect(vr3, vr4, vr5);
22+
Consume(vr6);
23+
}
24+
}
25+
26+
[MethodImpl(MethodImplOptions.NoInlining)]
27+
private static void Consume(Vector<int> v)
28+
{
29+
;
30+
}
31+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
<PropertyGroup>
3+
<Optimize>True</Optimize>
4+
<NoWarn>$(NoWarn);SYSLIB5003</NoWarn>
5+
</PropertyGroup>
6+
<ItemGroup>
7+
<Compile Include="$(MSBuildProjectName).cs" />
8+
</ItemGroup>
9+
</Project>

0 commit comments

Comments
 (0)