Skip to content

Commit bda0fc0

Browse files
committed
[ValueTracking] Add tests for computeKnownFPClass of llvm.vector.reduce.{fmin,fmax,fmaximum,fminimum}; NFC
1 parent b63fe0d commit bda0fc0

File tree

1 file changed

+112
-0
lines changed

1 file changed

+112
-0
lines changed

llvm/test/Transforms/InstSimplify/known-never-infinity.ll

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,6 +1109,118 @@ define float @fcmp_ult_neginf_implies_class_assert(float %arg) {
11091109
ret float %mul_by_zero
11101110
}
11111111

1112+
define i1 @isKnownNeverInfinity_vector_reduce_maximum(<4 x double> %x) {
1113+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_maximum
1114+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1115+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1116+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> [[NINF_X]])
1117+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1118+
; CHECK-NEXT: ret i1 [[CMP]]
1119+
;
1120+
%ninf.x = fadd ninf <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1121+
%op = call double @llvm.vector.reduce.fmaximum(<4 x double> %ninf.x)
1122+
%cmp = fcmp une double %op, 0x7ff0000000000000
1123+
ret i1 %cmp
1124+
}
1125+
1126+
define i1 @isKnownNeverInfinity_vector_reduce_maximum_fail(<4 x double> %x) {
1127+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_maximum_fail
1128+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1129+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1130+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmaximum.v4f64(<4 x double> [[NINF_X]])
1131+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1132+
; CHECK-NEXT: ret i1 [[CMP]]
1133+
;
1134+
%ninf.x = fadd <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1135+
%op = call double @llvm.vector.reduce.fmaximum(<4 x double> %ninf.x)
1136+
%cmp = fcmp une double %op, 0x7ff0000000000000
1137+
ret i1 %cmp
1138+
}
1139+
1140+
define i1 @isKnownNeverInfinity_vector_reduce_minimum(<4 x double> %x) {
1141+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_minimum
1142+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1143+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1144+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> [[NINF_X]])
1145+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1146+
; CHECK-NEXT: ret i1 [[CMP]]
1147+
;
1148+
%ninf.x = fadd ninf <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1149+
%op = call double @llvm.vector.reduce.fminimum(<4 x double> %ninf.x)
1150+
%cmp = fcmp une double %op, 0x7ff0000000000000
1151+
ret i1 %cmp
1152+
}
1153+
1154+
define i1 @isKnownNeverInfinity_vector_reduce_minimum_fail(<4 x double> %x) {
1155+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_minimum_fail
1156+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1157+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1158+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fminimum.v4f64(<4 x double> [[NINF_X]])
1159+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1160+
; CHECK-NEXT: ret i1 [[CMP]]
1161+
;
1162+
%ninf.x = fadd <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1163+
%op = call double @llvm.vector.reduce.fminimum(<4 x double> %ninf.x)
1164+
%cmp = fcmp une double %op, 0x7ff0000000000000
1165+
ret i1 %cmp
1166+
}
1167+
1168+
define i1 @isKnownNeverInfinity_vector_reduce_fmax(<4 x double> %x) {
1169+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmax
1170+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1171+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1172+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> [[NINF_X]])
1173+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1174+
; CHECK-NEXT: ret i1 [[CMP]]
1175+
;
1176+
%ninf.x = fadd ninf <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1177+
%op = call double @llvm.vector.reduce.fmax(<4 x double> %ninf.x)
1178+
%cmp = fcmp une double %op, 0x7ff0000000000000
1179+
ret i1 %cmp
1180+
}
1181+
1182+
define i1 @isKnownNeverInfinity_vector_reduce_fmax_fail(<4 x double> %x) {
1183+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmax_fail
1184+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1185+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1186+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmax.v4f64(<4 x double> [[NINF_X]])
1187+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1188+
; CHECK-NEXT: ret i1 [[CMP]]
1189+
;
1190+
%ninf.x = fadd <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1191+
%op = call double @llvm.vector.reduce.fmax(<4 x double> %ninf.x)
1192+
%cmp = fcmp une double %op, 0x7ff0000000000000
1193+
ret i1 %cmp
1194+
}
1195+
1196+
define i1 @isKnownNeverInfinity_vector_reduce_fmin(<4 x double> %x) {
1197+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmin
1198+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1199+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd ninf <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1200+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> [[NINF_X]])
1201+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1202+
; CHECK-NEXT: ret i1 [[CMP]]
1203+
;
1204+
%ninf.x = fadd ninf <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1205+
%op = call double @llvm.vector.reduce.fmin(<4 x double> %ninf.x)
1206+
%cmp = fcmp une double %op, 0x7ff0000000000000
1207+
ret i1 %cmp
1208+
}
1209+
1210+
define i1 @isKnownNeverInfinity_vector_reduce_fmin_fail(<4 x double> %x) {
1211+
; CHECK-LABEL: define i1 @isKnownNeverInfinity_vector_reduce_fmin_fail
1212+
; CHECK-SAME: (<4 x double> [[X:%.*]]) {
1213+
; CHECK-NEXT: [[NINF_X:%.*]] = fadd <4 x double> [[X]], <double 1.000000e+00, double 1.000000e+00, double 1.000000e+00, double 1.000000e+00>
1214+
; CHECK-NEXT: [[OP:%.*]] = call double @llvm.vector.reduce.fmin.v4f64(<4 x double> [[NINF_X]])
1215+
; CHECK-NEXT: [[CMP:%.*]] = fcmp une double [[OP]], 0x7FF0000000000000
1216+
; CHECK-NEXT: ret i1 [[CMP]]
1217+
;
1218+
%ninf.x = fadd <4 x double> %x, <double 1.0, double 1.0, double 1.0, double 1.0>
1219+
%op = call double @llvm.vector.reduce.fmin(<4 x double> %ninf.x)
1220+
%cmp = fcmp une double %op, 0x7ff0000000000000
1221+
ret i1 %cmp
1222+
}
1223+
11121224
declare double @llvm.arithmetic.fence.f64(double)
11131225
declare double @llvm.canonicalize.f64(double)
11141226
declare double @llvm.ceil.f64(double)

0 commit comments

Comments
 (0)