Skip to content

Commit 6956788

Browse files
committed
[InstCombine] add tests for absolute diff; NFC
More coverage for D145073.
1 parent be646ef commit 6956788

File tree

1 file changed

+83
-0
lines changed
  • llvm/test/Transforms/InstCombine

1 file changed

+83
-0
lines changed

llvm/test/Transforms/InstCombine/abs-1.ll

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -760,6 +760,89 @@ define i32 @abs_diff_signed_slt_no_nsw(i32 %a, i32 %b) {
760760
ret i32 %cond
761761
}
762762

763+
define i8 @abs_diff_signed_sgt_nsw_nuw(i8 %a, i8 %b) {
764+
; CHECK-LABEL: @abs_diff_signed_sgt_nsw_nuw(
765+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
766+
; CHECK-NEXT: [[SUB_BA:%.*]] = sub nuw nsw i8 [[B]], [[A]]
767+
; CHECK-NEXT: [[SUB_AB:%.*]] = sub nuw nsw i8 [[A]], [[B]]
768+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i8 [[SUB_AB]], i8 [[SUB_BA]]
769+
; CHECK-NEXT: ret i8 [[COND]]
770+
;
771+
%cmp = icmp sgt i8 %a, %b
772+
%sub_ba = sub nsw nuw i8 %b, %a
773+
%sub_ab = sub nsw nuw i8 %a, %b
774+
%cond = select i1 %cmp, i8 %sub_ab, i8 %sub_ba
775+
ret i8 %cond
776+
}
777+
778+
define i8 @abs_diff_signed_sgt_nuw(i8 %a, i8 %b) {
779+
; CHECK-LABEL: @abs_diff_signed_sgt_nuw(
780+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
781+
; CHECK-NEXT: [[SUB_BA:%.*]] = sub nuw i8 [[B]], [[A]]
782+
; CHECK-NEXT: [[SUB_AB:%.*]] = sub nuw i8 [[A]], [[B]]
783+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i8 [[SUB_AB]], i8 [[SUB_BA]]
784+
; CHECK-NEXT: ret i8 [[COND]]
785+
;
786+
%cmp = icmp sgt i8 %a, %b
787+
%sub_ba = sub nuw i8 %b, %a
788+
%sub_ab = sub nuw i8 %a, %b
789+
%cond = select i1 %cmp, i8 %sub_ab, i8 %sub_ba
790+
ret i8 %cond
791+
}
792+
793+
define i8 @abs_diff_signed_sgt_nuw_extra_use1(i8 %a, i8 %b) {
794+
; CHECK-LABEL: @abs_diff_signed_sgt_nuw_extra_use1(
795+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
796+
; CHECK-NEXT: [[SUB_BA:%.*]] = sub nuw i8 [[B]], [[A]]
797+
; CHECK-NEXT: call void @extra_use(i8 [[SUB_BA]])
798+
; CHECK-NEXT: [[SUB_AB:%.*]] = sub nuw i8 [[A]], [[B]]
799+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i8 [[SUB_AB]], i8 [[SUB_BA]]
800+
; CHECK-NEXT: ret i8 [[COND]]
801+
;
802+
%cmp = icmp sgt i8 %a, %b
803+
%sub_ba = sub nuw i8 %b, %a
804+
call void @extra_use(i8 %sub_ba)
805+
%sub_ab = sub nuw i8 %a, %b
806+
%cond = select i1 %cmp, i8 %sub_ab, i8 %sub_ba
807+
ret i8 %cond
808+
}
809+
810+
define i8 @abs_diff_signed_sgt_nuw_extra_use2(i8 %a, i8 %b) {
811+
; CHECK-LABEL: @abs_diff_signed_sgt_nuw_extra_use2(
812+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
813+
; CHECK-NEXT: [[SUB_BA:%.*]] = sub nuw i8 [[B]], [[A]]
814+
; CHECK-NEXT: [[SUB_AB:%.*]] = sub nuw i8 [[A]], [[B]]
815+
; CHECK-NEXT: call void @extra_use(i8 [[SUB_AB]])
816+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i8 [[SUB_AB]], i8 [[SUB_BA]]
817+
; CHECK-NEXT: ret i8 [[COND]]
818+
;
819+
%cmp = icmp sgt i8 %a, %b
820+
%sub_ba = sub nuw i8 %b, %a
821+
%sub_ab = sub nuw i8 %a, %b
822+
call void @extra_use(i8 %sub_ab)
823+
%cond = select i1 %cmp, i8 %sub_ab, i8 %sub_ba
824+
ret i8 %cond
825+
}
826+
827+
define i8 @abs_diff_signed_sgt_nuw_extra_use3(i8 %a, i8 %b) {
828+
; CHECK-LABEL: @abs_diff_signed_sgt_nuw_extra_use3(
829+
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[A:%.*]], [[B:%.*]]
830+
; CHECK-NEXT: [[SUB_BA:%.*]] = sub nuw i8 [[B]], [[A]]
831+
; CHECK-NEXT: call void @extra_use(i8 [[SUB_BA]])
832+
; CHECK-NEXT: [[SUB_AB:%.*]] = sub nuw i8 [[A]], [[B]]
833+
; CHECK-NEXT: call void @extra_use(i8 [[SUB_AB]])
834+
; CHECK-NEXT: [[COND:%.*]] = select i1 [[CMP]], i8 [[SUB_AB]], i8 [[SUB_BA]]
835+
; CHECK-NEXT: ret i8 [[COND]]
836+
;
837+
%cmp = icmp sgt i8 %a, %b
838+
%sub_ba = sub nuw i8 %b, %a
839+
call void @extra_use(i8 %sub_ba)
840+
%sub_ab = sub nuw i8 %a, %b
841+
call void @extra_use(i8 %sub_ab)
842+
%cond = select i1 %cmp, i8 %sub_ab, i8 %sub_ba
843+
ret i8 %cond
844+
}
845+
763846
define i32 @abs_diff_signed_slt_swap_wrong_pred1(i32 %a, i32 %b) {
764847
; CHECK-LABEL: @abs_diff_signed_slt_swap_wrong_pred1(
765848
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], [[B:%.*]]

0 commit comments

Comments
 (0)