@@ -802,6 +802,66 @@ define i32 @freeze_fshr(i32 %a0, i32 %a1, i32 %a2) nounwind {
802
802
ret i32 %z
803
803
}
804
804
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
+
805
865
define void @pr59676_frozen (ptr %dst , i32 %x.orig ) {
806
866
; X86-LABEL: pr59676_frozen:
807
867
; X86: # %bb.0:
0 commit comments