[all-commits] [llvm/llvm-project] c4c4f2: [libc][baremetal][NFC] cache away redundant freeli...
Schrodinger ZHU Yifan via All-commits
all-commits at lists.llvm.org
Wed Jul 15 11:25:05 PDT 2026
Branch: refs/heads/main
Home: https://github.com/llvm/llvm-project
Commit: c4c4f207590a1569b5c30ffe2f204f5d0d535a68
https://github.com/llvm/llvm-project/commit/c4c4f207590a1569b5c30ffe2f204f5d0d535a68
Author: Schrodinger ZHU Yifan <yfzhu at google.com>
Date: 2026-07-15 (Wed, 15 Jul 2026)
Changed paths:
M libc/src/__support/freelist.cpp
Log Message:
-----------
[libc][baremetal][NFC] cache away redundant freelist memory access during push and pop (#208282)
By explicitly caching Node *next = node->next; and Node *prev =
node->prev; at function entry:
#### Before (Original):
```llvm
13: ; preds = %6
%14 = load ptr, ptr %1, align 8 ; Load node->prev
%15 = getelementptr inbounds nuw i8, ptr %14, i64 8
store ptr %8, ptr %15, align 8 ; Store next to prev->next
%16 = load ptr, ptr %7, align 8 ; <--- REDUNDANT LOAD of node->next
store ptr %14, ptr %16, align 8 ; Store prev to next->prev
%17 = icmp eq ptr %3, %1
br i1 %17, label %18, label %20
18: ; preds = %13, %10
%19 = phi ptr [ null, %10 ], [ %16, %13 ]
store ptr %19, ptr %0, align 8
```
#### After (Manual GVN in remove ):
```llvm
13: ; preds = %6
%14 = load ptr, ptr %1, align 8 ; Load node->prev
%15 = getelementptr inbounds nuw i8, ptr %14, i64 8
store ptr %8, ptr %15, align 8 ; Store next to prev->next
store ptr %14, ptr %8, align 8 ; <--- REUSES CACHED %8 DIRECTLY
%16 = icmp eq ptr %3, %1
br i1 %16, label %17, label %19
17: ; preds = %13, %10
%18 = phi ptr [ null, %10 ], [ %8, %13 ] ; <--- REUSES CACHED %8 IN PHI NODE
store ptr %18, ptr %0, align 8
```
### 2. Compiler Optimization Remarks & LTO Impact
1. GVN Diagnostics:
• Before: freelist.cpp:41:11: remark: load of type ptr not eliminated
[-Rpass-missed=gvn]
• After: Clean (0 missed GVN remarks).
2. LTO (Link-Time Optimization) & Code Size:
Eliminates 1 memory read ( MOV64rm ) and 1 memory store ( MOV64mr ) at
every inlined call site in malloc / free.
Assisted-by: Gemini based automation tool (human-in-the-loop)
To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications
More information about the All-commits
mailing list