Repository: compiler-explorer/compiler-explorer
Pull request #6740 (2024-08-01 03:44:58)

[HLSL] Add DXC 1.8.2407 release
This change adds the new DXC 1.8.2407 release. This PR depends on the infra PR below being merged and compilers built:

compiler-explorer/infra#1381

<!-- THIS COMMENT IS INVISIBLE IN THE FINAL PR, BUT FEEL FREE TO REMOVE IT
Thanks for taking the time to improve CE. We really appreciate it.
  Before opening the PR, please make sure that the tests & linter pass their checks,
  by running `make check`.
  In the best case scenario, you are also adding tests to back up your changes,
  but don't sweat it if you don't. We can discuss them at a later date.
Feel free to append your name to the CONTRIBUTORS.md file
Thanks again, we really appreciate this!
-->



Patch:
diff --git a/etc/config/c++.amazon.properties b/etc/config/c++.amazon.properties
index 38a0fc79e..ac6aac144 100644
--- a/etc/config/c++.amazon.properties
+++ b/etc/config/c++.amazon.properties
@@ -3388,7 +3388,7 @@ compiler.gcc6502_1110.notification=This uses AVR-GCC 11.1.0 to compile C++ and u
 #################################
 # NVHPC nvc++
 
-group.nvcxx_x86_cxx.compilers=nvcxx_x86_cxx22_7:nvcxx_x86_cxx22_9:nvcxx_x86_cxx22_11:nvcxx_x86_cxx23_1:nvcxx_x86_cxx23_3:nvcxx_x86_cxx23_5:nvcxx_x86_cxx23_7:nvcxx_x86_cxx23_9:nvcxx_x86_cxx23_11:nvcxx_x86_cxx24_1:nvcxx_x86_cxx24_3:nvcxx_x86_cxx24_5
+group.nvcxx_x86_cxx.compilers=nvcxx_x86_cxx22_7:nvcxx_x86_cxx22_9:nvcxx_x86_cxx22_11:nvcxx_x86_cxx23_1:nvcxx_x86_cxx23_3:nvcxx_x86_cxx23_5:nvcxx_x86_cxx23_7:nvcxx_x86_cxx23_9:nvcxx_x86_cxx23_11:nvcxx_x86_cxx24_1:nvcxx_x86_cxx24_3:nvcxx_x86_cxx24_5:nvcxx_x86_cxx24_7
 group.nvcxx_x86_cxx.options=
 group.nvcxx_x86_cxx.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
 group.nvcxx_x86_cxx.needsMulti=false
@@ -3475,7 +3475,13 @@ compiler.nvcxx_x86_cxx24_5.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/
 compiler.nvcxx_x86_cxx24_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.5/compilers/bin/nvc++
 compiler.nvcxx_x86_cxx24_5.semver=24.5
 
-group.nvcxx_arm_cxx.compilers=nvcxx_arm_cxx22_7:nvcxx_arm_cxx22_9:nvcxx_arm_cxx22_11:nvcxx_arm_cxx23_1:nvcxx_arm_cxx23_3:nvcxx_arm_cxx23_5:nvcxx_arm_cxx23_7:nvcxx_arm_cxx23_9:nvcxx_arm_cxx23_11:nvcxx_arm_cxx24_1:nvcxx_arm_cxx24_3:nvcxx_arm_cxx24_5
+compiler.nvcxx_x86_cxx24_7.demangler=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.7/compilers/bin/nvdecode
+compiler.nvcxx_x86_cxx24_7.cuobjdump=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.7/cuda/12.5/bin/cuobjdump
+compiler.nvcxx_x86_cxx24_7.nvdisasm=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.7/cuda/12.5/bin/nvdisasm
+compiler.nvcxx_x86_cxx24_7.exe=/opt/compiler-explorer/hpc_sdk/Linux_x86_64/24.7/compilers/bin/nvc++
+compiler.nvcxx_x86_cxx24_7.semver=24.7
+
+group.nvcxx_arm_cxx.compilers=nvcxx_arm_cxx22_7:nvcxx_arm_cxx22_9:nvcxx_arm_cxx22_11:nvcxx_arm_cxx23_1:nvcxx_arm_cxx23_3:nvcxx_arm_cxx23_5:nvcxx_arm_cxx23_7:nvcxx_arm_cxx23_9:nvcxx_arm_cxx23_11:nvcxx_arm_cxx24_1:nvcxx_arm_cxx24_3:nvcxx_arm_cxx24_5:nvcxx_arm_cxx24_7
 group.nvcxx_arm_cxx.options=
 group.nvcxx_arm_cxx.supportsBinary=true
 group.nvcxx_arm_cxx.binaryHideFuncRe=^(__.*|_(init|start|fini)|(de)?register_tm_clones|call_gmon_start|frame_dummy|\.plt.*|_dl_relocate_static_pie)$
@@ -3539,6 +3545,10 @@ compiler.nvcxx_arm_cxx24_5.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch6
 compiler.nvcxx_arm_cxx24_5.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.5/compilers/bin/nvc++
 compiler.nvcxx_arm_cxx24_5.semver=24.5
 
+compiler.nvcxx_arm_cxx24_7.demangler=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.7/compilers/bin/nvdecode
+compiler.nvcxx_arm_cxx24_7.exe=/opt/compiler-explorer/hpc_sdk/Linux_aarch64/24.7/compilers/bin/nvc++
+compiler.nvcxx_arm_cxx24_7.semver=24.7
+
 #################################
 # EDG compiler
 group.edg.compilers=&edg-gnu:&edg-default
@@ -4880,11 +4890,13 @@ libs.simde.versions.trunk.path=/opt/compiler-explorer/libs/simde/trunk
 libs.simdjson.name=simdjson
 libs.simdjson.staticliblink=simdjson
 libs.simdjson.url=https://github.com/simdjson/simdjson
-libs.simdjson.versions=301:315
+libs.simdjson.versions=301:315:3100
 libs.simdjson.versions.301.version=3.0.1
 libs.simdjson.versions.301.path=/opt/compiler-explorer/libs/simdjson/v3.0.1/include
 libs.simdjson.versions.315.version=3.1.5
 libs.simdjson.versions.315.path=/opt/compiler-explorer/libs/simdjson/v3.1.5/include
+libs.simdjson.versions.3100.version=3.10.0
+libs.simdjson.versions.3100.path=/opt/compiler-explorer/libs/simdjson/v3.10.0/include
 
 libs.sol2.name=sol2
 libs.sol2.url=https://github.com/ThePhD/sol2
diff --git a/etc/config/cuda.amazon.properties b/etc/config/cuda.amazon.properties
index 60fb26f0e..ce1159256 100644
--- a/etc/config/cuda.amazon.properties
+++ b/etc/config/cuda.amazon.properties
@@ -2,14 +2,14 @@ compilers=godbolt.org@443/gpu:&nvrtc:&cuclang:&hipclang
 # Disabled: nvcc
 # The disabled group(s) are actually used in the cuda.gpu.properties (along with libs etc). One day these might exist on
 # both servers, so I want to keep them in the same place.
-defaultCompiler=nvcc124u1
+defaultCompiler=nvcc125u1
 supportsBinary=true
 supportsExecute=false
 
 # Details of GPUs/features supported by CUDA compilers can be found here:
 # gist.github.com/ax3l/9489132#clang--x-cuda
 
