Skip to content

Conversation

@hjagasiaAMD
Copy link
Contributor

which reassigns scale operand in vgpr_32 register to agpr_32, not permitted by instruction format. Reduced from ck.

which reassigns scale operand in vgpr_32 register to agpr_32, not
permitted by instruction format. Reduced from ck.
@llvmbot
Copy link
Member

llvmbot commented Nov 18, 2025

@llvm/pr-subscribers-backend-amdgpu

Author: None (hjagasiaAMD)

Changes

which reassigns scale operand in vgpr_32 register to agpr_32, not permitted by instruction format. Reduced from ck.


Patch is 490.57 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/168609.diff

1 Files Affected:

  • (added) llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-scale-to-agpr.mir (+6793)
diff --git a/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-scale-to-agpr.mir b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-scale-to-agpr.mir
new file mode 100644
index 0000000000000..d8bc90275d6b4
--- /dev/null
+++ b/llvm/test/CodeGen/AMDGPU/rewrite-vgpr-mfma-scale-to-agpr.mir
@@ -0,0 +1,6793 @@
+# RUN: not llc -mtriple=amdgcn-amd-amdhsa -mcpu=gfx950 -run-pass=greedy,amdgpu-rewrite-agpr-copy-mfma -verify-machineinstrs -o - %s 2>&1 | FileCheck %s
+# CHECK: Illegal virtual register for instruction
+# CHECK: Expected a VGPR_32 register, but got a AGPR_32 register
+
+# Test for issue in amdgpu-rewrite-agpr-copy-mfma, which reassigns scale operand
+# in vgpr_32 register to agpr_32, not permitted by instruction format.
+--- |
+  define amdgpu_kernel void @test() #0 {
+  entry:
+    unreachable
+  }
+  attributes #0 = { "amdgpu-flat-work-group-size"="1,256" }
+...
+---
+name:            test
+tracksRegLiveness: true
+registers:
+  - { id: 0, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 1, class: sgpr_128, preferred-register: '', flags: [  ] }
+  - { id: 2, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 3, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 4, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 5, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 6, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 7, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 8, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 9, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 10, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 11, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 12, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 13, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 14, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 15, class: sgpr_128, preferred-register: '', flags: [  ] }
+  - { id: 16, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 17, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 18, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 19, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 20, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 21, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 22, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 23, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 24, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 25, class: sreg_64, preferred-register: '', flags: [  ] }
+  - { id: 26, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 27, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 28, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 29, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 30, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 31, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 32, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 33, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 34, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 35, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 36, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 37, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 38, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 39, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 40, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 41, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 42, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 43, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 44, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 45, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 46, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 47, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 48, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 49, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 50, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 51, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 52, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 53, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 54, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 55, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 56, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 57, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 58, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 59, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 60, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 61, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 62, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 63, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 64, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 65, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 66, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 67, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 68, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 69, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 70, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 71, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 72, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 73, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 74, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 75, class: sreg_32, preferred-register: '', flags: [  ] }
+  - { id: 76, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 77, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 78, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 79, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 80, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 81, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 82, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 83, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 84, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 85, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 86, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 87, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 88, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 89, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 90, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 91, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 92, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 93, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 94, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 95, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 96, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 97, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 98, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 99, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 100, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 101, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 102, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 103, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 104, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 105, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 106, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 107, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 108, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 109, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 110, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 111, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 112, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 113, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 114, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 115, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 116, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 117, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 118, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 119, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 120, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 121, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 122, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 123, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 124, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 125, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 126, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 127, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 128, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 129, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 130, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 131, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 132, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 133, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 134, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 135, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 136, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 137, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 138, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 139, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 140, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 141, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 142, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 143, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 144, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 145, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 146, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 147, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 148, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 149, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 150, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 151, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 152, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 153, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 154, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 155, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 156, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 157, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 158, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 159, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 160, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 161, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 162, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 163, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 164, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 165, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 166, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 167, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 168, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 169, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 170, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 171, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 172, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 173, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 174, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 175, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 176, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 177, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 178, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 179, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 180, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 181, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 182, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 183, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 184, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 185, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 186, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 187, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 188, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 189, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 190, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 191, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 192, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 193, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 194, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 195, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 196, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 197, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 198, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 199, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 200, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 201, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 202, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 203, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 204, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 205, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 206, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 207, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 208, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 209, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 210, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 211, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 212, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 213, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 214, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 215, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 216, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 217, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 218, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 219, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 220, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 221, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 222, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 223, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 224, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 225, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 226, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 227, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 228, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 229, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 230, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 231, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 232, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 233, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 234, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 235, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 236, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 237, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 238, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 239, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 240, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 241, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 242, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 243, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 244, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 245, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 246, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 247, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 248, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 249, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 250, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 251, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 252, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 253, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 254, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 255, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 256, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 257, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 258, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 259, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 260, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 261, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 262, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 263, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 264, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 265, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 266, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 267, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 268, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 269, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 270, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 271, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 272, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 273, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 274, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 275, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 276, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 277, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 278, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 279, class: vgpr_32, preferred-register: '', flags: [  ] }
+  - { id: 280, class: vgpr_32, preferred-register: '', f...
[truncated]

@github-actions
Copy link

github-actions bot commented Nov 18, 2025

🐧 Linux x64 Test Results

  • 186428 tests passed
  • 4868 tests skipped

@ronlieb ronlieb self-requested a review November 19, 2025 16:23
@hjagasiaAMD hjagasiaAMD requested a review from arsenm November 19, 2025 20:05
Copy link
Contributor

@arsenm arsenm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Test is still really big, but it's very difficult to shrink these. Can at least fix a few of the weird reduction artifacts

# in vgpr_32 register to agpr_32, not permitted by instruction format.
--- |
define amdgpu_kernel void @test() #0 {
entry:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
entry:

%152:vreg_128_align2 = COPY %82
%153:vreg_128_align2 = V_MFMA_SCALE_F32_16X16X128_F8F6F4_f4_f4_vgprcd_e64 undef %111, undef %14, %149, 4, 4, undef %35, undef %28, 8, 12, implicit $mode, implicit $exec
%20:av_128_align2 = IMPLICIT_DEF
%154:vreg_128_align2 = V_MFMA_SCALE_F32_16X16X128_F8F6F4_f4_f4_vgprcd_e64 undef %111, undef %14, %151, 4, 4, %35, undef %101, 8, 8, implicit $mode, implicit $exec
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I assume this came out of llvm-reduce? Can you fix all of these undef flags on operands that really do have definitions?

@hjagasiaAMD hjagasiaAMD requested a review from arsenm November 20, 2025 15:23
@ronlieb ronlieb merged commit 244b230 into llvm:main Nov 20, 2025
8 of 9 checks passed
@hjagasiaAMD hjagasiaAMD deleted the agpr-copy-mfma-bugfix branch November 20, 2025 21:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants