Skip to content

Commit 32c3355

Browse files
stephentoubericstj
andauthored
Fix downlevel build break in TensorPrimitives (#92269)
* Fix downlevel build break in TensorPrimitives * Make net6.0 Tensors use ns2.0 implementation * Add net6.0 and net7.0 to Tensors temporarily since those are shipping in 8.0 branch * Only build net6.0 and net7.0 Tensors when not in source-build --------- Co-authored-by: Eric StJohn <[email protected]>
1 parent e8c3052 commit 32c3355

File tree

4 files changed

+21
-13
lines changed

4 files changed

+21
-13
lines changed

src/libraries/System.Numerics.Tensors/ref/System.Numerics.Tensors.csproj

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum)</TargetFrameworks>
5+
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' != 'true'">$(TargetFrameworks);net7.0;net6.0</TargetFrameworks>
56
</PropertyGroup>
67

78
<ItemGroup>
89
<Compile Include="System.Numerics.Tensors.cs" />
910
</ItemGroup>
1011

11-
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
12+
<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))">
1213
<Compile Include="System.Numerics.Tensors.netcore.cs" />
1314
</ItemGroup>
1415

src/libraries/System.Numerics.Tensors/src/System.Numerics.Tensors.csproj

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
<PropertyGroup>
44
<TargetFrameworks>$(NetCoreAppCurrent);$(NetCoreAppPrevious);$(NetCoreAppMinimum);netstandard2.0;$(NetFrameworkMinimum)</TargetFrameworks>
5+
<TargetFrameworks Condition="'$(DotNetBuildFromSource)' != 'true'">$(TargetFrameworks);net7.0;net6.0</TargetFrameworks>
56
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
67
<IsPackable>true</IsPackable>
78
<PackageDescription>Provides support for operating over tensors.</PackageDescription>
@@ -16,11 +17,11 @@
1617
<Compile Include="System\ThrowHelper.cs" />
1718
</ItemGroup>
1819

19-
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' != '.NETCoreApp'">
20+
<ItemGroup Condition="!$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))">
2021
<Compile Include="System\Numerics\Tensors\TensorPrimitives.netstandard.cs" />
2122
</ItemGroup>
2223

23-
<ItemGroup Condition="'$(TargetFrameworkIdentifier)' == '.NETCoreApp'">
24+
<ItemGroup Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net7.0'))">
2425
<Compile Include="System\Numerics\Tensors\TensorPrimitives.netcore.cs" />
2526
</ItemGroup>
2627

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netcore.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1159,23 +1159,29 @@ public static float Invoke(Vector512<float> x)
11591159
public static float Invoke(float x) => -x;
11601160
public static Vector128<float> Invoke(Vector128<float> x) => -x;
11611161
public static Vector256<float> Invoke(Vector256<float> x) => -x;
1162+
#if NET8_0_OR_GREATER
11621163
public static Vector512<float> Invoke(Vector512<float> x) => -x;
1164+
#endif
11631165
}
11641166

11651167
private readonly struct AddMultiplyOperator : ITernaryOperator
11661168
{
11671169
public static float Invoke(float x, float y, float z) => (x + y) * z;
11681170
public static Vector128<float> Invoke(Vector128<float> x, Vector128<float> y, Vector128<float> z) => (x + y) * z;
11691171
public static Vector256<float> Invoke(Vector256<float> x, Vector256<float> y, Vector256<float> z) => (x + y) * z;
1172+
#if NET8_0_OR_GREATER
11701173
public static Vector512<float> Invoke(Vector512<float> x, Vector512<float> y, Vector512<float> z) => (x + y) * z;
1174+
#endif
11711175
}
11721176

11731177
private readonly struct MultiplyAddOperator : ITernaryOperator
11741178
{
11751179
public static float Invoke(float x, float y, float z) => (x * y) + z;
11761180
public static Vector128<float> Invoke(Vector128<float> x, Vector128<float> y, Vector128<float> z) => (x * y) + z;
11771181
public static Vector256<float> Invoke(Vector256<float> x, Vector256<float> y, Vector256<float> z) => (x * y) + z;
1182+
#if NET8_0_OR_GREATER
11781183
public static Vector512<float> Invoke(Vector512<float> x, Vector512<float> y, Vector512<float> z) => (x * y) + z;
1184+
#endif
11791185
}
11801186

11811187
private readonly struct LoadIdentity : IUnaryOperator

