Repository: compiler-explorer/compiler-explorer
Pull request #6736 (2024-07-31 06:27:13)

Changes for NVIDIA HPC SDK 24.7
Add HPC SDK 24.7 to etc/config/c++.amazon.properties
Add CUDA 12.5 to etc/config/cuda.amazon.properties



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/ruby.amazon.properties b/etc/config/ruby.amazon.properties
index 3dad9e1aa..6f8e45633 100644
--- a/etc/config/ruby.amazon.properties
+++ b/etc/config/ruby.amazon.properties
@@ -1,18 +1,25 @@
 compilers=&ruby
-defaultCompiler=ruby322
+defaultCompiler=ruby334
 
-group.ruby.compilers=ruby322:ruby302:ruby274:ruby268:ruby259
+group.ruby.compilers=ruby334:ruby324:ruby316:ruby307:ruby278:ruby268:ruby259
 group.ruby.isSemVer=true
 group.ruby.baseName=Ruby
 group.ruby.groupName=Ruby YARV
 group.ruby.compilerType=ruby
 
-compiler.ruby322.semver=3.2.2
-compiler.ruby322.exe=/opt/compiler-explorer/ruby-3.2.2/bin/ruby
-compiler.ruby302.semver=3.0.2
-compiler.ruby302.exe=/opt/compiler-explorer/ruby-3.0.2/bin/ruby
-compiler.ruby274.semver=2.7.4
-compiler.ruby274.exe=/opt/compiler-explorer/ruby-2.7.4/bin/ruby
+compiler.ruby334.semver=3.3.4
+compiler.ruby334.exe=/opt/compiler-explorer/ruby-3.3.4/bin/ruby
+compiler.ruby324.semver=3.2.4
+compiler.ruby324.exe=/opt/compiler-explorer/ruby-3.2.4/bin/ruby
+compiler.ruby324.alias=ruby322
+compiler.ruby316.semver=3.1.6
+compiler.ruby316.exe=/opt/compiler-explorer/ruby-3.1.6/bin/ruby
+compiler.ruby307.semver=3.0.7
+compiler.ruby307.exe=/opt/compiler-explorer/ruby-3.0.7/bin/ruby
+compiler.ruby307.alias=ruby302
+compiler.ruby278.semver=2.7.8
+compiler.ruby278.exe=/opt/compiler-explorer/ruby-2.7.8/bin/ruby
+compiler.ruby278.alias=ruby274
 compiler.ruby268.semver=2.6.8
 compiler.ruby268.exe=/opt/compiler-explorer/ruby-2.6.8/bin/ruby
 compiler.ruby259.semver=2.5.9
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/lib/tooling/llvm-mca-tool.ts b/lib/tooling/llvm-mca-tool.ts
index 763cf7d70..dd5fce9b6 100644
--- a/lib/tooling/llvm-mca-tool.ts
+++ b/lib/tooling/llvm-mca-tool.ts
@@ -47,12 +47,33 @@ export class LLVMMcaTool extends BaseTool {
 
     override async runTool(compilationInfo: Record<any, any>, inputFilepath?: string, args?: string[]) {
         const isets = new InstructionSets();
-        const target = isets.getInstructionSetTarget(compilationInfo.compiler.instructionSet);
-        if (target != null) args?.push('-mtriple=' + target);
+        let target = isets.getInstructionSetTarget(compilationInfo.compiler.instructionSet);
+        const prependArgs: string[] = [];
 
+        // Check if compiler target is overridden with --target=<foo> or -target <foo>.
+        let argIsTarget = false;
         for (const arg of compilationInfo.options) {
-            if (arg.startsWith('-mcpu') || arg.startsWith('-march') || arg.startsWith('-mtriple')) {
-                args?.push(arg);
+            if (arg.startsWith('--target=')) target = arg.replace(/^--target=/, '');
+            if (argIsTarget) {
+                target = arg;
+                argIsTarget = false;
+            }
+            if (arg === '-target') argIsTarget = true;
+        }
+
+        if (target) prependArgs.push('-mtriple=' + target);
+
+        let haveCPU = false;
+        let haveM32 = false;
+        for (const arg of compilationInfo.options) {
+            if (arg.startsWith('-march') && (target?.startsWith('x86_64') || target?.startsWith('i386'))) {
+                prependArgs.push(arg.replace(/^-march=/, '-mcpu='));
+                haveCPU = true;
+            }
+            if (arg === '-m32') haveM32 = true;
+            if (arg.startsWith('-mcpu')) {
+                prependArgs.push(arg);
+                haveCPU = true;
             }
         }
 
@@ -60,8 +81,25 @@ export class LLVMMcaTool extends BaseTool {
             return this.createErrorResponse('<cannot run analysis on binary>');
         }
 
+        // If no other CPU specified, default to mcpu=generic to
+        // override llvm-mca's default of -mcpu=native, otherwise MCA's
+        // CPU analysis varies according to the machine MCA happens to
+        // run on which can change over time.
+        if (!haveCPU) {
+            prependArgs.push('-mcpu=generic');
+        }
+
+        if (target?.startsWith('x86_64') && haveM32) {
+            prependArgs.push('-march=x86'); // (i.e. i686).
+        }
+
+        // Prepend the detected arguments, so that user specified come
+        // later (and therefore can be used to override the detected
+        // ones above).
+        const newArgs: string[] = prependArgs.concat(args || []);
+
         const rewrittenOutputFilename = compilationInfo.outputFilename + '.mca';
         await this.writeAsmFile(compilationInfo.asm, rewrittenOutputFilename);
-        return super.runTool(compilationInfo, rewrittenOutputFilename, args);
+        return super.runTool(compilationInfo, rewrittenOutputFilename, newArgs);
     }
 }
diff --git a/package-lock.json b/package-lock.json
index e6cf75916..99ac96e00 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -5770,9 +5770,9 @@
       }
     },
     "node_modules/caniuse-lite": {
-      "version": "1.0.30001639",
-      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001639.tgz",
-      "integrity": "sha512-eFHflNTBIlFwP2AIKaYuBQN/apnUoKNhBdza8ZnW/h2di4LCZ4xFqYlxUxo+LQ76KFI1PGcC1QDxMbxTZpSCAg==",
+      "version": "1.0.30001645",
+      "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001645.tgz",
+      "integrity": "sha512-GFtY2+qt91kzyMk6j48dJcwJVq5uTkk71XxE3RtScx7XWRLsO7bU44LOFkOZYR8w9YMS0UhPSYpN/6rAMImmLw==",
       "funding": [
         {
           "type": "opencollective",
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);
-    });
 });