Skip to content

Commit 1dfc3e8

Browse files
committed
[X86] Add test coverage to show failure to push freeze through saddo/uaddo nodes (+carry variants)
Test coverage to pull out the overflow handling from #145939
1 parent 2e7aa7e commit 1dfc3e8

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

llvm/test/CodeGen/X86/freeze-binary.ll

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -802,6 +802,66 @@ define i32 @freeze_fshr(i32 %a0, i32 %a1, i32 %a2) nounwind {
802802
ret i32 %z
803803
}
804804

805+
define i32 @freeze_saddo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {
806+
; X86-LABEL: freeze_saddo:
807+
; X86: # %bb.0:
808+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
809+
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
810+
; X86-NEXT: addb {{[0-9]+}}(%esp), %cl
811+
; X86-NEXT: adcl $0, %eax
812+
; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
813+
; X86-NEXT: retl
814+
;
815+
; X64-LABEL: freeze_saddo:
816+
; X64: # %bb.0:
817+
; X64-NEXT: # kill: def $esi killed $esi def $rsi
818+
; X64-NEXT: # kill: def $edi killed $edi def $rdi
819+
; X64-NEXT: addb %cl, %dl
820+
; X64-NEXT: adcl $0, %edi
821+
; X64-NEXT: leal (%rdi,%rsi), %eax
822+
; X64-NEXT: retq
823+
%b = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a2, i8 %a3)
824+
%b.o = extractvalue {i8, i1} %b, 1
825+
%x = zext i1 %b.o to i32
826+
827+
%f0 = freeze i32 %a0
828+
%o = call {i32, i1} @llvm.sadd.with.overflow.i32(i32 %f0, i32 %x)
829+
%f = freeze {i32, i1} %o
830+
%v = extractvalue {i32, i1} %f, 0
831+
%r = add i32 %v, %a1
832+
ret i32 %r
833+
}
834+
835+
define i32 @freeze_uaddo(i32 %a0, i32 %a1, i8 %a2, i8 %a3) nounwind {
836+
; X86-LABEL: freeze_uaddo:
837+
; X86: # %bb.0:
838+
; X86-NEXT: movl {{[0-9]+}}(%esp), %eax
839+
; X86-NEXT: movzbl {{[0-9]+}}(%esp), %ecx
840+
; X86-NEXT: addb {{[0-9]+}}(%esp), %cl
841+
; X86-NEXT: adcl $0, %eax
842+
; X86-NEXT: addl {{[0-9]+}}(%esp), %eax
843+
; X86-NEXT: retl
844+
;
845+
; X64-LABEL: freeze_uaddo:
846+
; X64: # %bb.0:
847+
; X64-NEXT: # kill: def $esi killed $esi def $rsi
848+
; X64-NEXT: # kill: def $edi killed $edi def $rdi
849+
; X64-NEXT: addb %cl, %dl
850+
; X64-NEXT: adcl $0, %edi
851+
; X64-NEXT: leal (%rdi,%rsi), %eax
852+
; X64-NEXT: retq
853+
%b = call {i8, i1} @llvm.uadd.with.overflow.i8(i8 %a2, i8 %a3)
854+
%b.o = extractvalue {i8, i1} %b, 1
855+
%x = zext i1 %b.o to i32
856+
857+
%f0 = freeze i32 %a0
858+
%o = call {i32, i1} @llvm.uadd.with.overflow.i32(i32 %f0, i32 %x)
859+
%f = freeze {i32, i1} %o
860+
%v = extractvalue {i32, i1} %f, 0
861+
%r = add i32 %v, %a1
862+
ret i32 %r
863+
}
864+
805865
define void @pr59676_frozen(ptr %dst, i32 %x.orig) {
806866
; X86-LABEL: pr59676_frozen:
807867
; X86: # %bb.0:

0 commit comments

Comments
 (0)