[llvm] [AMDGPU] Fixed verifier crash because of multiple live range components. (PR #190719)

Dhruva Chakrabarti via llvm-commits llvm-commits at lists.llvm.org
Thu Apr 9 19:05:27 PDT 2026


================
@@ -0,0 +1,772 @@
+# REQUIRES: asserts
+# RUN: llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx90a \
+# RUN:   -amdgpu-use-amdgpu-trackers=1 -verify-machineinstrs \
+# RUN:   -start-before=register-coalescer \
+# RUN:   -stop-after=amdgpu-rewrite-agpr-copy-mfma \
+# RUN:   -debug-only=amdgpu-rewrite-agpr-copy-mfma -o /dev/null %s 2>&1 \
+# RUN:   | FileCheck %s
+
+# This test verifies that when the VGPR-to-AGPR MFMA rewrite pass eliminates
+# spills of reassigned VGPRs, multiple connected live range components are
+# split into separate virtual registers to satisfy the verifier.
+
+# CHECK: Split unspilled interval into {{[0-9]+}} components
+
+--- |
+  define amdgpu_kernel void @multi_store_spill_slot() #0 {
+  entry:
+    br label %do.body
+
+  do.body:
+    br label %DummyReturnBlock
+
+  DummyReturnBlock:
+    unreachable
+  }
+
+  attributes #0 = { "amdgpu-flat-work-group-size"="1,256" "amdgpu-lds-size"="32768" "target-cpu"="gfx90a" }
+...
+---
+name:            multi_store_spill_slot
+alignment:       4
+exposesReturnsTwice: false
+legalized:       false
+regBankSelected: false
+selected:        false
+failedISel:      false
+tracksRegLiveness: true
+hasWinCFI:       false
+noPhis:          true
+isSSA:           false
+noVRegs:         false
+hasFakeUses:     false
+callsEHReturn:   false
+callsUnwindInit: false
+hasEHContTarget: false
+hasEHScopes:     false
+hasEHFunclets:   false
+isOutlined:      false
+debugInstrRef:   false
+failsVerification: false
+tracksDebugUserValues: false
+registers:
+  - { id: 0, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 1, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 2, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 3, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 4, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 5, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 6, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 7, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 8, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 9, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 10, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 11, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 12, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 13, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 14, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 15, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 16, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 17, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 18, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 19, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 20, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 21, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 22, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 23, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 24, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 25, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 26, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 27, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 28, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 29, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 30, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 31, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 32, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 33, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 34, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 35, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 36, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 37, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 38, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 39, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 40, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 41, class: sgpr_128, preferred-register: '', flags: [  ] }
+  - { id: 42, class: sgpr_64, preferred-register: '', flags: [  ] }
+  - { id: 43, class: sgpr_64, preferred-register: '', flags: [  ] }
+  - { id: 44, class: sgpr_64, preferred-register: '', flags: [  ] }
+  - { id: 45, class: sgpr_64, preferred-register: '', flags: [  ] }
+  - { id: 46, class: sgpr_64, preferred-register: '', flags: [  ] }
+  - { id: 47, class: sgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 48, class: sgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 49, class: sgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 50, class: sgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 51, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 52, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 53, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 54, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 55, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 56, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 57, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 58, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 59, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 60, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 61, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 62, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 63, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 64, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 65, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 66, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 67, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 68, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 69, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 70, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 71, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 72, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 73, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 74, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 75, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 76, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 77, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 78, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 79, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 80, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 81, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 82, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 83, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 84, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 85, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 86, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 87, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 88, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 89, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 90, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 91, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 92, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 93, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 94, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 95, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 96, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 97, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 98, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 99, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 100, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 101, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 102, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 103, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 104, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 105, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 106, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 107, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 108, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 109, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 110, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 111, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 112, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 113, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 114, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 115, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 116, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 117, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 118, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 119, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 120, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 121, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 122, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 123, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 124, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 125, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 126, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 127, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 128, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 129, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 130, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 131, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 132, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 133, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 134, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 135, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 136, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 137, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 138, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 139, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 140, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 141, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 142, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 143, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 144, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 145, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 146, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 147, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 148, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 149, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 150, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 151, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 152, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 153, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 154, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 155, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 156, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 157, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 158, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 159, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 160, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 161, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 162, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 163, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 164, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 165, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 166, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 167, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 168, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 169, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 170, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 171, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 172, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 173, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 174, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 175, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 176, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 177, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 178, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 179, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 180, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 181, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 182, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 183, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 184, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 185, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 186, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 187, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 188, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 189, class: vreg_512_align2, preferred-register: '', flags: [  ] }
+  - { id: 190, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 191, class: av_64_align2, preferred-register: '', flags: [  ] }
+  - { id: 192, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 193, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 194, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 195, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 196, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 197, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 198, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 199, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 200, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 201, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 202, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 203, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 204, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 205, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 206, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 207, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 208, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 209, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 210, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 211, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 212, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 213, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 214, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 215, class: av_32, preferred-register: '', flags: [  ] }
+  - { id: 216, class: av_32, preferred-register: '', flags: [  ] }
----------------
dhruvachak wrote:

Done.

https://github.com/llvm/llvm-project/pull/190719


More information about the llvm-commits mailing list