-group.nvcc.compilers=nvcc124u1:nvcc123u1:nvcc122u1:nvcc121:nvcc120u1:nvcc120:nvcc118:nvcc117u1:nvcc117:nvcc116u2:nvcc116u1:nvcc116:nvcc115u2:nvcc115u1:nvcc115:nvcc114u4:nvcc114u3:nvcc114u2:nvcc114u1:nvcc114:nvcc113u1:nvcc113:nvcc112u2:nvcc112u1:nvcc112:nvcc111u1:nvcc111:nvcc11u1:nvcc11:nvcc102:nvcc101u2:nvcc101u1:nvcc101:nvcc100:nvcc92:nvcc91
+group.nvcc.compilers=nvcc125u1:nvcc124u1:nvcc123u1:nvcc122u1:nvcc121:nvcc120u1:nvcc120:nvcc118:nvcc117u1:nvcc117:nvcc116u2:nvcc116u1:nvcc116:nvcc115u2:nvcc115u1:nvcc115:nvcc114u4:nvcc114u3:nvcc114u2:nvcc114u1:nvcc114:nvcc113u1:nvcc113:nvcc112u2:nvcc112u1:nvcc112:nvcc111u1:nvcc111:nvcc11u1:nvcc11:nvcc102:nvcc101u2:nvcc101u1:nvcc101:nvcc100:nvcc92:nvcc91
 group.nvcc.versionRe=^Cuda.*
 group.nvcc.compilerType=nvcc
 group.nvcc.isSemVer=true
@@ -234,6 +234,12 @@ compiler.nvcc124u1.options=--compiler-bindir /opt/compiler-explorer/gcc-10.2.0/b
 compiler.nvcc124u1.nvdisasm=/opt/compiler-explorer/cuda/12.4.1/bin/nvdisasm
 compiler.nvcc124u1.demangler=/opt/compiler-explorer/gcc-10.2.0/bin/c++filt
 compiler.nvcc124u1.objdumper=/opt/compiler-explorer/gcc-10.2.0/bin/objdump
+compiler.nvcc125u1.semver=12.5.1
+compiler.nvcc125u1.exe=/opt/compiler-explorer/cuda/12.5.1/bin/nvcc
+compiler.nvcc125u1.options=--compiler-bindir /opt/compiler-explorer/gcc-10.2.0/bin
+compiler.nvcc125u1.nvdisasm=/opt/compiler-explorer/cuda/12.5.1/bin/nvdisasm
+compiler.nvcc125u1.demangler=/opt/compiler-explorer/gcc-10.2.0/bin/c++filt
+compiler.nvcc125u1.objdumper=/opt/compiler-explorer/gcc-10.2.0/bin/objdump
 group.cuclang.compilers=cuclang700:cuclang800:cuclang900:cuclang1000:cuclang1001:cuclang1100:cltrunk
 group.cuclang.isSemVer=true
 group.cuclang.baseName=clang
diff --git a/etc/config/hlsl.amazon.properties b/etc/config/hlsl.amazon.properties
index 1a4055750..225314c9a 100644
--- a/etc/config/hlsl.amazon.properties
+++ b/etc/config/hlsl.amazon.properties
@@ -1,6 +1,6 @@
 compilers=&dxc:&rga:&clang
 
-group.dxc.compilers=dxc_trunk:dxc_1_6_2112:dxc_1_7_2207:dxc_1_7_2212:dxc_1_7_2308:dxc_1_8_2306:dxc_1_8_2403:dxc_1_8_2403_1:dxc_1_8_2403_2:dxc_1_8_2405
+group.dxc.compilers=dxc_trunk:dxc_1_6_2112:dxc_1_7_2207:dxc_1_7_2212:dxc_1_7_2308:dxc_1_8_2306:dxc_1_8_2403:dxc_1_8_2403_1:dxc_1_8_2403_2:dxc_1_8_2405:dxc_1_8_2407
 group.dxc.groupName=DXC
 group.dxc.isSemVer=true
 group.dxc.baseName=DXC
@@ -26,6 +26,8 @@ compiler.dxc_1_8_2403_2.exe=/opt/compiler-explorer/dxc-1.8.2403.2/bin/dxc
 compiler.dxc_1_8_2403_2.semver=1.8.2403.2
 compiler.dxc_1_8_2405.exe=/opt/compiler-explorer/dxc-1.8.2405/bin/dxc
 compiler.dxc_1_8_2405.semver=1.8.2405
+compiler.dxc_1_8_2407.exe=/opt/compiler-explorer/dxc-1.8.2407/bin/dxc
+compiler.dxc_1_8_2407.semver=1.8.2407
 
 group.rga.compilers=rga262_dxctrunk:rga262_dxc172207:rga262_dxc162112:rga261_dxc172207:rga261_dxc162112:rga290_dxctrunk
 group.rga.groupName=RGA
