| ; 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 void @store_i64_inline(ptr addrspace(3) %ptr) { |
| ; NOVMOV-LABEL: name: store_i64_inline |
| ; NOVMOV: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; NOVMOV-NEXT: [[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: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]] |
| ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX942-LABEL: name: store_i64_inline |
| ; GFX942: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX942-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 -1, implicit $exec |
| ; GFX942-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX1250-LABEL: name: store_i64_inline |
| ; GFX1250: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX1250-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 -1, implicit $exec |
| ; GFX1250-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| store volatile i64 -1, ptr addrspace(3) %ptr, align 8 |
| ret void |
| } |
| |
| define void @store_i64_u32_lit(ptr addrspace(3) %ptr) { |
| ; NOVMOV-LABEL: name: store_i64_u32_lit |
| ; NOVMOV: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; NOVMOV-NEXT: [[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: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]] |
| ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX942-LABEL: name: store_i64_u32_lit |
| ; GFX942: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX942-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1234567890, implicit $exec |
| ; GFX942-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX1250-LABEL: name: store_i64_u32_lit |
| ; GFX1250: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX1250-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1234567890, implicit $exec |
| ; GFX1250-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| store volatile i64 1234567890, ptr addrspace(3) %ptr, align 8 |
| ret void |
| } |
| |
| define void @store_i64_lit64(ptr addrspace(3) %ptr) { |
| ; NOVMOV-LABEL: name: store_i64_lit64 |
| ; NOVMOV: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; NOVMOV-NEXT: [[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: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]] |
| ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX942-LABEL: name: store_i64_lit64 |
| ; GFX942: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX942-NEXT: [[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: [[COPY1:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]] |
| ; GFX942-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX1250-LABEL: name: store_i64_lit64 |
| ; GFX1250: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX1250-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 1311768467463790320, implicit $exec |
| ; GFX1250-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| store volatile i64 1311768467463790320, ptr addrspace(3) %ptr, align 8 |
| ret void |
| } |
| |
| define void @store_f64_inline(ptr addrspace(3) %ptr) { |
| ; NOVMOV-LABEL: name: store_f64_inline |
| ; NOVMOV: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; NOVMOV-NEXT: [[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: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]] |
| ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX942-LABEL: name: store_f64_inline |
| ; GFX942: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX942-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4607182418800017408, implicit $exec |
| ; GFX942-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX1250-LABEL: name: store_f64_inline |
| ; GFX1250: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX1250-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4607182418800017408, implicit $exec |
| ; GFX1250-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| store volatile double 1.000000e+00, ptr addrspace(3) %ptr, align 8 |
| ret void |
| } |
| |
| define void @store_f64_lit64(ptr addrspace(3) %ptr) { |
| ; NOVMOV-LABEL: name: store_f64_lit64 |
| ; NOVMOV: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; NOVMOV-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1074340347 |
| ; NOVMOV-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1413754136 |
| ; 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: [[COPY1:%[0-9]+]]:vreg_64 = COPY [[REG_SEQUENCE]] |
| ; NOVMOV-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX942-LABEL: name: store_f64_lit64 |
| ; GFX942: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX942-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32 = S_MOV_B32 1074340347 |
| ; GFX942-NEXT: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1413754136 |
| ; 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: [[COPY1:%[0-9]+]]:av_64_align2 = COPY [[REG_SEQUENCE]] |
| ; GFX942-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[COPY1]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| ; |
| ; GFX1250-LABEL: name: store_f64_lit64 |
| ; GFX1250: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 |
| ; GFX1250-NEXT: [[V_MOV_B64_e32_:%[0-9]+]]:vreg_64_align2 = V_MOV_B64_e32 4614256656552045848, implicit $exec |
| ; GFX1250-NEXT: DS_WRITE_B64_gfx9 [[COPY]], killed [[V_MOV_B64_e32_]], 0, 0, implicit $exec :: (volatile store (s64) into %ir.ptr, addrspace 3) |
| store volatile double 0x400921FB54442D18, ptr addrspace(3) %ptr, align 8 |
| ret void |
| } |