Skip to content

Commit 026ddce

Browse files
committed
R600: Remove broken atomicrmw patterns
inc/dec are not add/sub of 1.
1 parent 5617fb1 commit 026ddce

File tree

2 files changed

+12
-28
lines changed

2 files changed

+12
-28
lines changed

llvm/lib/Target/AMDGPU/EvergreenInstructions.td

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -310,14 +310,6 @@ multiclass AtomicPat<Instruction inst_noret,
310310
(EXTRACT_SUBREG (inst_noret
311311
(INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), $data, sub0), $ptr), sub1)>;
312312
}
313-
multiclass AtomicIncDecPat<Instruction inst_noret,
314-
SDPatternOperator node_noret, int C> {
315-
// FIXME: Add _RTN version. We need per WI scratch location to store the old value
316-
// EXTRACT_SUBREG here is dummy, we know the node has no uses
317-
def : EGOrCaymanPat<(i32 (node_noret i32:$ptr, C)),
318-
(EXTRACT_SUBREG (inst_noret
319-
(INSERT_SUBREG (v4i32 (IMPLICIT_DEF)), (MOV_IMM_I32 -1), sub0), $ptr), sub1)>;
320-
}
321313

322314
// CMPSWAP is pattern is special
323315
// EXTRACT_SUBREG here is dummy, we know the node has no uses
@@ -349,14 +341,6 @@ defm AtomicOrPat : AtomicPat <RAT_ATOMIC_OR_NORET,
349341
atomic_load_or_global_noret_32>;
350342
defm AtomicXorPat : AtomicPat <RAT_ATOMIC_XOR_NORET,
351343
atomic_load_xor_global_noret_32>;
352-
defm AtomicIncAddPat : AtomicIncDecPat <RAT_ATOMIC_INC_UINT_NORET,
353-
atomic_load_add_global_noret_32, 1>;
354-
defm AtomicIncSubPat : AtomicIncDecPat <RAT_ATOMIC_INC_UINT_NORET,
355-
atomic_load_sub_global_noret_32, -1>;
356-
defm AtomicDecAddPat : AtomicIncDecPat <RAT_ATOMIC_DEC_UINT_NORET,
357-
atomic_load_add_global_noret_32, -1>;
358-
defm AtomicDecSubPat : AtomicIncDecPat <RAT_ATOMIC_DEC_UINT_NORET,
359-
atomic_load_sub_global_noret_32, 1>;
360344

361345
// Should be predicated on FeatureFP64
362346
// def FMA_64 : R600_3OP <

llvm/test/CodeGen/AMDGPU/r600.global_atomics.ll

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -505,36 +505,36 @@ entry:
505505
ret void
506506
}
507507

508-
; FUNC-LABEL: {{^}}atomic_inc_add
509-
; EG: MEM_RAT ATOMIC_INC_UINT
510-
define amdgpu_kernel void @atomic_inc_add(i32 addrspace(1)* %out) {
508+
; FUNC-LABEL: {{^}}atomic_add_1
509+
; EG: MEM_RAT ATOMIC_ADD
510+
define amdgpu_kernel void @atomic_add_1(i32 addrspace(1)* %out) {
511511
entry:
512512
%gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
513513
%val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 1 seq_cst
514514
ret void
515515
}
516516

517-
; FUNC-LABEL: {{^}}atomic_dec_add
518-
; EG: MEM_RAT ATOMIC_DEC_UINT
519-
define amdgpu_kernel void @atomic_dec_add(i32 addrspace(1)* %out) {
517+
; FUNC-LABEL: {{^}}atomic_add_neg1
518+
; EG: MEM_RAT ATOMIC_ADD
519+
define amdgpu_kernel void @atomic_add_neg1(i32 addrspace(1)* %out) {
520520
entry:
521521
%gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
522522
%val = atomicrmw volatile add i32 addrspace(1)* %gep, i32 -1 seq_cst
523523
ret void
524524
}
525525

526-
; FUNC-LABEL: {{^}}atomic_inc_sub
527-
; EG: MEM_RAT ATOMIC_INC_UINT
528-
define amdgpu_kernel void @atomic_inc_sub(i32 addrspace(1)* %out) {
526+
; FUNC-LABEL: {{^}}atomic_sub_neg1
527+
; EG: MEM_RAT ATOMIC_SUB
528+
define amdgpu_kernel void @atomic_sub_neg1(i32 addrspace(1)* %out) {
529529
entry:
530530
%gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
531531
%val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 -1 seq_cst
532532
ret void
533533
}
534534

535-
; FUNC-LABEL: {{^}}atomic_dec_sub
536-
; EG: MEM_RAT ATOMIC_DEC_UINT
537-
define amdgpu_kernel void @atomic_dec_sub(i32 addrspace(1)* %out) {
535+
; FUNC-LABEL: {{^}}atomic_sub_1
536+
; EG: MEM_RAT ATOMIC_SUB
537+
define amdgpu_kernel void @atomic_sub_1(i32 addrspace(1)* %out) {
538538
entry:
539539
%gep = getelementptr i32, i32 addrspace(1)* %out, i64 4
540540
%val = atomicrmw volatile sub i32 addrspace(1)* %gep, i32 1 seq_cst

0 commit comments

Comments
 (0)