diff --git a/etc/config/site-templates.conf b/etc/config/site-templates.conf
index 420472a6c..3ae57b057 100644
--- a/etc/config/site-templates.conf
+++ b/etc/config/site-templates.conf
@@ -7,5 +7,5 @@ Preprocessor=https://godbolt.org/#g:!((g:!((g:!((h:codeEditor,i:(filename:'1',fo
 Pascal IDE=https://godbolt.org/#z:OYLghAFBqd5TKALEAXATgU0wGgJYgQDGAtgIYDWmAgusAM4gDkTORA9iQA54A2m6ADJkAdsACuZYJgCSAExBcy9ImV5tx9VJwDy41F30AxPphFkSmZqwBmpxrExy829PJABaAIw47/dwBMvqbmliDkqEg24iJE9AD0EVExcQB0SvQ4oEwxLgDUSdGx9ACkAMwAQiUADNQ11HgiqAI2ZESY9fWamKW1ef0FZJFFcY2oNuVVtfWoAJ5cHX0DACoAskNIRin0eeUAInlEvMr0EMsyTS1tTjoARgBWmESoOHky65FbxQCU9QN5hluvDwRD%2B/wGI1QeHYIjyAGUAI6SLDEGFaPIicQkEBvS7SdDfHEXZr4yZg/pmORk6a1PDcfiWJpDaEiTq1SEsvJrDZfNKI5GYVEidGY7G4kkCQnizCkyr1W4yxrk%2BFIshYPIgfYYrF5ABU2pI1OolKN9UpqXqrDw9AuR3EciczGqVvo60acPY4nQ7WYXhdOgWIl9rGOYncGVUvG%2BOAgThc7DcCiCflkCjKwX4oSsmAAHhYuPxUnIuOgstZ8DbYrx7Y6mM6K26RB6vT66/7A06Q6JgO4WNHY85XO50yn3AAWDNmCxWQrbRIbEb0MY2dLKMssCu26sOhRthtkd2e71WJh%2BisBsydnChnu7pjfaPWgDC6yoAAV0OxHs9gzh7iAfBETAAHcTH8BQAFZo14ZgINYIM93YZhliwTBdgCMoz1QTsHxwCgQDKCDUmqMcAE4ADYAA4ymo6ovAAdi8ciJxgpgx3gq8kI3RhqhwbC237RAIBQDgHQAUUHBN8EIFMsxAXN80LYtSxsGFUDhSMrC8CdVKaABVehMDfHMr3/IIb0UZRIxwQz%2BGeFlCEpJ92GrEggx8SlBEaTAADksQVdAAIgnAuHYJcoRhZzXPckKwpcFkvKAvySACoKbMwOyIqbVA1VQKKsRi2yniyuEcvQVBEt8/yBDSrRcvytyAJssqKu85LUq8KCbKPVsS3YYB0AsPIFPpDo5Rpahul6ah/lnYplzyRo8jAJg5riedhm2ZdV3oFacGVNadiWlbDo25Jih2lbTVqAA3NVlV5RguQ%2BTZtiNBVgCVJZ%2BgAdXQFxMEEEQIBWgAJDLeHYV4foTXg5DABH72umaBkejUtW5T5tlSJ8sCGMaphR/oxJzFxnIddGygOR7Un5NVBTKX5xuNEQ5AtWp72vWCOMQ%2BS81GosSz4nCYxE9hxMk0sCAgWTp3CBc50O7aMl8NSNLULSdLUgyjJMvd/3TCyIzUdLMoc2NWYamLPLa6rAonULwpZK2msd%2BKYUq9qaonIr7JhUr6pcgqmt9kqWs9u2QB9lqXZ8OryojlLvejegepPXJUEGTb5qaCZmfqMYrnaNlqDmBZlXeHltl2KnFsudBWmL77wRKCCKiu%2BiKjIMgyiIW4AkozAPDKMpqluDwxy8UivA8MhKLHjwiFImxOv7mw5Ho0iqXovYrogvYS/BCEUiylUBSFEUsSJPFJWviV0CNf4TXz2lRsZHKspL81OdYuCcAQ%2BsSFTpK1zjtYWAloxIEwGQB0gUIDRnwsxVIpEILVEwuRJipFKID0IlzNirBsReGqLxABrAuKsB4uA50uFWIBAISAeiARiIQUotgwiARSKTwYvRf%2BnFyz8WoTGISKBcxPH0FJaWaoGBvlEBlOESB2DAQQmeDg3A%2BDMhhDIoCvB5GKOUawVRPB%2BCBRsFwIgZQAhBEMaYdAeh1IKKUb%2BURRBaAMHLM40qzgEK2DVppACWt9KGWMqZJqRsrIm2BLcBw8CcDsC4FlRgTAPCrD2BlLgSA8AULTr%2BLQXitFyIcfoviqEmrAUGlwYM0Fua8N5kwEmYjXB5BzJRciHhmJ5FMUQPIZRUhMICHkCAMiVAmy5KhdCmFvisAEfeSB0DYGECqfgnA2IAj0WQVw%2BizF6LVBYWw8iNTAHlkodMmhzAyg80ORuE50YboCCXDCKOQA%3D%3D
 Java IDE=https://godbolt.org/#g:!((g:!((g:!((h:tree,i:(cmakeArgs:'',compilerLanguageId:java,customOutputFilename:'',files:!((editorId:1,fileId:1,filename:shapes/Square.java,g:'',isIncluded:'0',isMainSource:'1',isOpen:'0',langId:''),(editorId:2,fileId:2,filename:example.java,g:'package+myapp%3B%0A%0Apublic+class+example+%7B%0A%0A%7D',isIncluded:'0',isMainSource:'0',isOpen:'0',langId:java)),isCMakeProject:'1',j:1,newFileId:5),l:'5',n:'0',o:'Tree+%231',t:'0')),header:(),k:29.896907216494846,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((g:!((h:codeEditor,i:(filename:shapes/Square.java,fontScale:14,fontUsePx:'0',j:1,lang:java,selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),source:'package+shapes%3B%0A%0Apublic+class+Square+%7B%0A++++public+int+square(int+num)+%7B%0A++++++++return+num+*+num%3B%0A++++%7D%0A%7D%0A'),l:'5',n:'0',o:shapes/Square.java,t:'0'),(h:codeEditor,i:(filename:example.java,fontScale:14,fontUsePx:'0',j:2,lang:java,selection:(endColumn:1,endLineNumber:2,positionColumn:1,positionLineNumber:2,selectionStartColumn:1,selectionStartLineNumber:2,startColumn:1,startLineNumber:2),source:'import+shapes.*%3B%0A%0Aclass+Main+%7B%0A++++public+static+void+main(String%5B%5D+args)+%7B%0A++++++++Square+sq+%3D+new+Square()%3B%0A++++++++int+val+%3D+sq.square(args.length)%3B%0A++++++++System.out.println(%22Answer:+%22+%2B+Integer.toString(val))%3B%0A++++%7D%0A%7D'),l:'5',n:'0',o:example.java,t:'0')),k:80.08193737395916,l:'4',m:60.81932773109243,n:'0',o:'',s:1,t:'0'),(g:!((h:executor,i:(argsPanelShown:'0',compilationPanelShown:'1',compiler:java1601,compilerOutShown:'0',execArgs:'hello+world',execStdin:'',fontScale:14,fontUsePx:'0',j:1,lang:java,libs:!(),options:'',source:'1',stdinPanelShown:'1',tree:1,wrap:'1'),l:'5',n:'0',o:'Executor+jdk+16.0.1+(Java,+Tree+%231)',t:'0')),header:(),l:'4',m:39.18067226890757,n:'0',o:'',s:0,t:'0')),k:70.10309278350515,l:'3',n:'0',o:'',t:'0')),l:'2',n:'0',o:'',t:'0')),version:4
 Ada IDE=https://godbolt.org/#z:OYLghAFBqd5QCxAFwE4FN0BoCWIIDGAtgIYDW6AgqsAM4gDkDWBA9kQA44A26qAMiQB2wAK4lg6AJIATECRkkWo2snYB5Ucg5aAYj3RCSRdI2YAzA/VjoZONalkgAjFku8nAJjcGjJkOgAHsYcvAB0CgBGWKBMuLRSQgTcojK2jAAMzDi0ALIkOEIAyqyiqASmDFnx6hyGmczcwsBOTACUWBC29qyOct7u0nIAzD68fqbmrKwRMrQxZvGJyanpVdl5BcWl5ZXOG7X161hNIq0MHV12Dk6jg04ALGOGxpPTs9GxG8spaXLHOXyhRKZQqjH2NTqQgaJ2a50u3RucgAtK57nIAKzPCYgQo6ZBhZCBZALBjOTzDACkGUoFIe1MozgynnpNO%2BSV%2Ba2qgK2IN24IOUIFsLOcgUJDaHRyAGF8hQAAqoVgAK3QBGQwuVLiwQnQAHd9B45AA2DrcRgY5jQ46sRgAFQw6AA1JSKRCNetJVgyC4ABxhB7OB4PACcxoyvoxAHZjc5hsNjSdGA9mEQXBkMjqYba4vRMx6spcYFBixAkGw0gBRa69XD4QY4qYzBTzKZCZBFAgkXguJ5t5AAVVo6HlgRhWu8p1A4qww946pwrGhXSEMmlrBSRGhrkMMn4hXQADlRERInwQN4OKxaPZF0J15vt1grzfkHf97rj6fz9452q30uRTICQqDIA%2BJ5Pn%2BC6AcBoEfkeJ5nqgF6zrBYEbhB2qqCByDwV%2BSEXh0tA7GCDB6vYCBOpQihhHaQTIAA%2BlI6iUsMABCTqcVxXEqM61EkLR9FMSx7EMgyHAkAQZASM6ujTE6OQMpx5iiEkAFCE6uQAJ4MboqkEE6ECUE6IBOokyDoJIqCsRxuimYa6AMXaWl1G0ToYMgZQaeZll8DZDK7k6cmsDZFxJgwlpZjaIBNrM8wFhcHQIOgCjnhAHQ%2BsMzhhMaYZxsanhBr6GaeIm5oMCmWBpp4GJhMyIbBsaDwZFGGLDL6ni%2BlF1Q5sweZYAlRbwGWIAVug1Y9KgdYQA2rwBMEnDhFEbhLh2XY9kGK3tkOI5jscWquFO8iKLO6Dzup%2BC7uBW4gBi3i7nhiHnlGz7XreS7XdCd2va%2B74Hvhz2nedd5AThn23b%2BZ3/iDaGPd%2ByEvdhoHg99SO4f9T0I0RJGVORyCUfxgnEsJNlOrxVE0XRxPMf5NJ45RwWk%2BTjOiTSHBKhUMhlM6lYLaEzqKTSnF2UFBhOS56C05QZ7AIUSlOocGkQLoWBmUIukGKrrqeHiWiEsS2ttFLnHyloDHwYZ2t2slTpCJjTrmEqRBBdMpnay6pWaTpelJIZoxBW0YAMFIpCSEbrOUIFvMhLwoVmhaVrZvNMfoB8A0NF6yWpch6XhZVabxmE0YZMarVMhiDyRhSibWj1iz9YNnSluWrBVjWU14DNvhzbFy39p23amJt/Y7aO44gKMR0zlBF0rmuGE3c4IZYA9GPwy4rgvu994L9uy9b%2BpcMEc4rgzzDYO7y4y9nzBOFH%2BeJ%2BoRfj5X0/cFr8fzjY6CuMURTAlU0YjTdi3FQHk0JoAkmEd6b/zCD5KyTkhLAI4uAmi8C%2BCIOpiJNiYk2aSWkpIJ0kRW5aRdqwBStB5YqTUneL2ul9KGWMqZdB1kQEiwcuLVy7l0CeVQN5dsvlUAUPlpxSgBADLMIEVZEyrEAAiToMjGyIZZOWQsuJ6gQAYQyQhWDIFgZA5iYRKyrgYuocwGteCGV0JKJ03BpgcBEVxAA4jw5WqsxEEHDjgtRnFAp2NYA4iO3EPJeSoh7DiHilGBW0vQpIUtAoszYmFcqkVa7MFtL3GQ0RBpJRSmkHO8cKqphAIGMIwwQwhl9FGX0ldcoxixGkrAvVZwgHzBnDKEMwiRmcMaXpnUoyeEGU1cKwxE7RTiI3OAsBm4gFKNoLQ002CcAMKgQ8c0GCBF9MaZETUnTACMHo8kYRPAWFWgPDafZVqjz2tUA6A1HQ4DkK4PUqASAcAFIU1JScGCaHmXo1g5gnSbO2bs/ZJBDmeGOYZdcyzeBCNdFlNozAcnegvCGIuWUKTlIxLGDI5Swx52KYMspUYQylRDAMkMGQQzDAyA075fVWnp09E3YaLdYV8EWewLgcKQBguQOSbwaQABuOAKgADUcD6kVsKdwFlUD0AgJEGEkRCggS0sKJZJh2zqCENwDVxw0ikBED2Q1OAMALmFegegxwghqi0JUbkAjyrVG4DgSIrzUBaXXGkGEaAcBpjJGFcwTQ6CSulUKINW01qD17NG6549DrNGOkoN1kRrC5wCepG1fUobQWXFdS%2BO5Vz32QpvN66lwblt%2BkuUtWE83qVBsjItQNoa33fp%2BTGWE0JVrfujTt68v73MwC4T5Yy64MCBVsnZDw9kHKdEczwhkHSYA9oi5F7SsBZ3yfgQp%2BcQBRijDlTwLVaWeCjNSkuIZ6XjMZW0z0HTOphCjPGX0wwYznoyD05kIzx3pMWCi8qJzur/omZuq1Cq7wlKAA%3D
