Skip to content

Commit 9a33dc9

Browse files
committed
[CVP] Add tests for saturating add/sub ranges; NFC
llvm-svn: 361694
1 parent 024b18a commit 9a33dc9

File tree

1 file changed

+97
-0
lines changed
  • llvm/test/Transforms/CorrelatedValuePropagation

1 file changed

+97
-0
lines changed

llvm/test/Transforms/CorrelatedValuePropagation/basic.ll

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -986,3 +986,100 @@ exit1:
986986
exit2:
987987
ret i1 %cmp2
988988
}
989+
990+
define i1 @uadd_sat_unknown(i32 %a) {
991+
; CHECK-LABEL: @uadd_sat_unknown(
992+
; CHECK-NEXT: entry:
993+
; CHECK-NEXT: [[VAL:%.*]] = call i32 @llvm.uadd.sat.i32(i32 [[A:%.*]], i32 100)
994+
; CHECK-NEXT: [[CMP1:%.*]] = icmp uge i32 [[VAL]], 100
995+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ugt i32 [[VAL]], 100
996+
; CHECK-NEXT: br i1 undef, label [[EXIT1:%.*]], label [[EXIT2:%.*]]
997+
; CHECK: exit1:
998+
; CHECK-NEXT: ret i1 [[CMP1]]
999+
; CHECK: exit2:
1000+
; CHECK-NEXT: ret i1 [[CMP2]]
1001+
;
1002+
entry:
1003+
%val = call i32 @llvm.uadd.sat.i32(i32 %a, i32 100)
1004+
%cmp1 = icmp uge i32 %val, 100
1005+
%cmp2 = icmp ugt i32 %val, 100
1006+
br i1 undef, label %exit1, label %exit2
1007+
exit1:
1008+
ret i1 %cmp1
1009+
exit2:
1010+
ret i1 %cmp2
1011+
}
1012+
1013+
define i1 @usub_sat_unknown(i32 %a) {
1014+
; CHECK-LABEL: @usub_sat_unknown(
1015+
; CHECK-NEXT: entry:
1016+
; CHECK-NEXT: [[VAL:%.*]] = call i32 @llvm.usub.sat.i32(i32 [[A:%.*]], i32 100)
1017+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ule i32 [[VAL]], -101
1018+
; CHECK-NEXT: [[CMP2:%.*]] = icmp ult i32 [[VAL]], -101
1019+
; CHECK-NEXT: br i1 undef, label [[EXIT1:%.*]], label [[EXIT2:%.*]]
1020+
; CHECK: exit1:
1021+
; CHECK-NEXT: ret i1 [[CMP1]]
1022+
; CHECK: exit2:
1023+
; CHECK-NEXT: ret i1 [[CMP2]]
1024+
;
1025+
entry:
1026+
%val = call i32 @llvm.usub.sat.i32(i32 %a, i32 100)
1027+
%cmp1 = icmp ule i32 %val, 4294967195
1028+
%cmp2 = icmp ult i32 %val, 4294967195
1029+
br i1 undef, label %exit1, label %exit2
1030+
exit1:
1031+
ret i1 %cmp1
1032+
exit2:
1033+
ret i1 %cmp2
1034+
}
1035+
1036+
define i1 @sadd_sat_unknown(i32 %a) {
1037+
; CHECK-LABEL: @sadd_sat_unknown(
1038+
; CHECK-NEXT: entry:
1039+
; CHECK-NEXT: [[VAL:%.*]] = call i32 @llvm.sadd.sat.i32(i32 [[A:%.*]], i32 100)
1040+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sge i32 [[VAL]], -2147483548
1041+
; CHECK-NEXT: [[CMP2:%.*]] = icmp sgt i32 [[VAL]], -2147483548
1042+
; CHECK-NEXT: br i1 undef, label [[EXIT1:%.*]], label [[EXIT2:%.*]]
1043+
; CHECK: exit1:
1044+
; CHECK-NEXT: ret i1 [[CMP1]]
1045+
; CHECK: exit2:
1046+
; CHECK-NEXT: ret i1 [[CMP2]]
1047+
;
1048+
entry:
1049+
%val = call i32 @llvm.sadd.sat.i32(i32 %a, i32 100)
1050+
%cmp1 = icmp sge i32 %val, -2147483548
1051+
%cmp2 = icmp sgt i32 %val, -2147483548
1052+
br i1 undef, label %exit1, label %exit2
1053+
exit1:
1054+
ret i1 %cmp1
1055+
exit2:
1056+
ret i1 %cmp2
1057+
}
1058+
1059+
define i1 @ssub_sat_unknown(i32 %a) {
1060+
; CHECK-LABEL: @ssub_sat_unknown(
1061+
; CHECK-NEXT: entry:
1062+
; CHECK-NEXT: [[VAL:%.*]] = call i32 @llvm.ssub.sat.i32(i32 [[A:%.*]], i32 100)
1063+
; CHECK-NEXT: [[CMP1:%.*]] = icmp sle i32 [[VAL]], 2147483547
1064+
; CHECK-NEXT: [[CMP2:%.*]] = icmp slt i32 [[VAL]], 2147483547
1065+
; CHECK-NEXT: br i1 undef, label [[EXIT1:%.*]], label [[EXIT2:%.*]]
1066+
; CHECK: exit1:
1067+
; CHECK-NEXT: ret i1 [[CMP1]]
1068+
; CHECK: exit2:
1069+
; CHECK-NEXT: ret i1 [[CMP2]]
1070+
;
1071+
entry:
1072+
%val = call i32 @llvm.ssub.sat.i32(i32 %a, i32 100)
1073+
%cmp1 = icmp sle i32 %val, 2147483547
1074+
%cmp2 = icmp slt i32 %val, 2147483547
1075+
br i1 undef, label %exit1, label %exit2
1076+
exit1:
1077+
ret i1 %cmp1
1078+
exit2:
1079+
ret i1 %cmp2
1080+
}
1081+
1082+
declare i32 @llvm.uadd.sat.i32(i32, i32)
1083+
declare i32 @llvm.usub.sat.i32(i32, i32)
1084+
declare i32 @llvm.sadd.sat.i32(i32, i32)
1085+
declare i32 @llvm.ssub.sat.i32(i32, i32)

0 commit comments

Comments
 (0)