[llvm] [AMDGPU] Select `V_MOV_B64_e32` directly if a target supports it (PR #206135)

Shilei Tian via llvm-commits llvm-commits at lists.llvm.org
Mon Jun 29 12:51:01 PDT 2026


================
@@ -0,0 +1,119 @@
+; NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --filter "S_MOV_B32|REG_SEQUENCE|V_MOV_B32_e32|V_MOV_B64|COPY|DS_WRITE_B64" --version 6
+; RUN: llc -mtriple=amdgcn -mcpu=gfx900 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=NOVMOV %s
+; RUN: llc -mtriple=amdgcn -mcpu=gfx942 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX942 %s
+; RUN: llc -mtriple=amdgcn -mcpu=gfx1250 -stop-after=amdgpu-isel < %s | FileCheck -check-prefix=GFX1250 %s
+
+define amdgpu_kernel void @store_i64_inline() {
+    ; NOVMOV-LABEL: name: store_i64_inline
+    ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 -1
+    ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE [[S_MOV_B32_]], %subreg.sub0, [[S_MOV_B32_]], %subreg.sub1
+    ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+    ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX942-LABEL: name: store_i64_inline
+    ; GFX942: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 -1, implicit $exec
+    ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX1250-LABEL: name: store_i64_inline
+    ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 -1, implicit $exec
+    ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+  store volatile i64 -1, ptr addrspace(3) null, align 8
+  ret void
+}
+
+define amdgpu_kernel void @store_i64_u32_lit() {
+    ; NOVMOV-LABEL: name: store_i64_u32_lit
+    ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 0
+    ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1234567890
+    ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+    ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+    ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX942-LABEL: name: store_i64_u32_lit
+    ; GFX942: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1234567890, implicit $exec
+    ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX1250-LABEL: name: store_i64_u32_lit
+    ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1234567890, implicit $exec
+    ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+  store volatile i64 1234567890, ptr addrspace(3) null, align 8
+  ret void
+}
+
+define amdgpu_kernel void @store_i64_lit64() {
+    ; NOVMOV-LABEL: name: store_i64_lit64
+    ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 305419896
+    ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1698898192
+    ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+    ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+    ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX942-LABEL: name: store_i64_lit64
+    ; GFX942: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 305419896
+    ; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 -1698898192
+    ; GFX942-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+    ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX942-NEXT: [[COPY:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]]
+    ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX1250-LABEL: name: store_i64_lit64
+    ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1311768467463790320, implicit $exec
+    ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+  store volatile i64 1311768467463790320, ptr addrspace(3) null, align 8
+  ret void
+}
+
+define amdgpu_kernel void @store_f64_inline() {
+    ; NOVMOV-LABEL: name: store_f64_inline
+    ; NOVMOV: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1072693248
+    ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 0
+    ; NOVMOV-NEXT: [[REG_SEQUENCE:%[0-9]+]]:sreg_64 = REG_SEQUENCE killed [[S_MOV_B32_1]], %subreg.sub0, killed [[S_MOV_B32_]], %subreg.sub1
+    ; NOVMOV-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; NOVMOV-NEXT: [[COPY:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]]
+    ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[COPY]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX942-LABEL: name: store_f64_inline
+    ; GFX942: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4607182418800017408, implicit $exec
+    ; GFX942-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX942-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+    ;
+    ; GFX1250-LABEL: name: store_f64_inline
+    ; GFX1250: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4607182418800017408, implicit $exec
+    ; GFX1250-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
+    ; GFX1250-NEXT: DS_WRITE_B64_gfx9 killed [[V_MOV_B32_e32_]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into `ptr addrspace(3) null`, addrspace 3)
+  store volatile double 1.000000e+00, ptr addrspace(3) null, align 8
+  ret void
+}
+
+define amdgpu_kernel void @store_f64_lit64() {
----------------
shiltian wrote:

done.

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


More information about the llvm-commits mailing list