dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
15.06k stars 4.69k forks source link

Arm64/Sve: ConditionalSelect(LoadVector*NonFaultingSignExtend*) codegen #102904

Closed kunalspathak closed 1 month ago

kunalspathak commented 4 months ago

As pointed out in https://github.com/dotnet/runtime/pull/102903/files#diff-f10507b9e232d4e19690c6a45d1372a35b663df21d62d2fb5011e2d360aa4a4aR49-R59, the LoadVector*NonFaultingSignExtend* and LoadVector*NonFaultingZeroExtend* APIs do not have explicit mask argument, which means they can be technically wrapped in ConditionalSelect. But under the hood, the instruction has Pg/Z semantics to load the values in vector. As such, if targetReg == falseReg, it does not play well because the instruction will overwrite the contents of falseReg and we will not get the desired result.

kunalspathak commented 4 months ago

@dotnet/arm64-contrib

dotnet-policy-service[bot] commented 4 months ago

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics See info in area-owners.md if you want to be subscribed.

jeffhandley commented 2 months ago

@kunalspathak Should this be in scope for 9.0.0 or 10.0.0?

kunalspathak commented 2 months ago

@kunalspathak Should this be in scope for 9.0.0 or 10.0.0?

Lets keep it in 9.0.0 for now

kunalspathak commented 2 months ago

@a74nh @SwapnilGaikwad PTAL for .NET 9

a74nh commented 2 months ago

priority:2 for RC1 snap : Functionality issue