[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