2023 Summary
Posted on
Summary
This year marks my first continuous involvement in open-source contributions. I've fixed numerous mis-compilation, added missing optimizations, and included LTO, debugging info, built-in functions, WebAssembly, and even an issue with Apple Silicon.
During this journey, I was fortunate to receive numerous invaluable help, especially from those who reviewed my pull requests. Thank everyone very much. (●´∀`●)
Highlight:
- Resolving a long-standing issue causing debugging info corruption under LTO.
- Adding the crate for built-in functions to LTO in Rust, addressing another long-standing issue.
- Adopting the English name "Quentin Dian" for better communication.
I've categorized my contributions using these emojis:
- 💢 Mis-compilation
- 🍻 Missing optimization
- ℹ️ Debugging info
- 🦀 Rust-related
- 🐉 LLVM-related
- 🐦 Swift-related
- 🍎 Apple-related
- ⏳ Blocked by other issues
LLVM
Commit history: https://github.com/llvm/llvm-project/commits?author=DianQK&since=2023-01-01&until=2023-12-31.
By the way, my first LLVM commit was [MachineOutliner] Fix the side effect of outlined function when the register is implicit use and implicit-def in the same instruction. D112911.
- 🍻🦀⏳ [SimplifyCFG] Check if the return instruction causes undefined behavior D144319 Blocked by PR69498
- 🍻⏳ [SimplifyCFG] Improve the precision of
PtrValueMayBeModified
D144563 Follows D144319, not blocked by PR69498 - 💢🦀 [SROA] Remove UB-implying metadata when promoting speculative instruction. D148456 Fixes PR110256
- 💢🦀 [GlobalOpt] Don't replace the aliasee if it has other references. D145293 Fixes PR108030
- 🦀🐦ℹ️ [Verifier] definition subprograms cannot be nested within DICompositeType when enabling ODR. D152095
- 🐦ℹ️ [Coroutine][DebugInfo] Update the linkage name of the declaration of coro-split functions in the debug info. D157184
- 💢🦀 [TailCallElim] Remove the readonly attribute of byval. D156793
- 💢🦀 [JumpThreading] Invalidate LVI after combineMetadataForCSE. #65219
- 🍻🦀 [EarlyCSE] Compare GEP instructions based on offset #65875
- 🍻🦀 [SimplifyCFG] Hoist common instructions on switch #67077
- 💢🦀 [MemCpyOpt] Merge alias metadatas when replacing arguments #67539
- 💢🦀 [LVI][CVP] Treat undef like a full range #68190
- 💢 [LVI][CVP] Treat undef like a full range on abs(x, false) #68711
- 💢🦀 [MemCpyOpt] Combine alias metadatas when replacing byval arguments #70580
- 💢🦀🍎 [AArch64] ORRWrs is copy instruction when there's no implicit def of the X register #75184
Rust
Commit history: https://github.com/rust-lang/rust/commits?author=DianQK&since=2023-01-01&until=2023-12-31.
Apart from simple pull requests like updating test cases, my contributions mainly revolved around built-ins and LTO:
- Add the
no-builtins
attribute to functions whenno_builtins
is applied at the crate level. #113716 - Restore
#![no_builtins]
crates participation in LTO. #113923 - Add thinlto support to codegen, assembly and coverage tests #118036
- Avoid adding builtin functions to
symbols.o
#118568
Despite addressing many issues during this process, unfortunately, there are still some known issues that need resolution. I'll submit MCP once these issues are resolved.
Ruslin
I use Joplin for note-taking, but I don't want Joplin's Android client. Hence, I developed a compatible client: ruslin-android. I apologize for the lack of recent updates. I plan to adjust my spare time next year. I'm also considering desktop development.
Other Projects
- ℹ️🍎 [swift][IRGen][DebugInfo] split method declaration and definition. #67077
- ℹ️🍎 [swift][Backtracing][Linux] Support the
DW_AT_specification
attribute. #67592 - 🦀 [wasm3] Fix the issue of incorrectly freeing the stack address when unwinding local functions. #436
- 🦀 [dioxus] Fix the issue of duplicate unique ID for atoms using
newtype
. #1112
Personal Details
DianQK is just a casual Chinese pseudonym formed from the pinyin abbreviation of "靛(dian)" and "青(qing)", where "靛青" refers to indigo. It has led to confusion about how to call me. To resolve this, I asked ChatGPT for a name: Quentin Dian. So, you can call me Dian or dianqk.
I switched entirely from Arch Linux to NixOS, a fantastic operating system where I can manage everything with code.
To enhance my efficiency, I also purchased a GPD handheld console. I complete most of the code above using the GPD during my subway commutes. I assembled a machine with a 7950X processor, cutting my local build time in half. I can now complete a full compile in just a few minutes. I also bought a Mac Mini (M2) to test issues on that platform.