Skip to content

Commit 45b2aeb

Browse files
author
git apple-llvm automerger
committed
Merge commit '126139f64be3' from apple/master into swift/master-next
2 parents c7428c1 + 126139f commit 45b2aeb

File tree

1 file changed

+100
-8
lines changed

1 file changed

+100
-8
lines changed

llvm/test/Transforms/CorrelatedValuePropagation/overflows.ll

Lines changed: 100 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -729,8 +729,8 @@ define { <2 x i32>, <2 x i1> } @uaddo_vec(<2 x i32> %a) {
729729
}
730730

731731

732-
define i8 @uadd_sat_no_overflow(i8 %x) {
733-
; CHECK-LABEL: @uadd_sat_no_overflow(
732+
define i8 @uadd_sat_no_unsigned_overflow(i8 %x) {
733+
; CHECK-LABEL: @uadd_sat_no_unsigned_overflow(
734734
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 100
735735
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
736736
; CHECK: trap:
@@ -752,8 +752,31 @@ cont:
752752
ret i8 %res
753753
}
754754

755-
define i8 @sadd_sat_no_overflow(i8 %x) {
756-
; CHECK-LABEL: @sadd_sat_no_overflow(
755+
define i8 @uadd_sat_no_overflow(i8 %x) {
756+
; CHECK-LABEL: @uadd_sat_no_overflow(
757+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 27
758+
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
759+
; CHECK: trap:
760+
; CHECK-NEXT: call void @llvm.trap()
761+
; CHECK-NEXT: unreachable
762+
; CHECK: cont:
763+
; CHECK-NEXT: [[RES1:%.*]] = add nuw i8 [[X]], 100
764+
; CHECK-NEXT: ret i8 [[RES1]]
765+
;
766+
%cmp = icmp ugt i8 %x, 27
767+
br i1 %cmp, label %trap, label %cont
768+
769+
trap:
770+
call void @llvm.trap()
771+
unreachable
772+
773+
cont:
774+
%res = call i8 @llvm.uadd.sat.i8(i8 %x, i8 100)
775+
ret i8 %res
776+
}
777+
778+
define i8 @sadd_sat_no_signed_overflow(i8 %x) {
779+
; CHECK-LABEL: @sadd_sat_no_signed_overflow(
757780
; CHECK-NEXT: [[CMP:%.*]] = icmp sgt i8 [[X:%.*]], 100
758781
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
759782
; CHECK: trap:
@@ -775,8 +798,31 @@ cont:
775798
ret i8 %res
776799
}
777800

778-
define i8 @usub_sat_no_overflow(i8 %x) {
779-
; CHECK-LABEL: @usub_sat_no_overflow(
801+
define i8 @sadd_sat_no_overflow(i8 %x) {
802+
; CHECK-LABEL: @sadd_sat_no_overflow(
803+
; CHECK-NEXT: [[CMP:%.*]] = icmp ugt i8 [[X:%.*]], 107
804+
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
805+
; CHECK: trap:
806+
; CHECK-NEXT: call void @llvm.trap()
807+
; CHECK-NEXT: unreachable
808+
; CHECK: cont:
809+
; CHECK-NEXT: [[RES1:%.*]] = add nsw i8 [[X]], 20
810+
; CHECK-NEXT: ret i8 [[RES1]]
811+
;
812+
%cmp = icmp ugt i8 %x, 107
813+
br i1 %cmp, label %trap, label %cont
814+
815+
trap:
816+
call void @llvm.trap()
817+
unreachable
818+
819+
cont:
820+
%res = call i8 @llvm.sadd.sat.i8(i8 %x, i8 20)
821+
ret i8 %res
822+
}
823+
824+
define i8 @usub_sat_no_unsigned_overflow(i8 %x) {
825+
; CHECK-LABEL: @usub_sat_no_unsigned_overflow(
780826
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], 100
781827
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
782828
; CHECK: trap:
@@ -798,8 +844,31 @@ cont:
798844
ret i8 %res
799845
}
800846

801-
define i8 @ssub_sat_no_overflow(i8 %x) {
802-
; CHECK-LABEL: @ssub_sat_no_overflow(
847+
define i8 @usub_sat_no_overflow(i8 %x) {
848+
; CHECK-LABEL: @usub_sat_no_overflow(
849+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], -28
850+
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
851+
; CHECK: trap:
852+
; CHECK-NEXT: call void @llvm.trap()
853+
; CHECK-NEXT: unreachable
854+
; CHECK: cont:
855+
; CHECK-NEXT: [[RES1:%.*]] = sub nuw i8 [[X]], 100
856+
; CHECK-NEXT: ret i8 [[RES1]]
857+
;
858+
%cmp = icmp ult i8 %x, 228
859+
br i1 %cmp, label %trap, label %cont
860+
861+
trap:
862+
call void @llvm.trap()
863+
unreachable
864+
865+
cont:
866+
%res = call i8 @llvm.usub.sat.i8(i8 %x, i8 100)
867+
ret i8 %res
868+
}
869+
870+
define i8 @ssub_sat_no_signed_overflow(i8 %x) {
871+
; CHECK-LABEL: @ssub_sat_no_signed_overflow(
803872
; CHECK-NEXT: [[CMP:%.*]] = icmp slt i8 [[X:%.*]], -100
804873
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
805874
; CHECK: trap:
@@ -821,6 +890,29 @@ cont:
821890
ret i8 %res
822891
}
823892

893+
define i8 @ssub_sat_no_overflow(i8 %x) {
894+
; CHECK-LABEL: @ssub_sat_no_overflow(
895+
; CHECK-NEXT: [[CMP:%.*]] = icmp ult i8 [[X:%.*]], -108
896+
; CHECK-NEXT: br i1 [[CMP]], label [[TRAP:%.*]], label [[CONT:%.*]]
897+
; CHECK: trap:
898+
; CHECK-NEXT: call void @llvm.trap()
899+
; CHECK-NEXT: unreachable
900+
; CHECK: cont:
901+
; CHECK-NEXT: [[RES1:%.*]] = sub nsw i8 [[X]], 20
902+
; CHECK-NEXT: ret i8 [[RES1]]
903+
;
904+
%cmp = icmp ult i8 %x, 148
905+
br i1 %cmp, label %trap, label %cont
906+
907+
trap:
908+
call void @llvm.trap()
909+
unreachable
910+
911+
cont:
912+
%res = call i8 @llvm.ssub.sat.i8(i8 %x, i8 20)
913+
ret i8 %res
914+
}
915+
824916
define <2 x i8> @uadd_sat_vec(<2 x i8> %a) {
825917
; CHECK-LABEL: @uadd_sat_vec(
826918
; CHECK-NEXT: [[ADD:%.*]] = call <2 x i8> @llvm.uadd.sat.v2i8(<2 x i8> [[A:%.*]], <2 x i8> <i8 1, i8 1>)

0 commit comments

Comments
 (0)