Skip to content

Commit 169de76

Browse files
committed
Pre-commit tests (NFC)
1 parent f057a59 commit 169de76

File tree

2 files changed

+206
-0
lines changed

2 files changed

+206
-0
lines changed

llvm/test/CodeGen/X86/atomic-idempotent.ll

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,4 +622,190 @@ define void @or8_nouse_seq_cst(ptr %p) #0 {
622622
ret void
623623
}
624624

625+
define void @atomic_umin_uint_max(ptr %addr) {
626+
; CHECK-LABEL: @atomic_umin_uint_max(
627+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i32 0 monotonic, align 4
628+
; CHECK-NEXT: ret i32 [[RES]]
629+
;
630+
; X64-LABEL: atomic_umin_uint_max:
631+
; X64: # %bb.0:
632+
; X64-NEXT: movl (%rdi), %eax
633+
; X64-NEXT: .p2align 4
634+
; X64-NEXT: .LBB15_1: # %atomicrmw.start
635+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
636+
; X64-NEXT: lock cmpxchgl %eax, (%rdi)
637+
; X64-NEXT: jne .LBB15_1
638+
; X64-NEXT: # %bb.2: # %atomicrmw.end
639+
; X64-NEXT: retq
640+
;
641+
; X86-LABEL: atomic_umin_uint_max:
642+
; X86: # %bb.0:
643+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
644+
; X86-NEXT: movl (%ecx), %eax
645+
; X86-NEXT: .p2align 4
646+
; X86-NEXT: .LBB15_1: # %atomicrmw.start
647+
; X86-NEXT: # =>This Inner Loop Header: Depth=1
648+
; X86-NEXT: lock cmpxchgl %eax, (%ecx)
649+
; X86-NEXT: jne .LBB15_1
650+
; X86-NEXT: # %bb.2: # %atomicrmw.end
651+
; X86-NEXT: retl
652+
atomicrmw umin ptr %addr, i32 -1 seq_cst
653+
ret void
654+
}
655+
656+
define void @atomic_umax_zero(ptr %addr) {
657+
; CHECK-LABEL: @atomic_umax_zero(
658+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i32 0 monotonic, align 4
659+
; CHECK-NEXT: ret i32 [[RES]]
660+
;
661+
; X64-LABEL: atomic_umax_zero:
662+
; X64: # %bb.0:
663+
; X64-NEXT: movl (%rdi), %eax
664+
; X64-NEXT: .p2align 4
665+
; X64-NEXT: .LBB16_1: # %atomicrmw.start
666+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
667+
; X64-NEXT: lock cmpxchgl %eax, (%rdi)
668+
; X64-NEXT: jne .LBB16_1
669+
; X64-NEXT: # %bb.2: # %atomicrmw.end
670+
; X64-NEXT: retq
671+
;
672+
; X86-LABEL: atomic_umax_zero:
673+
; X86: # %bb.0:
674+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
675+
; X86-NEXT: movl (%ecx), %eax
676+
; X86-NEXT: .p2align 4
677+
; X86-NEXT: .LBB16_1: # %atomicrmw.start
678+
; X86-NEXT: # =>This Inner Loop Header: Depth=1
679+
; X86-NEXT: lock cmpxchgl %eax, (%ecx)
680+
; X86-NEXT: jne .LBB16_1
681+
; X86-NEXT: # %bb.2: # %atomicrmw.end
682+
; X86-NEXT: retl
683+
atomicrmw umax ptr %addr, i32 0 seq_cst
684+
ret void
685+
}
686+
687+
define void @atomic_min_smax_char(ptr %addr) {
688+
; CHECK-LABEL: @atomic_min_smax_char(
689+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i8 0 monotonic, align 1
690+
; CHECK-NEXT: ret i8 [[RES]]
691+
;
692+
; X64-LABEL: atomic_min_smax_char:
693+
; X64: # %bb.0:
694+
; X64-NEXT: movzbl (%rdi), %eax
695+
; X64-NEXT: .p2align 4
696+
; X64-NEXT: .LBB17_1: # %atomicrmw.start
697+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
698+
; X64-NEXT: lock cmpxchgb %al, (%rdi)
699+
; X64-NEXT: jne .LBB17_1
700+
; X64-NEXT: # %bb.2: # %atomicrmw.end
701+
; X64-NEXT: retq
702+
;
703+
; X86-LABEL: atomic_min_smax_char:
704+
; X86: # %bb.0:
705+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
706+
; X86-NEXT: movzbl (%ecx), %eax
707+
; X86-NEXT: .p2align 4
708+
; X86-NEXT: .LBB17_1: # %atomicrmw.start
709+
; X86-NEXT: # =>This Inner Loop Header: Depth=1
710+
; X86-NEXT: lock cmpxchgb %al, (%ecx)
711+
; X86-NEXT: jne .LBB17_1
712+
; X86-NEXT: # %bb.2: # %atomicrmw.end
713+
; X86-NEXT: retl
714+
atomicrmw min ptr %addr, i8 127 seq_cst
715+
ret void
716+
}
717+
718+
define void @atomic_max_smin_char(ptr %addr) {
719+
; CHECK-LABEL: @atomic_max_smin_char(
720+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i8 0 monotonic, align 1
721+
; CHECK-NEXT: ret i8 [[RES]]
722+
;
723+
; X64-LABEL: atomic_max_smin_char:
724+
; X64: # %bb.0:
725+
; X64-NEXT: movzbl (%rdi), %eax
726+
; X64-NEXT: .p2align 4
727+
; X64-NEXT: .LBB18_1: # %atomicrmw.start
728+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
729+
; X64-NEXT: lock cmpxchgb %al, (%rdi)
730+
; X64-NEXT: jne .LBB18_1
731+
; X64-NEXT: # %bb.2: # %atomicrmw.end
732+
; X64-NEXT: retq
733+
;
734+
; X86-LABEL: atomic_max_smin_char:
735+
; X86: # %bb.0:
736+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
737+
; X86-NEXT: movzbl (%ecx), %eax
738+
; X86-NEXT: .p2align 4
739+
; X86-NEXT: .LBB18_1: # %atomicrmw.start
740+
; X86-NEXT: # =>This Inner Loop Header: Depth=1
741+
; X86-NEXT: lock cmpxchgb %al, (%ecx)
742+
; X86-NEXT: jne .LBB18_1
743+
; X86-NEXT: # %bb.2: # %atomicrmw.end
744+
; X86-NEXT: retl
745+
atomicrmw max ptr %addr, i8 -128 seq_cst
746+
ret void
747+
}
748+
749+
define void @atomic_min_umax_char(ptr %addr) {
750+
; CHECK-LABEL: @atomic_min_umax_char(
751+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i8 0 monotonic, align 1
752+
; CHECK-NEXT: ret i8 [[RES]]
753+
;
754+
; X64-LABEL: atomic_min_umax_char:
755+
; X64: # %bb.0:
756+
; X64-NEXT: movzbl (%rdi), %eax
757+
; X64-NEXT: .p2align 4
758+
; X64-NEXT: .LBB19_1: # %atomicrmw.start
759+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
760+
; X64-NEXT: lock cmpxchgb %al, (%rdi)
761+
; X64-NEXT: jne .LBB19_1
762+
; X64-NEXT: # %bb.2: # %atomicrmw.end
763+
; X64-NEXT: retq
764+
;
765+
; X86-LABEL: atomic_min_umax_char:
766+
; X86: # %bb.0:
767+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
768+
; X86-NEXT: movzbl (%ecx), %eax
769+
; X86-NEXT: .p2align 4
770+
; X86-NEXT: .LBB19_1: # %atomicrmw.start
771+
; X86-NEXT: # =>This Inner Loop Header: Depth=1
772+
; X86-NEXT: lock cmpxchgb %al, (%ecx)
773+
; X86-NEXT: jne .LBB19_1
774+
; X86-NEXT: # %bb.2: # %atomicrmw.end
775+
; X86-NEXT: retl
776+
atomicrmw umin ptr %addr, i8 255 seq_cst
777+
ret void
778+
}
779+
780+
define void @atomic_max_umin_char(ptr %addr) {
781+
; CHECK-LABEL: @atomic_max_umin_char(
782+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i8 0 monotonic, align 1
783+
; CHECK-NEXT: ret i8 [[RES]]
784+
;
785+
; X64-LABEL: atomic_max_umin_char:
786+
; X64: # %bb.0:
787+
; X64-NEXT: movzbl (%rdi), %eax
788+
; X64-NEXT: .p2align 4
789+
; X64-NEXT: .LBB20_1: # %atomicrmw.start
790+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
791+
; X64-NEXT: lock cmpxchgb %al, (%rdi)
792+
; X64-NEXT: jne .LBB20_1
793+
; X64-NEXT: # %bb.2: # %atomicrmw.end
794+
; X64-NEXT: retq
795+
;
796+
; X86-LABEL: atomic_max_umin_char:
797+
; X86: # %bb.0:
798+
; X86-NEXT: movl {{[0-9]+}}(%esp), %ecx
799+
; X86-NEXT: movzbl (%ecx), %eax
800+
; X86-NEXT: .p2align 4
801+
; X86-NEXT: .LBB20_1: # %atomicrmw.start
802+
; X86-NEXT: # =>This Inner Loop Header: Depth=1
803+
; X86-NEXT: lock cmpxchgb %al, (%ecx)
804+
; X86-NEXT: jne .LBB20_1
805+
; X86-NEXT: # %bb.2: # %atomicrmw.end
806+
; X86-NEXT: retl
807+
atomicrmw umax ptr %addr, i8 0 seq_cst
808+
ret void
809+
}
810+
625811
attributes #0 = { nounwind }

llvm/test/Transforms/InstCombine/atomicrmw.ll

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,26 @@ define i8 @atomic_max_smin_char(ptr %addr) {
8585
ret i8 %res
8686
}
8787

88+
; Idempotent atomicrmw are still canonicalized.
89+
define i8 @atomic_min_umax_char(ptr %addr) {
90+
; CHECK-LABEL: @atomic_min_umax_char(
91+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i8 0 monotonic, align 1
92+
; CHECK-NEXT: ret i8 [[RES]]
93+
;
94+
%res = atomicrmw umin ptr %addr, i8 255 monotonic
95+
ret i8 %res
96+
}
97+
98+
; Idempotent atomicrmw are still canonicalized.
99+
define i8 @atomic_max_umin_char(ptr %addr) {
100+
; CHECK-LABEL: @atomic_max_umin_char(
101+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw or ptr [[ADDR:%.*]], i8 0 monotonic, align 1
102+
; CHECK-NEXT: ret i8 [[RES]]
103+
;
104+
%res = atomicrmw umax ptr %addr, i8 0 monotonic
105+
ret i8 %res
106+
}
107+
88108
; Idempotent atomicrmw are still canonicalized.
89109
define float @atomic_fsub_zero(ptr %addr) {
90110
; CHECK-LABEL: @atomic_fsub_zero(

0 commit comments

Comments
 (0)