[PATCH] D125699: [StackColoring] Don't merge slots with differing StackIDs

Fraser Cormack via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue May 17 00:41:24 PDT 2022


This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG599ff247dee8: [StackColoring] Don't merge slots with differing StackIDs (authored by frasercrmck).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D125699/new/

https://reviews.llvm.org/D125699

Files:
  llvm/lib/CodeGen/StackColoring.cpp
  llvm/test/CodeGen/RISCV/rvv/stack-coloring-scalablevec.mir


Index: llvm/test/CodeGen/RISCV/rvv/stack-coloring-scalablevec.mir
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/RISCV/rvv/stack-coloring-scalablevec.mir
@@ -0,0 +1,39 @@
+# RUN: llc -mtriple riscv64 -mattr=+m,+v -run-pass=stack-coloring \
+# RUN:     -riscv-v-vector-bits-min=512 -o - %s | FileCheck %s
+
+# Test that a scalable slot (%stack.1) is not merged into a non-scalable one
+# (%stack.0)
+
+# CHECK:    {{^}}stack:
+# CHECK-NEXT: - { id: 0,
+# CHECK:      - { id: 1,
+
+--- |
+  define dso_local void @dont_merge() {
+  entry:
+    %buf1 = alloca <4 x i32>
+    %buf2 = alloca <vscale x 4 x i32>
+    ret void
+  }
+
+...
+---
+name:            dont_merge
+tracksRegLiveness: true
+stack:
+  - { id: 0, name: buf1, size: 16, alignment: 16 }
+  - { id: 1, name: buf2, size: 16, alignment: 16, stack-id: scalable-vector }
+body:             |
+  bb.0.entry:
+    liveins: $v8, $v10, $x10, $x11
+
+    LIFETIME_START %stack.0
+    PseudoVSPILL_M1 killed renamable $v8, %stack.0 :: (store 16 into %stack.0, align 16)
+    renamable $v8 = PseudoVRELOAD_M1 killed $x10 :: (load 16 from %stack.0, align 16)
+    LIFETIME_END %stack.0
+    LIFETIME_START %stack.1
+    PseudoVSPILL_M2 killed renamable $v10m2, %stack.1 :: (store unknown-size into %stack.1, align 16)
+    renamable $v10m2 = PseudoVRELOAD_M2 killed $x11 :: (load unknown-size from %stack.1, align 16)
+    LIFETIME_END %stack.1
+    PseudoRET
+...
Index: llvm/lib/CodeGen/StackColoring.cpp
===================================================================
--- llvm/lib/CodeGen/StackColoring.cpp
+++ llvm/lib/CodeGen/StackColoring.cpp
@@ -1320,6 +1320,11 @@
 
         int FirstSlot = SortedSlots[I];
         int SecondSlot = SortedSlots[J];
+
+        // Objects with different stack IDs cannot be merged.
+        if (MFI->getStackID(FirstSlot) != MFI->getStackID(SecondSlot))
+          continue;
+
         LiveInterval *First = &*Intervals[FirstSlot];
         LiveInterval *Second = &*Intervals[SecondSlot];
         auto &FirstS = LiveStarts[FirstSlot];


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D125699.429950.patch
Type: text/x-patch
Size: 2088 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220517/cf8f29e7/attachment.bin>


More information about the llvm-commits mailing list