-Android Java IDE=https://godbolt.org/#g:!((g:!((g:!((h:tree,i:(cmakeArgs:'-DCMAKE_BUILD_TYPE%3DDebug',compilerLanguageId:android-java,customOutputFilename:'',files:!((editorId:1,fileId:1,filename:profile.prof.txt,g:'',isIncluded:'1',isMainSource:'1',isOpen:'0',langId:''),(editorId:2,fileId:2,filename:example.java,g:'',isIncluded:'0',isMainSource:'0',isOpen:'0',langId:'')),isCMakeProject:'1',j:1,newFileId:4),l:'5',n:'0',o:'Tree+%231',t:'0')),header:(),k:21.60531144343149,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:codeEditor,i:(filename:profile.prof.txt,fontScale:14,fontUsePx:'0',j:1,lang:android-java,selection:(endColumn:24,endLineNumber:2,positionColumn:24,positionLineNumber:2,selectionStartColumn:24,selectionStartLineNumber:2,startColumn:24,startLineNumber:2),source:'HSPLSquare%3B-%3E%3Cinit%3E()V%0AHSPLSquare%3B-%3Esquare(I)I%0ALSquare%3B%0A'),l:'5',n:'1',o:profile.prof.txt,t:'0'),(h:codeEditor,i:(filename:example.java,fontScale:14,fontUsePx:'0',j:2,lang:android-java,selection:(endColumn:1,endLineNumber:15,positionColumn:1,positionLineNumber:15,selectionStartColumn:1,selectionStartLineNumber:15,startColumn:1,startLineNumber:15),source:'//+Type+your+code+here,+or+load+an+example.%0A//%0A//+(For+advanced+use+only)%0A//+Add+%22profile.prof.txt%22+to+%22Included+files%22+and+click+the+refresh+button+at%0A//+the+bottom+of+the+compiler+output+panel+to+enable+profile-guided+compilation%0A//+for+dex2oat.%0A//+For+the+profile+format,+see%0A//+https://developer.android.com/topic/performance/baselineprofiles/manually-create-measure%23define-rules-manually%0A%0Aclass+Square+%7B%0A++++static+int+square(int+num)+%7B%0A++++++++return+num+*+num%3B%0A++++%7D%0A%7D%0A'),l:'5',n:'0',o:example.java,t:'0')),k:47.44542077414174,l:'4',n:'0',o:'',s:1,t:'0'),(g:!((h:compiler,i:(compiler:java-dex2oat-latest,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:2,lang:android-java,libs:!(),options:'',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),tree:1),l:'5',n:'0',o:'+ART+dex2oat+latest+(Tree+%231)',t:'0')),k:30.94926778242678,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4
-Android Kotlin IDE=https://godbolt.org/#g:!((g:!((g:!((h:tree,i:(cmakeArgs:'-DCMAKE_BUILD_TYPE%3DDebug',compilerLanguageId:android-kotlin,customOutputFilename:'',files:!((editorId:1,fileId:1,filename:profile.prof.txt,g:'',isIncluded:'1',isMainSource:'1',isOpen:'0',langId:''),(editorId:2,fileId:2,filename:example.kt,g:'',isIncluded:'0',isMainSource:'0',isOpen:'0',langId:'')),isCMakeProject:'1',j:1,newFileId:4),l:'5',n:'0',o:'Tree+%231',t:'0')),header:(),k:21.60531144343149,l:'4',n:'0',o:'',s:0,t:'0'),(g:!((h:codeEditor,i:(filename:profile.prof.txt,fontScale:14,fontUsePx:'0',j:1,lang:android-kotlin,selection:(endColumn:12,endLineNumber:2,positionColumn:12,positionLineNumber:2,selectionStartColumn:12,selectionStartLineNumber:2,startColumn:12,startLineNumber:2),source:'HSPLExampleKt%3B-%3Esquare(I)I%0ALExampleKt%3B'),l:'5',n:'1',o:profile.prof.txt,t:'0'),(h:codeEditor,i:(filename:example.kt,fontScale:14,fontUsePx:'0',j:2,lang:android-kotlin,selection:(endColumn:1,endLineNumber:11,positionColumn:1,positionLineNumber:11,selectionStartColumn:1,selectionStartLineNumber:11,startColumn:1,startLineNumber:11),source:'//+Type+your+code+here,+or+load+an+example.%0A//%0A//+(For+advanced+use+only)%0A//+Add+%22profile.prof.txt%22+to+%22Included+files%22+and+click+the+refresh+button+at%0A//+the+bottom+of+the+compiler+output+panel+to+enable+profile-guided+compilation%0A//+for+dex2oat.%0A//+For+the+profile+format,+see%0A//+https://developer.android.com/topic/performance/baselineprofiles/manually-create-measure%23define-rules-manually%0A%0Afun+square(num:+Int):+Int+%3D+num+*+num%0A'),l:'5',n:'0',o:example.kt,t:'0')),k:47.44542077414174,l:'4',n:'0',o:'',s:1,t:'0'),(g:!((h:compiler,i:(compiler:kotlin-dex2oat-latest,filters:(b:'0',binary:'1',binaryObject:'1',commentOnly:'0',debugCalls:'1',demangle:'0',directives:'0',execute:'1',intel:'0',libraryCode:'0',trim:'1',verboseDemangling:'0'),flagsViewOpen:'1',fontScale:14,fontUsePx:'0',j:2,lang:android-kotlin,libs:!(),options:'',overrides:!(),selection:(endColumn:1,endLineNumber:1,positionColumn:1,positionLineNumber:1,selectionStartColumn:1,selectionStartLineNumber:1,startColumn:1,startLineNumber:1),tree:1),l:'5',n:'0',o:'+ART+dex2oat+latest+(Tree+%231)',t:'0')),k:30.94926778242678,l:'4',n:'0',o:'',s:0,t:'0')),l:'2',n:'0',o:'',t:'0')),version:4
+Android Java IDE=https://godbolt.org/#z:OYLghAFBqd5QCxAFwE4FN0BoCWIIDGAtgIYDW6AgqsAM4gDkAtACIDCAspQNICiA%2BgCEAqgEkAMi34AVAJoAFXgFIAzCxboARgFdgDLAQD2RAA44ANulTiSAO2DaSwdKIAmIO69SGcrpgCsSADcSA21aZGMAeW1kE1iAMQt0WxIidEZ9ADNk%2Blh0VxxI1DcQAEYsHMtSiqqUtIyTbzqAOibDLJbkAA9kLFAGfRxaUVsCc21XAsYyodoOEhxbAGVDbVQCDIZZ3FookxTGAAZ9cztgUsGASiwIAqLDEvcAJkrk0te61PSQdG60kyWFqBEL9TK7UbjSbTBgnXYLJardabY5zfaHWGnc6XBg3O6FYqlFRvaruAAsJPqP3aDhIqFcLQIWWAYMGELGEym7m2cwRKzWGy2O2G6NsqKwZ3sOKuN2GnHI6Hk3n86AIyBm%2Bn85SwtnQAHckqSQABWG7mRjG/RizFYQyMaQYdAAaiUzxUO3VmJlWAQ6BIU1Q%2BBuZBAzyOLQAbFGVM8I0cI2SybHjSpjRLGGSreK7Wz6EcsJ6TniYIgQEYprwCY9cPgvg0QO1Wo2ur1KoZbMhlgQSJZyhSsu3kMJaIruuKtRVJaBPN5fAFgqER5Y1Th2/gUq42IYJkQxRUN%2BIlugAHLaIiaKwgCkmQy0Iqr2xbnd7rA3u/IB%2BH3Wn8%2BXilL1UP3bZZkDpZAnzPF8AJXYDQNQZAvxPM8L0Df84PA7dIO1CIwMQn8UKvG5aAFFEGAACWWeRxGWABHRwMFUQQmFUZQVDYJYihYiArgANSUI5KAoqjaPo9BGOYlReFoOi6XQCBRCuUR%2BMoaiZIYlRBGU3F0wYS0dWzBtmmSNpmhbPpC20iAkHLdBKweVAawgOtqW8Wl6UZZk2w7LsewyMp%2B0HYdR3HEBiSnDxbC8Hw/BBRd0GXICxTuSKIN3ULiQPI98MvCo33vdtUrFFRiTyxK8OQnKsGgxKQLAwr0qq%2BLAIfWr4PK39AwqHD4Pq4qqvQ9qCLKIiSK2JgKHQEwnXGEhaFoJ0RNkl0AHZBCdeJNHMHACCdAAqRiVpYbTzV0rMbTtGl6IZJkWQsvFrMMCsqwcvAnOSb4Mj%2BAEgVirzO27Xt/L%2BoL5DHG0tVecKZ2i%2BdQWqh91xSzC0teTLvwqzrltfW98sfZGxVeUrPyyjHyix%2BHYLq/HQ0ahKWoGkmOrJ/qqefGnuoQxmhuWkbkS2AB6fmnWkABPA4nRFgVpse51fQwLAnUeJ1zEMf0nTsJ0vtMIFlMF3WhambpnlV5B1qMywmAcXwCml0wLBIRKQH1p1KFcVwXWeZ5G2M5semQV1nidSIPeeSFORtupaAD9XIumraCDIIPfSdDAsgwWgECdHRkEiWx1f9gTBaT51NEMHPjEVrJi9tsxLFQRXYniU2TDseKWidBIleQZPvcsJ0B1QUg%2BidEcxMLoWEBzkx6EFqYgniwwDlQFpod8RljH5yIzAIfml4H0gxnQfnNFm%2BKj179BaH5g/HHMcwRaYAgMAd9AmHSWb1jEt0phyXUmFQbQlhaBvzsLfe%2B%2BtnYACUAAcTolSGAAOJXSdBNKaAC%2B5LCbk7ceLs3Yh0unSa6zJo7BwDmHaE7tI7R08HHbaidu7OlTunTO2dc752rs7Uu5ciCV2rkYO2dcG5xFiOtVu5h26d3rvApBhCnThCcNgEemBnaTziDPfmepNEtDcq4aSol15EGvqAns/MjC2ByA4VADsHz83kc4ZSykZpzQWmpZ0ShVrKSdF49a2hNrbRHqBD8O0limz0bJCAISnS2DPFcFamkBLeMSSndAyB1h52iTw3aUSzyMU8d49xLAHHLUKQJY6Fozo7DtFrQE6BgQLgLKib0IZEwtCOAATjKG0540DirPDaSoeMQMTqZn0udcE9BXh3VuCWKyZZjC1ysI5fhCzAyxSYIbY2DsmBnGQJfPoVRdmoHoBATQ4pNBLDpCLDUWBzmpFQCLKImgVRqmufw9IHYoi2HvuKKYOhgBsB7OYegPIsBTAPsAXsNpCgYBXPPYFcI/iqliEKIYHZ4rii2poKx9ytxTHFGgHARBrnz1QKXEcGhwVbXsI0yoZw6A8RwPqUU1yBzeQBn5AKHYQZgzhBDCU5wIpRTnL9TFeQoAfUFbOPwJAzBMAiL42gWASUzDKFGN00CIyWQlagaB41MAt1sLYQwSrLwMB6SoZauIbiL0SsC/QhgSWoGtmKoiTUYJJQ3PVfckVBqVSJgVamuUcZlS5pVCmKx0Jetps1SmbVQ2dRZj1QNibOboyZsNAsjpyhmnKaMuEOYXaQOkE6DZJtlYvwiE6CADpMAe3dFcfQd1gyhWNC0Z4ZIyjLTJMaOMsYkwap0iM60%2BbxkgHzE2nSzwzojrZBOkld41xkiAA%3D%3D%3D
+Android Kotlin IDE=https://godbolt.org/#z:OYLghAFBqd5QCxAFwE4FN0BoCWIIDGAtgIYDW6AgqsAM4gDkAtACIDCAspQNICiA%2BgCEAqgEkAMi34AVAJoAFXgFIAzCxboARgFdgDLAQD2RAA44ANulTiSAO2DaSwdKIAmIO69SGcrpmUNkcxxbA21aZGMAeW1kE1iAMQt0WxIidEZ9ADNk%2Blh0VxxI1DcQAEYsHMtSiqqUtIyTbzqAOibDLJbkAA9kLFAGfRxaUVsCc21XAsYyodoOEhCAZUNtVAIMhlncWiiTFMYABn1zO2BSwYBKLAgCosMS9wAmSuTSl7rU9JB0brSTSwtMh9AZzUbjSbTBjHHYLZardabGHDPYHaEnM4XBjXW6FYqlFSvaruAAsRPq33aDhIqFcLQIWWA/UyO3BEym7i2czhthWaw2MzmqNsRwx9ixl2uw045HQ8m8ACt0ARkIKsArylhbOgAO5JYkgACs13MjEN%2BhF6KwhkY0gw6AA1Eoniptqr0ZKsAh0CQpqh8NcyCAnmUWgA2Q6G11lEkklRxmMATiwpoYJItoutLPohyw7uOOJgiBARimvDxD1w%2BE%2BDRA7Va9a6vUqhlsyCWBBIlnKZKyreQwlocu6mY1FVO9g8ti8Pj8ASCISwQ8sKpwrfwKVcbEMEyIIuTm/EIXQADltERNFYQISTIZaEU17Zt7v91hb/fkI%2Bj9qzxer4Tl2VT9WyWZAaWQZ9z1fQDVxAsDUGQb9T3PS9/QA%2BCIJ3KCQGTCJwKQ39UOva5aARAUGAACSWeRxCWABHRwMFUQQmFUZQVDYEIijYiBLgANSUQ5KComj6MY9BmNYlReFoBiaXQCBREuURBMoWi5KYlRBGxFMzQzLks3rZI2maJs%2BnzHSICQUt0HLe5UCrCAa0pbxqVpelGRbNsOy7DIYy8gch3kEcrQ1QkJ1ATxvF8fxAmCUIYOAkVbmnSC901Q9j0Iq8KnfB9WzSkVcrvfLbAIlCcqXdAVyS0DwMKzVEsfOqEPKv9/QqPCEIazqMLaoiyhIsjNn8TATAdcYSFoWgHTE%2BSnQAdkEB14k0YICAdAAqZjFpYHTU3NLVMxtKlGLpBkmQsnFrMMMsKwcvAnOSL4Ml%2Bf5AWBAKfO7fy%2BzbQdh1HYMUzOKcZxi%2Bd4qqmrHw3VKsPSipMp/CqOrDN8SqSnqMY/L8stR8p0aauD6oRoroaA5q%2Bvx9rCaXDDsa6xCaYGsMhv5TYAHpOYdaQAE99gdPmEQm27HW9DAsAdB4HXMQxfQdOwHTe0xAVU7n1Z5qZuieeXkBW5pkiYBxfAKUXTAsEgkpATWHUoVxXCdJ4niMwFGx6ZBnSeB1Iidp42UhR26loL3FenCb1rIH3vQdDAsgwWgEAdHRkEiWxFc9oTuejx1NECSIiGlrIc/NsxLFQaXYnifWTDsaqWgdBIZeQGPXcdPtUFIPoHSHCSs55hBU5MehuamAA3arDH2VAWii2d6WMTnIjMAhOenjvSDGdBOc0KbquPNvaE5zfHHMcw%2BaYAgMCt9AmHSKa1gkl0phybUmFQbRLFoO%2B7FP8/NdtgAJQABwOnlIYAA4mdB0FB0DjQ/pYB0IRq4237nbB2ftTo0nOoyUOvsvYBw5A6YOodPARxwAQKOLdHRxwTknFOacM4l1tnnVOxgi4lyMBbculc4ixBWnXcwDcm4V3AVA7BDpwhOGwD3TAttB5xBHpzHUKiWhuVcLJcSC8iDH1/l2TmRhbA5AcKgK2j5OZSOcKpVSq11oRymjNOaGBFqCFUg6dxxDtDp00fJCAthzwgAdKMZAlxAnBKdGoB0/jC6bSieeaxC0WCqX2npI6VobQqwBOgIE5lRSeiDCSBaLRYyGhJE8Q4C0FokhjGUKpuk0z6RhDaQYS5gZXRuEWKyJZjBlysI5LhvT/SQxCEwbWusrZMFOMgdAEQiTTNQPQCAmhMyaBCDSPmapVmpFQHzKImglQqjVFw9IbYoi2HPpmKYOhgBsC7OYegBkpib2AN2K0hQMCrgng8mEvxlSxE2NsEI0zUwwmCJoUxOztxTEzGgHARA1QT1QHnIcGhnnxQGAWSopw6B8RwLqYUao/rtk7D9Xs/YAbBSBi8CKYNopzjiouMFeQoAvVpbOJgJAzBMAiNoTQtAsCIpmGUMMYYXTALDJZVlqBgGjTgXYWwhgBVXgYMAlQKgFrYmuFPJKDz9CGERagU2zKSLVUpuuFKW4yYZWnP1SqeUsZWuKrjVstqOoU1gryBmjr3W1WpijWmvVSYvkan65CAbrhoEwOUE0qTLRNMYHbQB0gHRjL1rLG%2BEQHQQDtJgJ2rpLj6CuoGa8hwWiJhJImJ4YZKnAKeGU6twD6npjSfGlpOY8x5JjQwJ4jS9UsiLUqhZsMSRAA%3D
diff --git a/etc/nsjail/compilers-and-tools.cfg b/etc/nsjail/compilers-and-tools.cfg
index 96e8c1e75..7230f33eb 100644
--- a/etc/nsjail/compilers-and-tools.cfg
+++ b/etc/nsjail/compilers-and-tools.cfg
@@ -181,6 +181,12 @@ mount {
     fstype: "proc"
 }
 
