$ valgrind glxgears
==1012== Memcheck, a memory error detector
==1012== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1012== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==1012== Command: glxgears
==1012==
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
==1012== Conditional jump or move depends on uninitialised value(s)
==1012== at 0x8293EE3: optimizeExtInstr (lib/CodeGen/PeepholeOptimizer.cpp:460)
==1012== by 0x8293EE3: (anonymous namespace)::PeepholeOptimizer::runOnMachineFunction(llvm::MachineFunction&) (lib/CodeGen/PeepholeOptimizer.cpp:1734)
==1012== by 0x81DA007: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (lib/CodeGen/MachineFunctionPass.cpp:73)
==1012== by 0x8048345: llvm::FPPassManager::runOnFunction(llvm::Function&) (lib/IR/LegacyPassManager.cpp:1648)
==1012== by 0x8C4A3A9: RunPassOnSCC (lib/Analysis/CallGraphSCCPass.cpp:176)
==1012== by 0x8C4A3A9: RunAllPassesOnSCC (lib/Analysis/CallGraphSCCPass.cpp:441)
==1012== by 0x8C4A3A9: (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) (lib/Analysis/CallGraphSCCPass.cpp:497)
==1012== by 0x8048A6F: runOnModule (lib/IR/LegacyPassManager.cpp:1749)
==1012== by 0x8048A6F: llvm::legacy::PassManagerImpl::run(llvm::Module&) (lib/IR/LegacyPassManager.cpp:1862)
==1012== by 0x6A115C2: UnknownInlinedFun (ac_llvm_helper.cpp:212)
==1012== by 0x6A115C2: UnknownInlinedFun (si_shader_tgsi_setup.c:107)
==1012== by 0x6A115C2: si_compile_llvm (si_shader.c:5658)
==1012== by 0x6A182DC: si_get_shader_part.lto_priv.0 (si_shader.c:7303)
==1012== by 0x6A0EDC8: UnknownInlinedFun (si_shader.c:8133)
==1012== by 0x6A0EDC8: si_shader_create (si_shader.c:8312)
==1012== by 0x62B2E12: UnknownInlinedFun (si_state_shaders.c:2108)
==1012== by 0x62B2E12: si_shader_select_with_key.constprop.0 (si_state_shaders.c:2400)
==1012== by 0x6A6D2F0: si_shader_select (si_state_shaders.c:2419)
==1012== by 0x6A6F4E2: si_update_shaders (si_state_shaders.c:4021)
==1012== by 0x6A7E034: si_draw_vbo.lto_priv.0 (si_state_draw.c:2039)
==1012==
77 frames in 5.0 seconds = 15.377 FPS
==1012==
==1012== HEAP SUMMARY:
==1012== in use at exit: 557,673 bytes in 3,951 blocks
==1012== total heap usage: 115,963 allocs, 112,012 frees, 36,544,548 bytes allocated
==1012==
==1012== LEAK SUMMARY:
==1012== definitely lost: 640 bytes in 3 blocks
==1012== indirectly lost: 374,464 bytes in 1,612 blocks
==1012== possibly lost: 0 bytes in 0 blocks
==1012== still reachable: 182,569 bytes in 2,336 blocks
==1012== suppressed: 0 bytes in 0 blocks
==1012== Rerun with --leak-check=full to see details of leaked memory
==1012==
==1012== Use --track-origins=yes to see where uninitialised values come from
==1012== For lists of detected and suppressed errors, rerun with: -s
==1012== ERROR SUMMARY: 333 errors from 1 contexts (suppressed: 0 from 0)
More complex title, Factorio:
$ valgrind ./bin/x64/factorio
==539== Memcheck, a memory error detector
==539== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==539== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==539== Command: ./bin/x64/factorio
==539==
0.021 2019-10-25 13:32:37; Factorio 0.17.73 (build 47508, linux64, demo)
0.158 Operating system: Linux (Debian unstable)
0.165 Program arguments: "./bin/x64/factorio"
0.166 Read data path: /home/user/Downloads/factorio/data
0.167 Write data path: /home/user/Downloads/factorio [16289/122425MB]
0.167 Binaries path: /home/user/Downloads/factorio/bin
1.093 System info: [CPU: Intel(R) Core(TM) i7-4910MQ CPU @ 2.90GHz, 32 cores, RAM: 128868 MB]
1.101 Environment: DISPLAY=:0 WAYLAND_DISPLAY=<unset> DESKTOP_SESSION=lightdm-xsession XDG_SESSION_DESKTOP=lightdm-xsession XDG_CURRENT_DESKTOP=MATE __GL_FSAA_MODE=<unset> __GL_LOG_MAX_ANISO=<unset> __GL_SYNC_TO_VBLANK=<unset> __GL_SORT_FBCONFIGS=<unset> __GL_YIELD=<unset>
1.115 Display options: [FullScreen: 1] [VSync: 1] [UIScale: automatic (100.0%)] [Native DPI: 1] [Screen: 255] [Special: lmw] [Lang: en]
10.684 Available displays: 2
10.687 [0]: EV2730Q 27" - {[0,0], 1920x1920, SDL_PIXELFORMAT_RGB888, 60Hz}
10.687 [1]: WQX DP 30" - {[1920,0], 2560x1600, SDL_PIXELFORMAT_RGB888, 60Hz}
11.035 Initialised OpenGL:[0] AMD Radeon (TM) R9 Fury Series (FIJI, DRM 3.32.0, 5.2.0-3-amd64, LLVM 10.0.0); driver: 4.5 (Core Profile) Mesa 19.3.0-devel (git-c580f134ae)
11.036 [Extensions] s3tc:yes; KHR_debug:yes; ARB_clear_texture:yes, ARB_copy_image:yes
11.037 [Version] 4.5
11.048 Graphics settings preset: very-high
11.049 Dedicated video memory size 4096 MB
12.521 Graphics options: [Graphics quality: high] [Video memory usage: all] [Light scale: 25%] [DXT: high-quality] [Color: 32bit]
12.523 [Max threads (load/render): 32/32] [Max texture size: 0] [Tex.Stream.: 0] [Rotation quality: normal] [Other: STDC]
==539== Conditional jump or move depends on uninitialised value(s)
==539== at 0x1A518EE3: optimizeExtInstr (lib/CodeGen/PeepholeOptimizer.cpp:460)
==539== by 0x1A518EE3: (anonymous namespace)::PeepholeOptimizer::runOnMachineFunction(llvm::MachineFunction&) (lib/CodeGen/PeepholeOptimizer.cpp:1734)
==539== by 0x1A45F007: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (lib/CodeGen/MachineFunctionPass.cpp:73)
==539== by 0x1A2CD345: llvm::FPPassManager::runOnFunction(llvm::Function&) (lib/IR/LegacyPassManager.cpp:1648)
==539== by 0x1AECF3A9: RunPassOnSCC (lib/Analysis/CallGraphSCCPass.cpp:176)
==539== by 0x1AECF3A9: RunAllPassesOnSCC (lib/Analysis/CallGraphSCCPass.cpp:441)
==539== by 0x1AECF3A9: (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) (lib/Analysis/CallGraphSCCPass.cpp:497)
==539== by 0x1A2CDA6F: runOnModule (lib/IR/LegacyPassManager.cpp:1749)
==539== by 0x1A2CDA6F: llvm::legacy::PassManagerImpl::run(llvm::Module&) (lib/IR/LegacyPassManager.cpp:1862)
==539== by 0x18C965C2: UnknownInlinedFun (ac_llvm_helper.cpp:212)
==539== by 0x18C965C2: UnknownInlinedFun (si_shader_tgsi_setup.c:107)
==539== by 0x18C965C2: si_compile_llvm (si_shader.c:5658)
==539== by 0x18C9D2DC: si_get_shader_part.lto_priv.0 (si_shader.c:7303)
==539== by 0x18C93DC8: UnknownInlinedFun (si_shader.c:8133)
==539== by 0x18C93DC8: si_shader_create (si_shader.c:8312)
==539== by 0x18537E12: UnknownInlinedFun (si_state_shaders.c:2108)
==539== by 0x18537E12: si_shader_select_with_key.constprop.0 (si_state_shaders.c:2400)
==539== by 0x18CF22F0: si_shader_select (si_state_shaders.c:2419)
==539== by 0x18CF44E2: si_update_shaders (si_state_shaders.c:4021)
==539== by 0x18D03034: si_draw_vbo.lto_priv.0 (si_state_draw.c:2039)
==539==
17.630 Loading mod core 0.0.0 (data.lua)
20.686 Loading mod base 0.17.73 (data.lua)
24.722 Loading mod base 0.17.73 (data-updates.lua)
27.317 Checksum for core: 3106065888
...
Programs doesn't crash.
Obviously issue might be in the LLVM, but it is likely that some structures are not properly initalized by Mesa.
glxgears with valgrind tracking enabled:
$ valgrind --track-origins=yes glxgears
==1136== Memcheck, a memory error detector
==1136== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==1136== Using Valgrind-3.15.0 and LibVEX; rerun with -h for copyright info
==1136== Command: glxgears
==1136==
Running synchronized to the vertical refresh. The framerate should be
approximately the same as the monitor refresh rate.
==1136== Conditional jump or move depends on uninitialised value(s)
==1136== at 0x8293EE3: optimizeExtInstr (lib/CodeGen/PeepholeOptimizer.cpp:460)
==1136== by 0x8293EE3: (anonymous namespace)::PeepholeOptimizer::runOnMachineFunction(llvm::MachineFunction&) (lib/CodeGen/PeepholeOptimizer.cpp:1734)
==1136== by 0x81DA007: llvm::MachineFunctionPass::runOnFunction(llvm::Function&) (lib/CodeGen/MachineFunctionPass.cpp:73)
==1136== by 0x8048345: llvm::FPPassManager::runOnFunction(llvm::Function&) (lib/IR/LegacyPassManager.cpp:1648)
==1136== by 0x8C4A3A9: RunPassOnSCC (lib/Analysis/CallGraphSCCPass.cpp:176)
==1136== by 0x8C4A3A9: RunAllPassesOnSCC (lib/Analysis/CallGraphSCCPass.cpp:441)
==1136== by 0x8C4A3A9: (anonymous namespace)::CGPassManager::runOnModule(llvm::Module&) (lib/Analysis/CallGraphSCCPass.cpp:497)
==1136== by 0x8048A6F: runOnModule (lib/IR/LegacyPassManager.cpp:1749)
==1136== by 0x8048A6F: llvm::legacy::PassManagerImpl::run(llvm::Module&) (lib/IR/LegacyPassManager.cpp:1862)
==1136== by 0x6A115C2: UnknownInlinedFun (ac_llvm_helper.cpp:212)
==1136== by 0x6A115C2: UnknownInlinedFun (si_shader_tgsi_setup.c:107)
==1136== by 0x6A115C2: si_compile_llvm (si_shader.c:5658)
==1136== by 0x6A182DC: si_get_shader_part.lto_priv.0 (si_shader.c:7303)
==1136== by 0x6A0EDC8: UnknownInlinedFun (si_shader.c:8133)
==1136== by 0x6A0EDC8: si_shader_create (si_shader.c:8312)
==1136== by 0x62B2E12: UnknownInlinedFun (si_state_shaders.c:2108)
==1136== by 0x62B2E12: si_shader_select_with_key.constprop.0 (si_state_shaders.c:2400)
==1136== by 0x6A6D2F0: si_shader_select (si_state_shaders.c:2419)
==1136== by 0x6A6F4E2: si_update_shaders (si_state_shaders.c:4021)
==1136== by 0x6A7E034: si_draw_vbo.lto_priv.0 (si_state_draw.c:2039)
==1136== Uninitialised value was created by a stack allocation
==1136== at 0x82928BA: (anonymous namespace)::PeepholeOptimizer::runOnMachineFunction(llvm::MachineFunction&) (lib/CodeGen/PeepholeOptimizer.cpp:1593)
==1136==
2 frames in 5.1 seconds = 0.396 FPS
XIO: fatal IO error 110 (Connection timed out) on X server ":0"
after 303 requests (34 known processed) with 0 events remaining.
==1136==
==1136== HEAP SUMMARY:
==1136== in use at exit: 14,540,979 bytes in 48,924 blocks
==1136== total heap usage: 115,813 allocs, 66,889 frees, 36,537,027 bytes allocated
==1136==
==1136== LEAK SUMMARY:
==1136== definitely lost: 0 bytes in 0 blocks
==1136== indirectly lost: 0 bytes in 0 blocks
==1136== possibly lost: 163,934 bytes in 626 blocks
==1136== still reachable: 14,377,045 bytes in 48,298 blocks
==1136== of which reachable via heuristic:
==1136== newarray : 786,528 bytes in 24 blocks
==1136== multipleinheritance: 176,544 bytes in 252 blocks
==1136== suppressed: 0 bytes in 0 blocks
==1136== Rerun with --leak-check=full to see details of leaked memory
==1136==
==1136== For lists of detected and suppressed errors, rerun with: -s
==1136== ERROR SUMMARY: 333 errors from 1 contexts (suppressed: 0 from 0)
Quick check in LLVM source tree, indicate it is probably this if statement:
if (isMoveImmediate(*MI, ImmDefRegs, ImmDefMIs)) {
SeenMoveImm = true;
} else {
Changed |= optimizeExtInstr(*MI, MBB, LocalMIs); // CALL into optimizeExtInstr
// optimizeExtInstr might have created new instructions after MI
// and before the already incremented MII. Adjust MII so that the
// next iteration sees the new instructions.
MII = MI;
++MII;
if (SeenMoveImm)
Changed |= foldImmediate(*MI, ImmDefRegs, ImmDefMIs);
}
Maybe related to MBB, LocalMIs.
I have trouble navigating LLVM source code to look further, as it appears that createAMDGPUMCSubtargetInfoImpl is a generated function.
Using libllvm10 1:10~svn375339-1~exp1 from Debian experimental.
Mesa git master at c580f134ae5d7e9f24e8b1bfc405825b5d413414
Arch: amd64
GPU: AMD Radeon Fury X
Compiler: gcc version 9.2.1 20191022 (Debian 9.2.1-12)
Compiler flags used when compiling mesa:
COMMON_OPTS_OPT=("-Dc_args=-pipe -march=native -O3 -flto -ggdb" "-Dcpp_args=-pipe -std=c++17 -march=native -O3 -flto -ggdb" "-Db_ndebug=true")
glxgears under valgrind:
More complex title, Factorio:
Programs doesn't crash.
Obviously issue might be in the LLVM, but it is likely that some structures are not properly initalized by Mesa.
glxgears with valgrind tracking enabled:
Quick check in LLVM source tree, indicate it is probably this if statement:
line 460:
but TII is some subclass of
llvm::TargetInstrInfo
, so I am not sure which implementation ofisCoalescableExtInstr
I should be looking at exactly.This function is called from runOnMachineFunction
line 1593:
Around caller:
Maybe related to
MBB
,LocalMIs
.I have trouble navigating LLVM source code to look further, as it appears that
createAMDGPUMCSubtargetInfoImpl
is a generated function.PS. I filled this against Mesa initially, but it does look like LLVM issue - https://gitlab.freedesktop.org/mesa/mesa/issues/2000