Skip to content

Commit af88034

Browse files
committed
pre-commit tests for range attributes in valuetracking
1 parent 096fcfa commit af88034

File tree

2 files changed

+398
-0
lines changed

2 files changed

+398
-0
lines changed

llvm/test/Transforms/InstSimplify/icmp-constant.ll

Lines changed: 264 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1140,3 +1140,267 @@ define <2 x i1> @heterogeneous_constvector(<2 x i8> %x) {
11401140
%c = icmp ult <2 x i8> %x, <i8 undef, i8 poison>
11411141
ret <2 x i1> %c
11421142
}
1143+
1144+
define i1 @icmp_eq_non_zero_range_attr(i8 range(i8 1, 0) %i) {
1145+
; CHECK-LABEL: @icmp_eq_non_zero_range_attr(
1146+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 0
1147+
; CHECK-NEXT: ret i1 [[CMP]]
1148+
;
1149+
%cmp = icmp eq i8 %i, 0
1150+
ret i1 %cmp
1151+
}
1152+
1153+
define i1 @neg_icmp_eq_non_zero_range_attr(i8 range(i8 -1, 1) %i) {
1154+
; CHECK-LABEL: @neg_icmp_eq_non_zero_range_attr(
1155+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 0
1156+
; CHECK-NEXT: ret i1 [[CMP]]
1157+
;
1158+
%cmp = icmp eq i8 %i, 0
1159+
ret i1 %cmp
1160+
}
1161+
1162+
declare range(i8 1, 0) i8 @returns_non_zero_range_helper()
1163+
declare range(i8 -1, 1) i8 @returns_contain_zero_range_helper()
1164+
1165+
define i1 @icmp_eq_non_zero_range_return() {
1166+
; CHECK-LABEL: @icmp_eq_non_zero_range_return(
1167+
; CHECK-NEXT: [[I:%.*]] = call i8 @returns_non_zero_range_helper()
1168+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1169+
; CHECK-NEXT: ret i1 [[CMP]]
1170+
;
1171+
%i = call i8 @returns_non_zero_range_helper()
1172+
%cmp = icmp eq i8 %i, 0
1173+
ret i1 %cmp
1174+
}
1175+
1176+
define i1 @neg_icmp_eq_non_zero_range_return() {
1177+
; CHECK-LABEL: @neg_icmp_eq_non_zero_range_return(
1178+
; CHECK-NEXT: [[I:%.*]] = call i8 @returns_contain_zero_range_helper()
1179+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1180+
; CHECK-NEXT: ret i1 [[CMP]]
1181+
;
1182+
%i = call i8 @returns_contain_zero_range_helper()
1183+
%cmp = icmp eq i8 %i, 0
1184+
ret i1 %cmp
1185+
}
1186+
1187+
declare i8 @returns_i8_helper()
1188+
1189+
define i1 @icmp_eq_non_zero_range_call() {
1190+
; CHECK-LABEL: @icmp_eq_non_zero_range_call(
1191+
; CHECK-NEXT: [[I:%.*]] = call range(i8 1, 0) i8 @returns_i8_helper()
1192+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1193+
; CHECK-NEXT: ret i1 [[CMP]]
1194+
;
1195+
%i = call range(i8 1, 0) i8 @returns_i8_helper()
1196+
%cmp = icmp eq i8 %i, 0
1197+
ret i1 %cmp
1198+
}
1199+
1200+
define i1 @neg_icmp_eq_non_zero_range_call() {
1201+
; CHECK-LABEL: @neg_icmp_eq_non_zero_range_call(
1202+
; CHECK-NEXT: [[I:%.*]] = call range(i8 -1, 1) i8 @returns_i8_helper()
1203+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 0
1204+
; CHECK-NEXT: ret i1 [[CMP]]
1205+
;
1206+
%i = call range(i8 -1, 1) i8 @returns_i8_helper()
1207+
%cmp = icmp eq i8 %i, 0
1208+
ret i1 %cmp
1209+
}
1210+
1211+
define <2 x i1> @icmp_eq_non_zero_range_attr_vec(<2 x i8> range(i8 1, 0) %i) {
1212+
; CHECK-LABEL: @icmp_eq_non_zero_range_attr_vec(
1213+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I:%.*]], zeroinitializer
1214+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1215+
;
1216+
%cmp = icmp eq <2 x i8> %i, <i8 0, i8 0>
1217+
ret <2 x i1> %cmp
1218+
}
1219+
1220+
define <2 x i1> @neg_icmp_eq_non_zero_range_attr_vec(<2 x i8> range(i8 -1, 1) %i) {
1221+
; CHECK-LABEL: @neg_icmp_eq_non_zero_range_attr_vec(
1222+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I:%.*]], zeroinitializer
1223+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1224+
;
1225+
%cmp = icmp eq <2 x i8> %i, <i8 0, i8 0>
1226+
ret <2 x i1> %cmp
1227+
}
1228+
1229+
declare range(i8 1, 0) <2 x i8> @returns_non_zero_range_helper_vec()
1230+
declare range(i8 -1, 1) <2 x i8> @returns_contain_zero_range_helper_vec()
1231+
1232+
define <2 x i1> @icmp_eq_non_zero_range_return_vec() {
1233+
; CHECK-LABEL: @icmp_eq_non_zero_range_return_vec(
1234+
; CHECK-NEXT: [[I:%.*]] = call <2 x i8> @returns_non_zero_range_helper_vec()
1235+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], zeroinitializer
1236+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1237+
;
1238+
%i = call <2 x i8> @returns_non_zero_range_helper_vec()
1239+
%cmp = icmp eq <2 x i8> %i, <i8 0, i8 0>
1240+
ret <2 x i1> %cmp
1241+
}
1242+
1243+
define <2 x i1> @neg_icmp_eq_non_zero_range_return_vec() {
1244+
; CHECK-LABEL: @neg_icmp_eq_non_zero_range_return_vec(
1245+
; CHECK-NEXT: [[I:%.*]] = call <2 x i8> @returns_contain_zero_range_helper_vec()
1246+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], zeroinitializer
1247+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1248+
;
1249+
%i = call <2 x i8> @returns_contain_zero_range_helper_vec()
1250+
%cmp = icmp eq <2 x i8> %i, <i8 0, i8 0>
1251+
ret <2 x i1> %cmp
1252+
}
1253+
1254+
declare <2 x i8> @returns_i8_helper_vec()
1255+
1256+
define <2 x i1> @icmp_eq_non_zero_range_call_vec() {
1257+
; CHECK-LABEL: @icmp_eq_non_zero_range_call_vec(
1258+
; CHECK-NEXT: [[I:%.*]] = call range(i8 1, 0) <2 x i8> @returns_i8_helper_vec()
1259+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], zeroinitializer
1260+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1261+
;
1262+
%i = call range(i8 1, 0) <2 x i8> @returns_i8_helper_vec()
1263+
%cmp = icmp eq <2 x i8> %i, <i8 0, i8 0>
1264+
ret <2 x i1> %cmp
1265+
}
1266+
1267+
define <2 x i1> @neg_icmp_eq_non_zero_range_call_vec() {
1268+
; CHECK-LABEL: @neg_icmp_eq_non_zero_range_call_vec(
1269+
; CHECK-NEXT: [[I:%.*]] = call range(i8 -1, 1) <2 x i8> @returns_i8_helper_vec()
1270+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], zeroinitializer
1271+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1272+
;
1273+
%i = call range(i8 -1, 1) <2 x i8> @returns_i8_helper_vec()
1274+
%cmp = icmp eq <2 x i8> %i, <i8 0, i8 0>
1275+
ret <2 x i1> %cmp
1276+
}
1277+
1278+
define i1 @icmp_eq_constant_range_attr(i8 range(i8 0, 10) %i) {
1279+
; CHECK-LABEL: @icmp_eq_constant_range_attr(
1280+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 10
1281+
; CHECK-NEXT: ret i1 [[CMP]]
1282+
;
1283+
%cmp = icmp eq i8 %i, 10
1284+
ret i1 %cmp
1285+
}
1286+
1287+
define i1 @neg_icmp_eq_constant_range_attr(i8 range(i8 0, 11) %i) {
1288+
; CHECK-LABEL: @neg_icmp_eq_constant_range_attr(
1289+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I:%.*]], 10
1290+
; CHECK-NEXT: ret i1 [[CMP]]
1291+
;
1292+
%cmp = icmp eq i8 %i, 10
1293+
ret i1 %cmp
1294+
}
1295+
1296+
declare range(i8 1, 0) i8 @returns_non_ten_range_helper()
1297+
declare range(i8 -1, 1) i8 @returns_contain_ten_range_helper()
1298+
1299+
define i1 @icmp_eq_constant_range_return() {
1300+
; CHECK-LABEL: @icmp_eq_constant_range_return(
1301+
; CHECK-NEXT: [[I:%.*]] = call i8 @returns_non_ten_range_helper()
1302+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 10
1303+
; CHECK-NEXT: ret i1 [[CMP]]
1304+
;
1305+
%i = call i8 @returns_non_ten_range_helper()
1306+
%cmp = icmp eq i8 %i, 10
1307+
ret i1 %cmp
1308+
}
1309+
1310+
define i1 @neg_icmp_eq_constant_range_return() {
1311+
; CHECK-LABEL: @neg_icmp_eq_constant_range_return(
1312+
; CHECK-NEXT: [[I:%.*]] = call i8 @returns_contain_ten_range_helper()
1313+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 10
1314+
; CHECK-NEXT: ret i1 [[CMP]]
1315+
;
1316+
%i = call i8 @returns_contain_ten_range_helper()
1317+
%cmp = icmp eq i8 %i, 10
1318+
ret i1 %cmp
1319+
}
1320+
1321+
define i1 @icmp_eq_constant_range_call() {
1322+
; CHECK-LABEL: @icmp_eq_constant_range_call(
1323+
; CHECK-NEXT: [[I:%.*]] = call range(i8 0, 10) i8 @returns_i8_helper()
1324+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 10
1325+
; CHECK-NEXT: ret i1 [[CMP]]
1326+
;
1327+
%i = call range(i8 0, 10) i8 @returns_i8_helper()
1328+
%cmp = icmp eq i8 %i, 10
1329+
ret i1 %cmp
1330+
}
1331+
1332+
define i1 @neg_icmp_eq_constant_range_call() {
1333+
; CHECK-LABEL: @neg_icmp_eq_constant_range_call(
1334+
; CHECK-NEXT: [[I:%.*]] = call range(i8 0, 11) i8 @returns_i8_helper()
1335+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i8 [[I]], 10
1336+
; CHECK-NEXT: ret i1 [[CMP]]
1337+
;
1338+
%i = call range(i8 0, 11) i8 @returns_i8_helper()
1339+
%cmp = icmp eq i8 %i, 10
1340+
ret i1 %cmp
1341+
}
1342+
1343+
define <2 x i1> @icmp_eq_constant_range_attr_vec(<2 x i8> range(i8 0, 10) %i) {
1344+
; CHECK-LABEL: @icmp_eq_constant_range_attr_vec(
1345+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I:%.*]], <i8 10, i8 10>
1346+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1347+
;
1348+
%cmp = icmp eq <2 x i8> %i, <i8 10, i8 10>
1349+
ret <2 x i1> %cmp
1350+
}
1351+
1352+
define <2 x i1> @neg_icmp_eq_constant_range_attr_vec(<2 x i8> range(i8 0, 11) %i) {
1353+
; CHECK-LABEL: @neg_icmp_eq_constant_range_attr_vec(
1354+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I:%.*]], <i8 10, i8 10>
1355+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1356+
;
1357+
%cmp = icmp eq <2 x i8> %i, <i8 10, i8 10>
1358+
ret <2 x i1> %cmp
1359+
}
1360+
1361+
declare range(i8 0, 10) <2 x i8> @returns_non_ten_range_helper_vec()
1362+
declare range(i8 0, 11) <2 x i8> @returns_contain_ten_range_helper_vec()
1363+
1364+
define <2 x i1> @icmp_eq_constant_range_return_vec() {
1365+
; CHECK-LABEL: @icmp_eq_constant_range_return_vec(
1366+
; CHECK-NEXT: [[I:%.*]] = call <2 x i8> @returns_non_ten_range_helper_vec()
1367+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], <i8 10, i8 10>
1368+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1369+
;
1370+
%i = call <2 x i8> @returns_non_ten_range_helper_vec()
1371+
%cmp = icmp eq <2 x i8> %i, <i8 10, i8 10>
1372+
ret <2 x i1> %cmp
1373+
}
1374+
1375+
define <2 x i1> @neg_icmp_eq_constant_range_return_vec() {
1376+
; CHECK-LABEL: @neg_icmp_eq_constant_range_return_vec(
1377+
; CHECK-NEXT: [[I:%.*]] = call <2 x i8> @returns_contain_ten_range_helper_vec()
1378+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], <i8 10, i8 10>
1379+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1380+
;
1381+
%i = call <2 x i8> @returns_contain_ten_range_helper_vec()
1382+
%cmp = icmp eq <2 x i8> %i, <i8 10, i8 10>
1383+
ret <2 x i1> %cmp
1384+
}
1385+
1386+
define <2 x i1> @icmp_eq_constant_range_call_vec() {
1387+
; CHECK-LABEL: @icmp_eq_constant_range_call_vec(
1388+
; CHECK-NEXT: [[I:%.*]] = call range(i8 0, 10) <2 x i8> @returns_i8_helper_vec()
1389+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], <i8 10, i8 10>
1390+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1391+
;
1392+
%i = call range(i8 0, 10) <2 x i8> @returns_i8_helper_vec()
1393+
%cmp = icmp eq <2 x i8> %i, <i8 10, i8 10>
1394+
ret <2 x i1> %cmp
1395+
}
1396+
1397+
define <2 x i1> @neg_icmp_eq_constant_range_call_vec() {
1398+
; CHECK-LABEL: @neg_icmp_eq_constant_range_call_vec(
1399+
; CHECK-NEXT: [[I:%.*]] = call range(i8 0, 11) <2 x i8> @returns_i8_helper_vec()
1400+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i8> [[I]], <i8 10, i8 10>
1401+
; CHECK-NEXT: ret <2 x i1> [[CMP]]
1402+
;
1403+
%i = call range(i8 0, 11) <2 x i8> @returns_i8_helper_vec()
1404+
%cmp = icmp eq <2 x i8> %i, <i8 10, i8 10>
1405+
ret <2 x i1> %cmp
1406+
}

0 commit comments

Comments
 (0)