+mount {
+    src: "/sys/devices/system/cpu"
+    dst: "/sys/devices/system/cpu"
+    is_bind: true
+}
+
 mount {
     src: "/opt/compiler-explorer"
     dst: "/opt/compiler-explorer"
diff --git a/lib/base-compiler.ts b/lib/base-compiler.ts
index d8ae097fc..cd51174ac 100644
--- a/lib/base-compiler.ts
+++ b/lib/base-compiler.ts
@@ -22,7 +22,6 @@
 // ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 // POSSIBILITY OF SUCH DAMAGE.
 
-import stream from 'node:stream';
 import os from 'os';
 import path from 'path';
 
@@ -93,7 +92,7 @@ import {InstructionSets} from './instructionsets.js';
 import {languages} from './languages.js';
 import {LlvmAstParser} from './llvm-ast.js';
 import {LlvmIrParser} from './llvm-ir.js';
-import * as compilerOptInfo from './llvm-opt-transformer.js';
+import {LLVMOptInfo, processRawOptRemarks} from './llvm-opt-transformer.js';
 import {logger} from './logger.js';
 import {getObjdumperTypeByKey} from './objdumper/index.js';
 import {ClientOptionsType, OptionsHandlerLibrary, VersionInfo} from './options-handler.js';
@@ -104,7 +103,6 @@ import {LlvmPassDumpParser} from './parsers/llvm-pass-dump-parser.js';
 import type {PropertyGetter} from './properties.interfaces.js';
 import {propsFor} from './properties.js';
 import {HeaptrackWrapper} from './runtime-tools/heaptrack-wrapper.js';
-import {SentryCapture} from './sentry.js';
 import * as StackUsageTransformer from './stack-usage-transformer.js';
 import {
     clang_style_sysroot_flag,
@@ -1293,11 +1291,11 @@ export class BaseCompiler implements ICompiler {
         produceCfg: boolean,
         filters: ParseFiltersAndOutputOptions,
     ) {
-        // These options make Clang produce an IR
         const newOptions = options
-            // `-E` causes some mayhem. See #5854
-            .filter(option => option !== '-fcolor-diagnostics' && option !== '-E')
-            .concat(unwrap(this.compiler.irArg));
+            // `-E` /`-fsave-optimization-record` switches caused simultaneus writes into some output files,
+            // see bugs #5854 / #6745
+            .filter(option => !['-fcolor-diagnostics', '-E', '-fsave-optimization-record'].includes(option))
+            .concat(unwrap(this.compiler.irArg)); // produce IR
 
         if (irOptions.noDiscardValueNames && this.compiler.optPipeline?.noDiscardValueNamesArg) {
             newOptions.push(...this.compiler.optPipeline.noDiscardValueNamesArg);
@@ -2927,30 +2925,14 @@ export class BaseCompiler implements ICompiler {
     }
 
     async processOptOutput(optPath: string) {
-        const output: compilerOptInfo.LLVMOptInfo[] = [];
-
-        const optStream = stream.pipeline(
-            fs.createReadStream(optPath, {encoding: 'utf8'}),
-            new compilerOptInfo.LLVMOptTransformer(),
-            async err => {
-                if (err) {
-                    logger.error(`Error handling opt output: ${err}`);
-                    SentryCapture(err, `Error handling opt output: ${await fs.readFile(optPath, 'utf8')}`);
-                }
-            },
-        );
-
-        for await (const opt of optStream as AsyncIterable<compilerOptInfo.LLVMOptInfo>) {
-            if (opt.DebugLoc && opt.DebugLoc.File && opt.DebugLoc.File.includes(this.compileFilename)) {
-                output.push(opt);
-            }
-        }
+        const optRemarksRaw = await fs.readFile(optPath, 'utf8');
+        const output: LLVMOptInfo[] = processRawOptRemarks(optRemarksRaw, this.compileFilename);
 
         if (this.compiler.demangler) {
             const result = JSON.stringify(output, null, 4);
             const demangleResult: UnprocessedExecResult = await this.exec(
                 this.compiler.demangler,
-                [...this.compiler.demanglerArgs, '-n', '-p'],
+                [...this.compiler.demanglerArgs, '-n'],
                 {input: result},
             );
             if (demangleResult.stdout.length > 0 && !demangleResult.truncated) {
@@ -2966,7 +2948,7 @@ export class BaseCompiler implements ICompiler {
         return output;
     }
 
-    async processStackUsageOutput(suPath) {
+    async processStackUsageOutput(suPath): Promise<StackUsageTransformer.StackUsageInfo[]> {
         const output = StackUsageTransformer.parse(await fs.readFile(suPath, 'utf8'));
 
         if (this.compiler.demangler) {
@@ -2974,7 +2956,7 @@ export class BaseCompiler implements ICompiler {
             try {
                 const demangleResult = await this.exec(
                     this.compiler.demangler,
-                    [...this.compiler.demanglerArgs, '-n', '-p'],
+                    [...this.compiler.demanglerArgs, '-n'],
                     {input: result},
                 );
                 return JSON.parse(demangleResult.stdout);
diff --git a/lib/compilers/r8.ts b/lib/compilers/r8.ts
index 511f75028..c89b543fb 100644
--- a/lib/compilers/r8.ts
+++ b/lib/compilers/r8.ts
@@ -144,6 +144,7 @@ export class R8Compiler extends D8Compiler implements SimpleOutputFilenameCompil
             '-cp',
             this.compiler.exe, // R8 jar.
             'com.android.tools.r8.R8',
+            ...this.getProguardConfigArguments(execOptions.customCwd),
             ...this.getR8LibArguments(),
             ...userOptions,
             ...this.getMinApiArgument(useDefaultMinApi),
@@ -171,4 +172,13 @@ export class R8Compiler extends D8Compiler implements SimpleOutputFilenameCompil
         }
         return libArgs;
     }
+
+    getProguardConfigArguments(dir: string): string[] {
+        const proguardCfgArgs: string[] = [];
+        const proguardCfgPath = `${dir}/proguard.cfg`;
+        if (fs.existsSync(proguardCfgPath)) {
+            proguardCfgArgs.push('--pg-conf', proguardCfgPath);
+        }
+        return proguardCfgArgs;
+    }
 }
diff --git a/lib/llvm-opt-transformer.ts b/lib/llvm-opt-transformer.ts
index 606144a60..6e03994e3 100644
--- a/lib/llvm-opt-transformer.ts
+++ b/lib/llvm-opt-transformer.ts
@@ -17,13 +17,10 @@
 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 // SOFTWARE.
 
-import {Transform, TransformCallback, TransformOptions} from 'stream';
-
-import yaml from 'yaml';
+import {parseAllDocuments} from 'yaml';
 
 import {logger} from './logger.js';
 
-type Path = string;
 type OptType = 'Missed' | 'Passed' | 'Analysis';
 
 type OptInfo = {
@@ -40,7 +37,7 @@ export type LLVMOptInfo = OptInfo & {
 };
 
 type DebugLoc = {
-    File: Path;
+    File: string;
     Line: number;
     Column: number;
 };
@@ -63,65 +60,27 @@ function DisplayOptInfo(optInfo: LLVMOptInfo) {
     return displayString;
 }
 
-const optTypeMatcher = /---\s(.*)\r?\n/;
-const docStart = '---';
-const docEnd = '\n...';
-const IsDocumentStart = (x: string) => x.startsWith(docStart);
-const FindDocumentEnd = (x: string) => {
-    const index = x.indexOf(docEnd);
-    return {found: index > -1, endpos: index + docEnd.length};
-};
-const splitAt = (index, xs) => [xs.slice(0, index), xs.slice(index)];
-
-export class LLVMOptTransformer extends Transform {
-    _buffer: string;
-    _prevOpts: Set<string>; // Avoid duplicate display of remarks
-    constructor(options?: TransformOptions) {
-        super({...options, objectMode: true});
-        this._buffer = '';
-        this._prevOpts = new Set<string>();
-    }
-
-    override _flush(done: TransformCallback) {
-        this.processBuffer();
-        done();
-    }
-
-    override _transform(chunk: any, encoding: string, done: TransformCallback) {
-        // See https://stackoverflow.com/a/40928431/390318 - we have to catch all exceptions here
-        try {
-            this._buffer += chunk.toString();
-            this.processBuffer();
-        } catch (exception) {
-            done(exception as Error);
-            return;
+export function processRawOptRemarks(buffer: string, compileFileName: string = ''): LLVMOptInfo[] {
+    const output: LLVMOptInfo[] = [];
+    const remarksSet: Set<string> = new Set<string>();
+    const remarks: any = parseAllDocuments(buffer);
+    for (const doc of remarks) {
+        if (doc.errors !== undefined && doc.errors.length > 0) {
+            logger.warn('YAMLParseError: ' + JSON.stringify(doc.errors[0]));
+            continue;
         }
-        done();
-    }
 
-    processBuffer() {
-        while (IsDocumentStart(this._buffer)) {
-            const {found, endpos} = FindDocumentEnd(this._buffer);
-            if (found) {
-                const [head, tail] = splitAt(endpos, this._buffer);
-                const optTypeMatch = head.match(optTypeMatcher);
-                const opt = yaml.parse(head, {logLevel: 'error'});
-                const strOpt = JSON.stringify(opt);
-                if (!this._prevOpts.has(strOpt)) {
-                    this._prevOpts.add(strOpt);
+        const opt = doc.toJS();
+        if (!opt.DebugLoc || !opt.DebugLoc.File || !opt.DebugLoc.File.includes(compileFileName)) continue;
 
-                    if (optTypeMatch) {
-                        opt.optType = optTypeMatch[1].replace('!', '');
-                    } else {
-                        logger.warn('missing optimization type');
-                    }
-                    opt.displayString = DisplayOptInfo(opt);
-                    this.push(opt as LLVMOptInfo);
-                }
-                this._buffer = tail.replace(/^\n/, '');
-            } else {
-                break;
-            }
+        const strOpt = JSON.stringify(opt);
+        if (!remarksSet.has(strOpt)) {
+            remarksSet.add(strOpt);
+            opt.optType = doc.contents.tag.substring(1); // remove leading '!'
+            opt.displayString = DisplayOptInfo(opt);
+            output.push(opt as LLVMOptInfo);
         }
     }
+
+    return output;
 }
diff --git a/lib/stack-usage-transformer.ts b/lib/stack-usage-transformer.ts
index 7e8ec3a5e..15becdb84 100644
--- a/lib/stack-usage-transformer.ts
+++ b/lib/stack-usage-transformer.ts
@@ -36,7 +36,7 @@ type DebugLoc = {
     Column: number;
 };
 
-export function parse(suText: string) {
+export function parse(suText: string): StackUsageInfo[] {
     const output: StackUsageInfo[] = [];
     for (const line of suText.split('\n').filter(Boolean)) {
         const c = line.split('\t');
diff --git a/static/styles/themes/dark-theme.scss b/static/styles/themes/dark-theme.scss
index 81f2efc58..f01ad2545 100644
--- a/static/styles/themes/dark-theme.scss
+++ b/static/styles/themes/dark-theme.scss
@@ -462,7 +462,6 @@ textarea.form-control {
 }
 
 .stack-usage {
-    font-size: x-small;
     &.static {
         background: #4f4f18 !important;
     }
@@ -477,7 +476,6 @@ textarea.form-control {
 }
 
 .opt-line {
-    font-size: x-small;
     &.analysis {
         background: #4f4f18;
     }
diff --git a/static/styles/themes/one-dark-theme.scss b/static/styles/themes/one-dark-theme.scss
index bf734a602..af7e35e06 100644
--- a/static/styles/themes/one-dark-theme.scss
+++ b/static/styles/themes/one-dark-theme.scss
@@ -518,7 +518,6 @@ textarea.form-control {
 }
 
 .stack-usage {
-    font-size: x-small;
     &.static {
         background: #4f4f18 !important;
     }
@@ -533,7 +532,6 @@ textarea.form-control {
 }
 
 .opt-line {
-    font-size: x-small;
     &.analysis {
         background: #4f4f18;
     }
diff --git a/static/styles/themes/pink-theme.scss b/static/styles/themes/pink-theme.scss
index fd3cd78dd..16cbf45be 100644
--- a/static/styles/themes/pink-theme.scss
+++ b/static/styles/themes/pink-theme.scss
@@ -484,7 +484,6 @@ textarea.form-control {
 }
 
 .stack-usage {
-    font-size: x-small;
     &.static {
         background: #fdfd96 !important;
     }
@@ -499,7 +498,6 @@ textarea.form-control {
 }
 
 .opt-line {
-    font-size: x-small;
     &.analysis {
         background: #fdfd96;
     }


Test patch:
diff --git a/test/llvm-opt-transformer-test.ts b/test/llvm-opt-transformer-test.ts
index 364180641..cf3fbc451 100644
--- a/test/llvm-opt-transformer-test.ts
+++ b/test/llvm-opt-transformer-test.ts
@@ -17,12 +17,9 @@
 // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 // SOFTWARE.
 
-import * as stream from 'stream';
-
 import {describe, expect, it} from 'vitest';
-import {YAMLParseError} from 'yaml';
 
-import {LLVMOptTransformer} from '../lib/llvm-opt-transformer.js';
+import {processRawOptRemarks} from '../lib/llvm-opt-transformer.js';
 
 describe('LLVM opt transformer', () => {
     it('should work', async () => {
@@ -45,15 +42,8 @@ Args:
   - String:          ' instructions in function'
 ...
 `;
-        const readString = new stream.PassThrough();
-        readString.push(doc);
-        readString.end();
-        const optStream = readString.pipe(new LLVMOptTransformer());
 
-        const output: object[] = [];
-        for await (const opt of optStream) {
-            output.push(opt);
-        }
+        const output: object[] = processRawOptRemarks(doc);
         expect(output).toEqual([
             {
                 Args: [
@@ -97,24 +87,4 @@ Args:
             },
         ]);
     });
-    it('should error with unparseable yaml data', async () => {
-        const doc = `--- !Analysis
-broken: not a yaml doc
-broken: duplicate key makes this invalid
-...
-`;
-        const readString = new stream.PassThrough();
-        readString.push(doc);
-        readString.end();
-        await expect(
-            (async () => {
-                const optStream = stream.pipeline(readString, new LLVMOptTransformer(), res => {
-                    return res;
-                });
-                for await (const _ of optStream) {
-                    // just consume
-                }
-            })(),
-        ).rejects.toThrow(YAMLParseError);
-    });
 });