[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