[llvm] GlobalISel: Don't use GISelMatchGenericTypes for floating point opcodes (PR #212814)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Jul 29 09:28:53 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-llvm-globalisel
Author: Petar Avramovic (petar-avramovic)
<details>
<summary>Changes</summary>
AMDGPU ends up with same input pattern that check for v2s16 so the one
that is first in tablegen table always fires (it was v2f16 in this case).
Should explictly check for f16/bf16 and v2f16/vsbf16.
---
Patch is 22.30 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/212814.diff
4 Files Affected:
- (modified) llvm/include/llvm/Target/GenericOpcodes.td (+1)
- (modified) llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-local.mir (+41-35)
- (modified) llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-region.mir (+41-35)
- (modified) llvm/test/CodeGen/AMDGPU/flat-saddr-atomics.ll (+20-40)
``````````diff
diff --git a/llvm/include/llvm/Target/GenericOpcodes.td b/llvm/include/llvm/Target/GenericOpcodes.td
index 8270ae7690953..e67e185835a32 100644
--- a/llvm/include/llvm/Target/GenericOpcodes.td
+++ b/llvm/include/llvm/Target/GenericOpcodes.td
@@ -1478,6 +1478,7 @@ def G_ATOMICRMW_MAX : G_ATOMICRMW_OP;
def G_ATOMICRMW_MIN : G_ATOMICRMW_OP;
def G_ATOMICRMW_UMAX : G_ATOMICRMW_OP;
def G_ATOMICRMW_UMIN : G_ATOMICRMW_OP;
+let GISelMatchGenericTypes = 0 in
def G_ATOMICRMW_FADD : G_ATOMICRMW_OP;
def G_ATOMICRMW_FSUB : G_ATOMICRMW_OP;
def G_ATOMICRMW_FMAX : G_ATOMICRMW_OP;
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-local.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-local.mir
index 45a121f3a48aa..4b860dab62b02 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-local.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-local.mir
@@ -9,7 +9,7 @@
# RUN: llc -mtriple=amdgpu7.01 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -disable-gisel-legality-check -o - %s | FileCheck -check-prefix=GFX6 %s
---
-name: atomicrmw_fadd_s32_local
+name: atomicrmw_fadd_f32_local
legalized: true
regBankSelected: true
tracksRegLiveness: true
@@ -17,38 +17,40 @@ body: |
bb.0:
liveins: $vgpr0, $vgpr1
- ; GFX8-LABEL: name: atomicrmw_fadd_s32_local
+ ; GFX8-LABEL: name: atomicrmw_fadd_f32_local
; GFX8: liveins: $vgpr0, $vgpr1
; GFX8-NEXT: {{ $}}
; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX8-NEXT: $m0 = S_MOV_B32 -1
- ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 0, 0, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 3)
+ ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 0, 0, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 3)
; GFX8-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_]]
- ; GFX9-LABEL: name: atomicrmw_fadd_s32_local
+ ;
+ ; GFX9-LABEL: name: atomicrmw_fadd_f32_local
; GFX9: liveins: $vgpr0, $vgpr1
; GFX9-NEXT: {{ $}}
; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX9-NEXT: [[DS_ADD_RTN_F32_gfx9_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32_gfx9 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (load store seq_cst (s32), addrspace 3)
+ ; GFX9-NEXT: [[DS_ADD_RTN_F32_gfx9_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32_gfx9 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (load store seq_cst (f32), addrspace 3)
; GFX9-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_gfx9_]]
- ; GFX6-LABEL: name: atomicrmw_fadd_s32_local
+ ;
+ ; GFX6-LABEL: name: atomicrmw_fadd_f32_local
; GFX6: liveins: $vgpr0, $vgpr1
; GFX6-NEXT: {{ $}}
; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
- ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
+ ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(f32) = COPY $vgpr1
; GFX6-NEXT: $m0 = S_MOV_B32 -1
- ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(s32) = G_ATOMICRMW_FADD [[COPY]](p3), [[COPY1]] :: (load store seq_cst (s32), addrspace 3)
- ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](s32)
+ ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(f32) = G_ATOMICRMW_FADD [[COPY]](p3), [[COPY1]] :: (load store seq_cst (f32), addrspace 3)
+ ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](f32)
%0:vgpr(p3) = COPY $vgpr0
- %1:vgpr(s32) = COPY $vgpr1
- %2:vgpr(s32) = G_ATOMICRMW_FADD %0(p3), %1 :: (load store seq_cst (s32), addrspace 3)
+ %1:vgpr(f32) = COPY $vgpr1
+ %2:vgpr(f32) = G_ATOMICRMW_FADD %0(p3), %1 :: (load store seq_cst (f32), addrspace 3)
$vgpr0 = COPY %2
...
---
-name: atomicrmw_fadd_s32_local_noret
+name: atomicrmw_fadd_f32_local_noret
legalized: true
regBankSelected: true
tracksRegLiveness: true
@@ -56,34 +58,36 @@ body: |
bb.0:
liveins: $vgpr0, $vgpr1
- ; GFX8-LABEL: name: atomicrmw_fadd_s32_local_noret
+ ; GFX8-LABEL: name: atomicrmw_fadd_f32_local_noret
; GFX8: liveins: $vgpr0, $vgpr1
; GFX8-NEXT: {{ $}}
; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX8-NEXT: $m0 = S_MOV_B32 -1
- ; GFX8-NEXT: DS_ADD_F32 [[COPY]], [[COPY1]], 0, 0, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 3)
- ; GFX9-LABEL: name: atomicrmw_fadd_s32_local_noret
+ ; GFX8-NEXT: DS_ADD_F32 [[COPY]], [[COPY1]], 0, 0, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 3)
+ ;
+ ; GFX9-LABEL: name: atomicrmw_fadd_f32_local_noret
; GFX9: liveins: $vgpr0, $vgpr1
; GFX9-NEXT: {{ $}}
; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX9-NEXT: DS_ADD_F32_gfx9 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (load store seq_cst (s32), addrspace 3)
- ; GFX6-LABEL: name: atomicrmw_fadd_s32_local_noret
+ ; GFX9-NEXT: DS_ADD_F32_gfx9 [[COPY]], [[COPY1]], 0, 0, implicit $exec :: (load store seq_cst (f32), addrspace 3)
+ ;
+ ; GFX6-LABEL: name: atomicrmw_fadd_f32_local_noret
; GFX6: liveins: $vgpr0, $vgpr1
; GFX6-NEXT: {{ $}}
; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
- ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
+ ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(f32) = COPY $vgpr1
; GFX6-NEXT: $m0 = S_MOV_B32 -1
- ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr(s32) = G_ATOMICRMW_FADD [[COPY]](p3), [[COPY1]] :: (load store seq_cst (s32), addrspace 3)
+ ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr(f32) = G_ATOMICRMW_FADD [[COPY]](p3), [[COPY1]] :: (load store seq_cst (f32), addrspace 3)
%0:vgpr(p3) = COPY $vgpr0
- %1:vgpr(s32) = COPY $vgpr1
- %2:vgpr(s32) = G_ATOMICRMW_FADD %0(p3), %1 :: (load store seq_cst (s32), addrspace 3)
+ %1:vgpr(f32) = COPY $vgpr1
+ %2:vgpr(f32) = G_ATOMICRMW_FADD %0(p3), %1 :: (load store seq_cst (f32), addrspace 3)
...
---
-name: atomicrmw_fadd_s32_local_gep4
+name: atomicrmw_fadd_f32_local_gep4
legalized: true
regBankSelected: true
tracksRegLiveness: true
@@ -91,36 +95,38 @@ body: |
bb.0:
liveins: $vgpr0, $vgpr1
- ; GFX8-LABEL: name: atomicrmw_fadd_s32_local_gep4
+ ; GFX8-LABEL: name: atomicrmw_fadd_f32_local_gep4
; GFX8: liveins: $vgpr0, $vgpr1
; GFX8-NEXT: {{ $}}
; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX8-NEXT: $m0 = S_MOV_B32 -1
- ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 4, 0, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 3)
+ ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 4, 0, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 3)
; GFX8-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_]]
- ; GFX9-LABEL: name: atomicrmw_fadd_s32_local_gep4
+ ;
+ ; GFX9-LABEL: name: atomicrmw_fadd_f32_local_gep4
; GFX9: liveins: $vgpr0, $vgpr1
; GFX9-NEXT: {{ $}}
; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX9-NEXT: [[DS_ADD_RTN_F32_gfx9_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32_gfx9 [[COPY]], [[COPY1]], 4, 0, implicit $exec :: (load store seq_cst (s32), addrspace 3)
+ ; GFX9-NEXT: [[DS_ADD_RTN_F32_gfx9_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32_gfx9 [[COPY]], [[COPY1]], 4, 0, implicit $exec :: (load store seq_cst (f32), addrspace 3)
; GFX9-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_gfx9_]]
- ; GFX6-LABEL: name: atomicrmw_fadd_s32_local_gep4
+ ;
+ ; GFX6-LABEL: name: atomicrmw_fadd_f32_local_gep4
; GFX6: liveins: $vgpr0, $vgpr1
; GFX6-NEXT: {{ $}}
; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p3) = COPY $vgpr0
- ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
- ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 4
- ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](s32)
+ ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(f32) = COPY $vgpr1
+ ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(f32) = G_CONSTANT i32 4
+ ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p3) = G_PTR_ADD [[COPY]], [[C]](f32)
; GFX6-NEXT: $m0 = S_MOV_B32 -1
- ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(s32) = G_ATOMICRMW_FADD [[PTR_ADD]](p3), [[COPY1]] :: (load store seq_cst (s32), addrspace 3)
- ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](s32)
+ ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(f32) = G_ATOMICRMW_FADD [[PTR_ADD]](p3), [[COPY1]] :: (load store seq_cst (f32), addrspace 3)
+ ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](f32)
%0:vgpr(p3) = COPY $vgpr0
- %1:vgpr(s32) = COPY $vgpr1
- %2:vgpr(s32) = G_CONSTANT i32 4
+ %1:vgpr(f32) = COPY $vgpr1
+ %2:vgpr(f32) = G_CONSTANT i32 4
%3:vgpr(p3) = G_PTR_ADD %0, %2
- %4:vgpr(s32) = G_ATOMICRMW_FADD %3(p3), %1 :: (load store seq_cst (s32), addrspace 3)
+ %4:vgpr(f32) = G_ATOMICRMW_FADD %3(p3), %1 :: (load store seq_cst (f32), addrspace 3)
$vgpr0 = COPY %4
...
diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-region.mir b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-region.mir
index 6bc57348c8ee1..fbaae37a0017d 100644
--- a/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-region.mir
+++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/inst-select-atomicrmw-fadd-region.mir
@@ -9,7 +9,7 @@
# RUN: llc -mtriple=amdgpu7.01 -run-pass=instruction-select -verify-machineinstrs -global-isel-abort=0 -disable-gisel-legality-check -o - %s | FileCheck -check-prefix=GFX6 %s
---
-name: atomicrmw_fadd_s32_region
+name: atomicrmw_fadd_f32_region
legalized: true
regBankSelected: true
tracksRegLiveness: true
@@ -17,38 +17,40 @@ body: |
bb.0:
liveins: $vgpr0, $vgpr1
- ; GFX8-LABEL: name: atomicrmw_fadd_s32_region
+ ; GFX8-LABEL: name: atomicrmw_fadd_f32_region
; GFX8: liveins: $vgpr0, $vgpr1
; GFX8-NEXT: {{ $}}
; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX8-NEXT: $m0 = S_MOV_B32 -1
- ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)
+ ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 2)
; GFX8-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_]]
- ; GFX9-LABEL: name: atomicrmw_fadd_s32_region
+ ;
+ ; GFX9-LABEL: name: atomicrmw_fadd_f32_region
; GFX9: liveins: $vgpr0, $vgpr1
; GFX9-NEXT: {{ $}}
; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX9-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)
+ ; GFX9-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 2)
; GFX9-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_]]
- ; GFX6-LABEL: name: atomicrmw_fadd_s32_region
+ ;
+ ; GFX6-LABEL: name: atomicrmw_fadd_f32_region
; GFX6: liveins: $vgpr0, $vgpr1
; GFX6-NEXT: {{ $}}
; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p2) = COPY $vgpr0
- ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
+ ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(f32) = COPY $vgpr1
; GFX6-NEXT: $m0 = S_MOV_B32 -1
- ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(s32) = G_ATOMICRMW_FADD [[COPY]](p2), [[COPY1]] :: (load store seq_cst (s32), addrspace 2)
- ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](s32)
+ ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(f32) = G_ATOMICRMW_FADD [[COPY]](p2), [[COPY1]] :: (load store seq_cst (f32), addrspace 2)
+ ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](f32)
%0:vgpr(p2) = COPY $vgpr0
- %1:vgpr(s32) = COPY $vgpr1
- %2:vgpr(s32) = G_ATOMICRMW_FADD %0(p2), %1 :: (load store seq_cst (s32), addrspace 2)
+ %1:vgpr(f32) = COPY $vgpr1
+ %2:vgpr(f32) = G_ATOMICRMW_FADD %0(p2), %1 :: (load store seq_cst (f32), addrspace 2)
$vgpr0 = COPY %2
...
---
-name: atomicrmw_fadd_s32_region_noret
+name: atomicrmw_fadd_f32_region_noret
legalized: true
regBankSelected: true
tracksRegLiveness: true
@@ -56,34 +58,36 @@ body: |
bb.0:
liveins: $vgpr0, $vgpr1
- ; GFX8-LABEL: name: atomicrmw_fadd_s32_region_noret
+ ; GFX8-LABEL: name: atomicrmw_fadd_f32_region_noret
; GFX8: liveins: $vgpr0, $vgpr1
; GFX8-NEXT: {{ $}}
; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX8-NEXT: $m0 = S_MOV_B32 -1
- ; GFX8-NEXT: DS_ADD_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)
- ; GFX9-LABEL: name: atomicrmw_fadd_s32_region_noret
+ ; GFX8-NEXT: DS_ADD_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 2)
+ ;
+ ; GFX9-LABEL: name: atomicrmw_fadd_f32_region_noret
; GFX9: liveins: $vgpr0, $vgpr1
; GFX9-NEXT: {{ $}}
; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX9-NEXT: DS_ADD_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)
- ; GFX6-LABEL: name: atomicrmw_fadd_s32_region_noret
+ ; GFX9-NEXT: DS_ADD_F32 [[COPY]], [[COPY1]], 0, 1, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 2)
+ ;
+ ; GFX6-LABEL: name: atomicrmw_fadd_f32_region_noret
; GFX6: liveins: $vgpr0, $vgpr1
; GFX6-NEXT: {{ $}}
; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p2) = COPY $vgpr0
- ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
+ ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(f32) = COPY $vgpr1
; GFX6-NEXT: $m0 = S_MOV_B32 -1
- ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr(s32) = G_ATOMICRMW_FADD [[COPY]](p2), [[COPY1]] :: (load store seq_cst (s32), addrspace 2)
+ ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr(f32) = G_ATOMICRMW_FADD [[COPY]](p2), [[COPY1]] :: (load store seq_cst (f32), addrspace 2)
%0:vgpr(p2) = COPY $vgpr0
- %1:vgpr(s32) = COPY $vgpr1
- %2:vgpr(s32) = G_ATOMICRMW_FADD %0(p2), %1 :: (load store seq_cst (s32), addrspace 2)
+ %1:vgpr(f32) = COPY $vgpr1
+ %2:vgpr(f32) = G_ATOMICRMW_FADD %0(p2), %1 :: (load store seq_cst (f32), addrspace 2)
...
---
-name: atomicrmw_fadd_s32_region_gep4
+name: atomicrmw_fadd_f32_region_gep4
legalized: true
regBankSelected: true
tracksRegLiveness: true
@@ -91,36 +95,38 @@ body: |
bb.0:
liveins: $vgpr0, $vgpr1
- ; GFX8-LABEL: name: atomicrmw_fadd_s32_region_gep4
+ ; GFX8-LABEL: name: atomicrmw_fadd_f32_region_gep4
; GFX8: liveins: $vgpr0, $vgpr1
; GFX8-NEXT: {{ $}}
; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
; GFX8-NEXT: $m0 = S_MOV_B32 -1
- ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)
+ ; GFX8-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 2)
; GFX8-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_]]
- ; GFX9-LABEL: name: atomicrmw_fadd_s32_region_gep4
+ ;
+ ; GFX9-LABEL: name: atomicrmw_fadd_f32_region_gep4
; GFX9: liveins: $vgpr0, $vgpr1
; GFX9-NEXT: {{ $}}
; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0
; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1
- ; GFX9-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (s32), addrspace 2)
+ ; GFX9-NEXT: [[DS_ADD_RTN_F32_:%[0-9]+]]:vgpr_32 = DS_ADD_RTN_F32 [[COPY]], [[COPY1]], 4, 1, implicit $m0, implicit $exec :: (load store seq_cst (f32), addrspace 2)
; GFX9-NEXT: $vgpr0 = COPY [[DS_ADD_RTN_F32_]]
- ; GFX6-LABEL: name: atomicrmw_fadd_s32_region_gep4
+ ;
+ ; GFX6-LABEL: name: atomicrmw_fadd_f32_region_gep4
; GFX6: liveins: $vgpr0, $vgpr1
; GFX6-NEXT: {{ $}}
; GFX6-NEXT: [[COPY:%[0-9]+]]:vgpr(p2) = COPY $vgpr0
- ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(s32) = COPY $vgpr1
- ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(s32) = G_CONSTANT i32 4
- ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p2) = G_PTR_ADD [[COPY]], [[C]](s32)
+ ; GFX6-NEXT: [[COPY1:%[0-9]+]]:vgpr(f32) = COPY $vgpr1
+ ; GFX6-NEXT: [[C:%[0-9]+]]:vgpr(f32) = G_CONSTANT i32 4
+ ; GFX6-NEXT: [[PTR_ADD:%[0-9]+]]:vgpr(p2) = G_PTR_ADD [[COPY]], [[C]](f32)
; GFX6-NEXT: $m0 = S_MOV_B32 -1
- ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(s32) = G_ATOMICRMW_FADD [[PTR_ADD]](p2), [[COPY1]] :: (load store seq_cst (s32), addrspace 2)
- ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](s32)
+ ; GFX6-NEXT: [[ATOMICRMW_FADD:%[0-9]+]]:vgpr_32(f32) = G_ATOMICRMW_FADD [[PTR_ADD]](p2), [[COPY1]] :: (load store seq_cst (f32), addrspace 2)
+ ; GFX6-NEXT: $vgpr0 = COPY [[ATOMICRMW_FADD]](f32)
%0:vgpr(p2) = COPY $vgpr0
- %1:vgpr(s32) = COPY $vgpr1
- %2:vgpr(s32) = G_CONSTANT i32 4
+ %1:vgpr(f32) = COPY $vgpr1
+ %2:vgpr(f32) = G_CONSTANT i32 4
%3:vgpr(p2) = G_PTR_ADD %0, %2
- %4:vgpr(s32) = G_ATOMICRMW_FADD %3(p2), %1 :: (load store seq_cst (s32), addrspace 2)
+ %4:vgpr(f32) = G_ATOMICRMW_FADD %3(p2), %1 :: (load store seq_cst (f32), addrspace 2)
$vgpr0 = COPY %4
...
diff --git a/llvm/test/CodeGen/AMDGPU/flat-saddr-atomics.ll b/llvm/test/CodeGen/AMDGPU/flat-saddr-atomics.ll
index ccdd6535614aa..78aefe033755a 100644
--- a/llvm/test/CodeGen/AMDGPU/flat-saddr-atomics.ll
+++ b/llvm/test/CodeGen/AMDGPU/flat-saddr-atomics.ll
@@ -13826,25 +13826,15 @@ define void @flat_atomic_fmin_v2f16_saddr_nortn(ptr inreg %ptr, <2 x half> %data
}
define <2 x bfloat> @flat_atomic_fadd_v2bf16_saddr_rtn(ptr inreg %ptr, <2 x bfloat> %data) {
-; GFX1250-SDAG-LABEL: flat_atomic_fadd_v2bf16_saddr_rtn:
-; GFX1250-SDAG: ; %bb.0:
-; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0
-; GFX1250-SDAG-NEXT: s_wait_kmcnt 0x0
-; GFX1250-SDAG-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-SDAG-NEXT: s_wait_storecnt 0x0
-; GFX1250-SDAG-NEXT: flat_atomic_pk_add_bf16 v0, v1, v0, s[0:1] offset:40 th:TH_ATOMIC_RETURN
-; GFX1250-SDAG-NEXT: s_wait_loadcnt_dscnt 0x0
-; GFX1250-SDAG-NEXT: s_set_pc_i64 s[30:31]
-;
-; GFX1250-GISEL-LABEL: flat_atomic_fadd_v2bf16_saddr_rtn:
-; GFX1250-GISEL: ; %bb.0:
-; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0
-; GFX1250-GISEL-NEXT: s_wait_kmcnt 0x0
-; GFX1250-GISEL-NEXT: v_mov_b32_e32 v1, 0
-; GFX1250-GISEL-NEXT: s_wait_storecnt 0x0
-; GFX1250-GISEL-NEXT: flat_atomic_pk_add_f16 v0, v1, v0, s[0:1] offset:40 th:TH_ATOMIC_RETURN
-; GFX1250-GISEL-NEXT: s_wait_loadcnt_dscnt 0x0
-; GFX1250-GISEL-NEXT: s_set_pc_i64 s[30:31]
+; GFX1250-LABEL: flat_atomic_fadd_v2bf16_saddr_rtn:
+; GFX1250: ; %bb.0:
+; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX1250-NEXT: s_wait_kmcnt 0x0
+; GFX1250-NEXT: v_mov_b32_e32 v1, 0
+; GFX1250-NEXT: s_wait_storecnt 0x0
+; GFX1250-NEXT: flat_atomic_pk_add_bf16 v0, v1, v0, s[0:1] offset:40 th:TH_ATOMIC_RETURN
+; GFX1250-NEXT: s_wait_loadcnt_dscnt 0x0
+; GFX1250-NEXT: s_set_pc_i64 s[30:31]
;
; GFX950-SDAG-LABEL: flat_atomic_fadd_v2bf16_saddr_rtn:
; GFX950-SDAG: ; %bb.0:
@@ -13859,7 +13849,7 @@ define <2 x bfloat> @flat_atomic_fadd_v2bf16_saddr_rtn(ptr inreg %ptr, <2 x bflo
; GFX950-GISEL: ; %bb.0:
; GFX950-GISEL-NEXT: s_waitcnt vmcnt(0) expcnt(0) lgkmcnt(0)
; GFX950-GISEL-NEXT: v_mov_b64_e32 v[2:3], s[0:1]
-; GFX950-GISEL-NEXT: flat_atomic_pk_add_f16 v0, v[2:3], v0 offset:40 sc0
+; GFX950-GISEL-NEXT: flat_atomic_pk_add_bf16 v0, v[2:3], v0 offset:40 sc0
...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/212814
More information about the llvm-commits
mailing list