dotnet / runtime

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

windows/x86: Debug vs. Release - Avx512F.VL.TernaryLogic returns different result #107890

Open kunalspathak opened 3 days ago

kunalspathak commented 3 days ago
// Generated by Fuzzlyn v2.4 on 2024-09-16 20:20:33
// Run on X86 Windows
// Seed: 12316650515148951253-vectort,vector128,vector256,x86aes,x86avx,x86avx2,x86avx512bw,x86avx512bwvl,x86avx512cd,x86avx512cdvl,x86avx512dq,x86avx512dqvl,x86avx512f,x86avx512fvl,x86bmi1,x86bmi2,x86fma,x86lzcnt,x86pclmulqdq,x86popcnt,x86sse,x86sse2,x86sse3,x86sse41,x86sse42,x86ssse3,x86x86base
// Reduced from 57.5 KiB to 0.5 KiB in 00:01:21
// Debug: Outputs <1065353216, 1065353216, 1065353216, 1065353216>
// Release: Outputs <0, 0, 0, 0>
using System;
using System.Numerics;
using System.Runtime.Intrinsics;
using System.Runtime.Intrinsics.X86;

public class Program
{
    public static void Main()
    {
        var vr7 = Vector128.Create<float>(0);
        var vr8 = Vector128.Create<float>(0);
        var vr9 = Sse.CompareNotGreaterThan(vr7, vr8);
        var vr10 = Vector128.Create<float>(1);
        var vr11 = Vector128.Create<float>(0);
        var vr12 = Avx512F.VL.TernaryLogic(vr9, vr10, vr11, 202);
        System.Console.WriteLine(vr12.AsUInt32());
    }
}

Found while running Fuzzlyn for https://github.com/dotnet/runtime/pull/107882/

dotnet-policy-service[bot] commented 3 days ago

Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch See info in area-owners.md if you want to be subscribed.

kunalspathak commented 3 days ago

Release:


G_M31622_IG01:  ;; offset=0x0000
       sub      esp, 16
                        ;; size=3 bbWeight=1 PerfScore 0.25
G_M31622_IG02:  ;; offset=0x0003
       vxorps   xmm0, xmm0, xmm0
       vmovups  xmmword ptr [esp], xmm0
       mov      ecx, 0x8BFC024      ; System.Runtime.Intrinsics.Vector128`1[uint]
       call     CORINFO_HELP_NEWSFAST
       vxorps   xmm0, xmm0, xmm0
       vmovups  xmm1, xmmword ptr [esp]
       vcmpps   k1, xmm0, xmm1, 14
       vblendmps xmm0 {k1}, xmm1, xmmword ptr [@RWD00]
       vmovups  xmmword ptr [eax+0x04], xmm0
       mov      ecx, eax
       call     [System.Console:WriteLine(System.Object)]
                        ;; size=58 bbWeight=1 PerfScore 16.17
G_M31622_IG03:  ;; offset=0x003D
       add      esp, 16
       ret      
                        ;; size=4 bbWeight=1 PerfScore 1.25
RWD00   dq  3F8000003F800000h, 3F8000003F800000h

Debug:


G_M31622_IG01:  ;; offset=0x0000
       push     ebp
       mov      ebp, esp
       sub      esp, 208
       vxorps   xmm4, xmm4, xmm4
       vmovdqu32 zmmword ptr [ebp-0x60], zmm4
       vmovdqu  xmmword ptr [ebp-0x20], xmm4
       vmovdqu  xmmword ptr [ebp-0x10], xmm4
                        ;; size=33 bbWeight=1 PerfScore 7.83
G_M31622_IG02:  ;; offset=0x0021
       cmp      dword ptr [0x0961AC08], 0
       je       SHORT G_M31622_IG04
                        ;; size=9 bbWeight=1 PerfScore 4.00
G_M31622_IG03:  ;; offset=0x002A
       call     CORINFO_HELP_DBG_IS_JUST_MY_CODE
                        ;; size=5 bbWeight=0.50 PerfScore 0.50
G_M31622_IG04:  ;; offset=0x002F
       nop      
       vxorps   xmm0, xmm0, xmm0
       vmovups  xmmword ptr [ebp-0x70], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0x70]
       vmovups  xmmword ptr [ebp-0x10], xmm0
       vxorps   xmm0, xmm0, xmm0
       vmovups  xmmword ptr [ebp-0x80], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0x80]
       vmovups  xmmword ptr [ebp-0x20], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0x10]
       vcmpps   xmm0, xmm0, xmmword ptr [ebp-0x20], 10
       vmovups  xmmword ptr [ebp-0x90], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0x90]
       vmovups  xmmword ptr [ebp-0x30], xmm0
       vmovups  xmm0, xmmword ptr [@RWD00]
       vmovups  xmmword ptr [ebp-0xA0], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0xA0]
       vmovups  xmmword ptr [ebp-0x40], xmm0
       vxorps   xmm0, xmm0, xmm0
       vmovups  xmmword ptr [ebp-0xB0], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0xB0]
       vmovups  xmmword ptr [ebp-0x50], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0x30]
       vmovups  xmm1, xmmword ptr [ebp-0x40]
       vpternlogd xmm0, xmm1, xmmword ptr [ebp-0x50], -54
       vmovups  xmmword ptr [ebp-0xC0], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0xC0]
       vmovups  xmmword ptr [ebp-0x60], xmm0
       vmovups  xmm0, xmmword ptr [ebp-0x60]
       vmovups  xmmword ptr [ebp-0xD0], xmm0
       lea      edx, [ebp-0xD0]
       mov      ecx, 0x944C024      ; System.Runtime.Intrinsics.Vector128`1[uint]
       call     CORINFO_HELP_BOX
       mov      ecx, eax
       call     [System.Console:WriteLine(System.Object)]
       nop      
       nop      
                        ;; size=203 bbWeight=1 PerfScore 57.75
G_M31622_IG05:  ;; offset=0x00FA
       mov      esp, ebp
       pop      ebp
       ret      
                        ;; size=4 bbWeight=1 PerfScore 1.75
RWD00   dq  3F8000003F800000h, 3F8000003F800000h
JulieLeeMSFT commented 1 day ago

@tannergooding, PTAL.