Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[StackColoring] Don't merge slots with differing StackIDs
The documentation for this specifically mentions that this should not happen. We could think about adding target hooks to permit it (and how to merge IDs) in the future if that is desirable. This specific test case was merging a scalable-vector slot into a non-scalable one and dropping the notion of scalability, meaning we failed to allocate enough stack space for the object. Reviewed By: arsenm, MaskRay, sdesmalen Differential Revision: https://reviews.llvm.org/D125699
- Loading branch information
1 parent
a694546
commit 599ff24
Showing
2 changed files
with
44 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
39 changes: 39 additions & 0 deletions
39
llvm/test/CodeGen/RISCV/rvv/stack-coloring-scalablevec.mir
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
... |