[llvm] dd1d329 - [AMDGPU] Restore the EXEC-write assert in SIPostRA16BitMovFolding (#227890)

via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 1 00:01:31 PDT 2026


Author: Larry Meadows
Date: 2026-10-01T00:01:16-07:00
New Revision: dd1d329d7b693a01f492324dbd1eedf20325f5ae

URL: https://github.com/llvm/llvm-project/commit/dd1d329d7b693a01f492324dbd1eedf20325f5ae
DIFF: https://github.com/llvm/llvm-project/commit/dd1d329d7b693a01f492324dbd1eedf20325f5ae.diff

LOG: [AMDGPU] Restore the EXEC-write assert in SIPostRA16BitMovFolding (#227890)

#227502 turned the assert into a bail-out. The backend assumes EXEC is
not written in the middle of a basic block, so restore the assert and
drop the test that wrote EXEC between the movs.

Assisted-by: Cursor

Added: 
    

Modified: 
    llvm/lib/Target/AMDGPU/SIPostRA16BitMovFolding.cpp
    llvm/test/CodeGen/AMDGPU/si-post-ra-merge-v-mov-b16.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Target/AMDGPU/SIPostRA16BitMovFolding.cpp b/llvm/lib/Target/AMDGPU/SIPostRA16BitMovFolding.cpp
index c9ea66ec568d5..1b5f96e2904f8 100644
--- a/llvm/lib/Target/AMDGPU/SIPostRA16BitMovFolding.cpp
+++ b/llvm/lib/Target/AMDGPU/SIPostRA16BitMovFolding.cpp
@@ -164,9 +164,10 @@ bool SIPostRA16BitMovFolding::mergeSingleMovB16Pair(MachineInstr &Lo,
        drop_begin(make_range(FirstMI.getIterator(), SecondMI.getIterator()))) {
     if (Scan.isDebugInstr())
       continue;
-    if (Scan.modifiesRegister(Dst32, TRI) ||
-        Scan.modifiesRegister(AMDGPU::EXEC, TRI))
+    if (Scan.modifiesRegister(Dst32, TRI))
       return false;
+    assert(!Scan.modifiesRegister(AMDGPU::EXEC, TRI) &&
+           "Expect no write on EXEC!");
     LoopCnt++;
     if (LoopCnt < UpperBoundCnt &&
         ((FirstSrc16 && Scan.modifiesRegister(FirstSrc16, TRI)) ||

diff  --git a/llvm/test/CodeGen/AMDGPU/si-post-ra-merge-v-mov-b16.mir b/llvm/test/CodeGen/AMDGPU/si-post-ra-merge-v-mov-b16.mir
index 8bae15a895d51..a857740a5f0d2 100644
--- a/llvm/test/CodeGen/AMDGPU/si-post-ra-merge-v-mov-b16.mir
+++ b/llvm/test/CodeGen/AMDGPU/si-post-ra-merge-v-mov-b16.mir
@@ -481,24 +481,3 @@ body: |
     $vgpr0_hi16 = V_MOV_B16_t16_e32 $vgpr1_lo16, implicit $exec
     S_ENDPGM 0, implicit $vgpr0
 ...
-
----
-# Negative: EXEC is written between the movs — must NOT merge.
-name: no_merge_exec_write_between
-tracksRegLiveness: true
-body: |
-  bb.0:
-    liveins: $vgpr2, $vgpr3, $sgpr0
-
-    ; CHECK-LABEL: name: no_merge_exec_write_between
-    ; CHECK: liveins: $vgpr2, $vgpr3, $sgpr0
-    ; CHECK-NEXT: {{  $}}
-    ; CHECK-NEXT: $vgpr0_lo16 = V_MOV_B16_t16_e32 $vgpr2_lo16, implicit $exec
-    ; CHECK-NEXT: $exec_lo = S_MOV_B32 $sgpr0
-    ; CHECK-NEXT: $vgpr0_hi16 = V_MOV_B16_t16_e32 $vgpr3_hi16, implicit $exec
-    ; CHECK-NEXT: S_ENDPGM 0, implicit $vgpr0
-    $vgpr0_lo16 = V_MOV_B16_t16_e32 $vgpr2_lo16, implicit $exec
-    $exec_lo = S_MOV_B32 $sgpr0
-    $vgpr0_hi16 = V_MOV_B16_t16_e32 $vgpr3_hi16, implicit $exec
-    S_ENDPGM 0, implicit $vgpr0
-...


        


More information about the llvm-commits mailing list