src/libraries/System.Numerics.Tensors/src/System/Numerics/Tensors/TensorPrimitives.netstandard.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ private static float CosineSimilarityCore(ReadOnlySpan<float> x, ReadOnlySpan<fl
6969

7070
private static float Aggregate<TLoad, TAggregate>(
7171
float identityValue, ReadOnlySpan<float> x, TLoad load = default, TAggregate aggregate = default)
72-
where TLoad : IUnaryOperator
73-
where TAggregate : IBinaryOperator
72+
where TLoad : struct, IUnaryOperator
73+
where TAggregate : struct, IBinaryOperator
7474
{
7575
// Initialize the result to the identity value
7676
float result = identityValue;
@@ -112,8 +112,8 @@ private static float Aggregate<TLoad, TAggregate>(
112112

113113
private static float Aggregate<TBinary, TAggregate>(
114114
float identityValue, ReadOnlySpan<float> x, ReadOnlySpan<float> y, TBinary binary = default, TAggregate aggregate = default)
115-
where TBinary : IBinaryOperator
116-
where TAggregate : IBinaryOperator
115+
where TBinary : struct, IBinaryOperator
116+
where TAggregate : struct, IBinaryOperator
117117
{
118118
// Initialize the result to the identity value
119119
float result = identityValue;
@@ -156,7 +156,7 @@ private static float Aggregate<TBinary, TAggregate>(
156156

157157
private static void InvokeSpanIntoSpan<TUnaryOperator>(
158158
ReadOnlySpan<float> x, Span<float> destination, TUnaryOperator op = default)
159-
where TUnaryOperator : IUnaryOperator
159+
where TUnaryOperator : struct, IUnaryOperator
160160
{
161161
if (x.Length > destination.Length)
162162
{
@@ -203,7 +203,7 @@ private static void InvokeSpanIntoSpan<TUnaryOperator>(
203203

204204
private static void InvokeSpanSpanIntoSpan<TBinaryOperator>(
205205
ReadOnlySpan<float> x, ReadOnlySpan<float> y, Span<float> destination, TBinaryOperator op = default)
206-
where TBinaryOperator : IBinaryOperator
206+
where TBinaryOperator : struct, IBinaryOperator
207207
{
208208
if (x.Length != y.Length)
209209
{
@@ -258,7 +258,7 @@ private static void InvokeSpanSpanIntoSpan<TBinaryOperator>(
258258

259259
private static void InvokeSpanScalarIntoSpan<TBinaryOperator>(
260260
ReadOnlySpan<float> x, float y, Span<float> destination, TBinaryOperator op = default)
261-
where TBinaryOperator : IBinaryOperator
261+
where TBinaryOperator : struct, IBinaryOperator
262262
{
263263
if (x.Length > destination.Length)
264264
{
@@ -309,7 +309,7 @@ private static void InvokeSpanScalarIntoSpan<TBinaryOperator>(
309309

310310
private static void InvokeSpanSpanSpanIntoSpan<TTernaryOperator>(
311311
ReadOnlySpan<float> x, ReadOnlySpan<float> y, ReadOnlySpan<float> z, Span<float> destination, TTernaryOperator op = default)
312-
where TTernaryOperator : ITernaryOperator
312+
where TTernaryOperator : struct, ITernaryOperator
313313
{
314314
if (x.Length != y.Length || x.Length != z.Length)
315315
{
@@ -369,7 +369,7 @@ private static void InvokeSpanSpanSpanIntoSpan<TTernaryOperator>(
369369

370370
private static void InvokeSpanSpanScalarIntoSpan<TTernaryOperator>(
371371
ReadOnlySpan<float> x, ReadOnlySpan<float> y, float z, Span<float> destination, TTernaryOperator op = default)
372-
where TTernaryOperator : ITernaryOperator
372+
where TTernaryOperator : struct, ITernaryOperator
373373
{
374374
if (x.Length != y.Length)
375375
{
@@ -430,7 +430,7 @@ private static void InvokeSpanSpanScalarIntoSpan<TTernaryOperator>(
430430

431431
private static void InvokeSpanScalarSpanIntoSpan<TTernaryOperator>(
432432
ReadOnlySpan<float> x, float y, ReadOnlySpan<float> z, Span<float> destination, TTernaryOperator op = default)
433-
where TTernaryOperator : ITernaryOperator
433+
where TTernaryOperator : struct, ITernaryOperator
434434
{
435435
if (x.Length != z.Length)
436436
{

0 commit comments

Comments
 (0)