Skip to content

Commit 0f73eee

Browse files
committed
Pre-commit tests (NFC)
1 parent 8160276 commit 0f73eee

File tree

2 files changed

+352
-0
lines changed

2 files changed

+352
-0
lines changed

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

Lines changed: 332 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -622,4 +622,336 @@ 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+
811+
define void @atomic_fadd_zero(ptr %addr) {
812+
; CHECK-LABEL: @atomic_fadd_zero(
813+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw fadd ptr [[ADDR:%.*]], float -0.000000e+00 monotonic, align 4
814+
; CHECK-NEXT: ret float [[RES]]
815+
;
816+
; X64-LABEL: atomic_fadd_zero:
817+
; X64: # %bb.0:
818+
; X64-NEXT: movl (%rdi), %eax
819+
; X64-NEXT: .p2align 4
820+
; X64-NEXT: .LBB21_1: # %atomicrmw.start
821+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
822+
; X64-NEXT: lock cmpxchgl %eax, (%rdi)
823+
; X64-NEXT: jne .LBB21_1
824+
; X64-NEXT: # %bb.2: # %atomicrmw.end
825+
; X64-NEXT: retq
826+
;
827+
; X86-SSE2-LABEL: atomic_fadd_zero:
828+
; X86-SSE2: # %bb.0:
829+
; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
830+
; X86-SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
831+
; X86-SSE2-NEXT: .p2align 4
832+
; X86-SSE2-NEXT: .LBB21_1: # %atomicrmw.start
833+
; X86-SSE2-NEXT: # =>This Inner Loop Header: Depth=1
834+
; X86-SSE2-NEXT: movd %xmm0, %eax
835+
; X86-SSE2-NEXT: lock cmpxchgl %eax, (%ecx)
836+
; X86-SSE2-NEXT: movd %eax, %xmm0
837+
; X86-SSE2-NEXT: jne .LBB21_1
838+
; X86-SSE2-NEXT: # %bb.2: # %atomicrmw.end
839+
; X86-SSE2-NEXT: retl
840+
;
841+
; X86-SLM-LABEL: atomic_fadd_zero:
842+
; X86-SLM: # %bb.0:
843+
; X86-SLM-NEXT: subl $8, %esp
844+
; X86-SLM-NEXT: .cfi_def_cfa_offset 12
845+
; X86-SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx
846+
; X86-SLM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
847+
; X86-SLM-NEXT: .p2align 4
848+
; X86-SLM-NEXT: .LBB21_1: # %atomicrmw.start
849+
; X86-SLM-NEXT: # =>This Inner Loop Header: Depth=1
850+
; X86-SLM-NEXT: movss %xmm0, (%esp)
851+
; X86-SLM-NEXT: movl (%esp), %eax
852+
; X86-SLM-NEXT: lock cmpxchgl %eax, (%ecx)
853+
; X86-SLM-NEXT: movl %eax, {{[0-9]+}}(%esp)
854+
; X86-SLM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
855+
; X86-SLM-NEXT: jne .LBB21_1
856+
; X86-SLM-NEXT: # %bb.2: # %atomicrmw.end
857+
; X86-SLM-NEXT: addl $8, %esp
858+
; X86-SLM-NEXT: .cfi_def_cfa_offset 4
859+
; X86-SLM-NEXT: retl
860+
;
861+
; X86-ATOM-LABEL: atomic_fadd_zero:
862+
; X86-ATOM: # %bb.0:
863+
; X86-ATOM-NEXT: leal -{{[0-9]+}}(%esp), %esp
864+
; X86-ATOM-NEXT: .cfi_def_cfa_offset 12
865+
; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx
866+
; X86-ATOM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
867+
; X86-ATOM-NEXT: .p2align 4
868+
; X86-ATOM-NEXT: .LBB21_1: # %atomicrmw.start
869+
; X86-ATOM-NEXT: # =>This Inner Loop Header: Depth=1
870+
; X86-ATOM-NEXT: movss %xmm0, (%esp)
871+
; X86-ATOM-NEXT: movl (%esp), %eax
872+
; X86-ATOM-NEXT: lock cmpxchgl %eax, (%ecx)
873+
; X86-ATOM-NEXT: movl %eax, {{[0-9]+}}(%esp)
874+
; X86-ATOM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
875+
; X86-ATOM-NEXT: jne .LBB21_1
876+
; X86-ATOM-NEXT: # %bb.2: # %atomicrmw.end
877+
; X86-ATOM-NEXT: leal {{[0-9]+}}(%esp), %esp
878+
; X86-ATOM-NEXT: .cfi_def_cfa_offset 4
879+
; X86-ATOM-NEXT: retl
880+
atomicrmw fadd ptr %addr, float -0.0 monotonic
881+
ret void
882+
}
883+
884+
define void @atomic_fsub_zero(ptr %addr) {
885+
; CHECK-LABEL: @atomic_fsub_canon(
886+
; CHECK-NEXT: [[RES:%.*]] = atomicrmw fadd ptr [[ADDR:%.*]], float -0.000000e+00 release, align 4
887+
; CHECK-NEXT: ret float [[RES]]
888+
;
889+
; X64-LABEL: atomic_fsub_zero:
890+
; X64: # %bb.0:
891+
; X64-NEXT: movl (%rdi), %eax
892+
; X64-NEXT: .p2align 4
893+
; X64-NEXT: .LBB22_1: # %atomicrmw.start
894+
; X64-NEXT: # =>This Inner Loop Header: Depth=1
895+
; X64-NEXT: lock cmpxchgl %eax, (%rdi)
896+
; X64-NEXT: jne .LBB22_1
897+
; X64-NEXT: # %bb.2: # %atomicrmw.end
898+
; X64-NEXT: retq
899+
;
900+
; X86-SSE2-LABEL: atomic_fsub_zero:
901+
; X86-SSE2: # %bb.0:
902+
; X86-SSE2-NEXT: movl {{[0-9]+}}(%esp), %ecx
903+
; X86-SSE2-NEXT: movd {{.*#+}} xmm0 = mem[0],zero,zero,zero
904+
; X86-SSE2-NEXT: .p2align 4
905+
; X86-SSE2-NEXT: .LBB22_1: # %atomicrmw.start
906+
; X86-SSE2-NEXT: # =>This Inner Loop Header: Depth=1
907+
; X86-SSE2-NEXT: movd %xmm0, %eax
908+
; X86-SSE2-NEXT: lock cmpxchgl %eax, (%ecx)
909+
; X86-SSE2-NEXT: movd %eax, %xmm0
910+
; X86-SSE2-NEXT: jne .LBB22_1
911+
; X86-SSE2-NEXT: # %bb.2: # %atomicrmw.end
912+
; X86-SSE2-NEXT: retl
913+
;
914+
; X86-SLM-LABEL: atomic_fsub_zero:
915+
; X86-SLM: # %bb.0:
916+
; X86-SLM-NEXT: subl $8, %esp
917+
; X86-SLM-NEXT: .cfi_def_cfa_offset 12
918+
; X86-SLM-NEXT: movl {{[0-9]+}}(%esp), %ecx
919+
; X86-SLM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
920+
; X86-SLM-NEXT: .p2align 4
921+
; X86-SLM-NEXT: .LBB22_1: # %atomicrmw.start
922+
; X86-SLM-NEXT: # =>This Inner Loop Header: Depth=1
923+
; X86-SLM-NEXT: movss %xmm0, (%esp)
924+
; X86-SLM-NEXT: movl (%esp), %eax
925+
; X86-SLM-NEXT: lock cmpxchgl %eax, (%ecx)
926+
; X86-SLM-NEXT: movl %eax, {{[0-9]+}}(%esp)
927+
; X86-SLM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
928+
; X86-SLM-NEXT: jne .LBB22_1
929+
; X86-SLM-NEXT: # %bb.2: # %atomicrmw.end
930+
; X86-SLM-NEXT: addl $8, %esp
931+
; X86-SLM-NEXT: .cfi_def_cfa_offset 4
932+
; X86-SLM-NEXT: retl
933+
;
934+
; X86-ATOM-LABEL: atomic_fsub_zero:
935+
; X86-ATOM: # %bb.0:
936+
; X86-ATOM-NEXT: leal -{{[0-9]+}}(%esp), %esp
937+
; X86-ATOM-NEXT: .cfi_def_cfa_offset 12
938+
; X86-ATOM-NEXT: movl {{[0-9]+}}(%esp), %ecx
939+
; X86-ATOM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
940+
; X86-ATOM-NEXT: .p2align 4
941+
; X86-ATOM-NEXT: .LBB22_1: # %atomicrmw.start
942+
; X86-ATOM-NEXT: # =>This Inner Loop Header: Depth=1
943+
; X86-ATOM-NEXT: movss %xmm0, (%esp)
944+
; X86-ATOM-NEXT: movl (%esp), %eax
945+
; X86-ATOM-NEXT: lock cmpxchgl %eax, (%ecx)
946+
; X86-ATOM-NEXT: movl %eax, {{[0-9]+}}(%esp)
947+
; X86-ATOM-NEXT: movss {{.*#+}} xmm0 = mem[0],zero,zero,zero
948+
; X86-ATOM-NEXT: jne .LBB22_1
949+
; X86-ATOM-NEXT: # %bb.2: # %atomicrmw.end
950+
; X86-ATOM-NEXT: leal {{[0-9]+}}(%esp), %esp
951+
; X86-ATOM-NEXT: .cfi_def_cfa_offset 4
952+
; X86-ATOM-NEXT: retl
953+
atomicrmw fsub ptr %addr, float 0.0 release
954+
ret void
955+
}
956+
625957
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)