Skip to content

Commit ee3b606

Browse files
dtcxzywzahiraam
authored andcommitted
[InstCombine] Add pre-commit tests for PR65073. NFC.
1 parent 92e6c76 commit ee3b606

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed

llvm/test/Transforms/InstCombine/icmp-range.ll

Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1034,6 +1034,228 @@ define i1 @icmp_ne_bool_1(ptr %ptr) {
10341034
ret i1 %cmp
10351035
}
10361036

1037+
; Tests from PR65073
1038+
define i1 @icmp_ne_zext_eq_zero(i32 %a) {
1039+
; CHECK-LABEL: @icmp_ne_zext_eq_zero(
1040+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
1041+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1042+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1043+
; CHECK-NEXT: ret i1 [[CMP1]]
1044+
;
1045+
%cmp = icmp eq i32 %a, 0
1046+
%conv = zext i1 %cmp to i32
1047+
%cmp1 = icmp ne i32 %conv, %a
1048+
ret i1 %cmp1
1049+
}
1050+
1051+
define i1 @icmp_ne_zext_ne_zero(i32 %a) {
1052+
; CHECK-LABEL: @icmp_ne_zext_ne_zero(
1053+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 0
1054+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1055+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1056+
; CHECK-NEXT: ret i1 [[CMP1]]
1057+
;
1058+
%cmp = icmp ne i32 %a, 0
1059+
%conv = zext i1 %cmp to i32
1060+
%cmp1 = icmp ne i32 %conv, %a
1061+
ret i1 %cmp1
1062+
}
1063+
1064+
define i1 @icmp_eq_zext_eq_zero(i32 %a) {
1065+
; CHECK-LABEL: @icmp_eq_zext_eq_zero(
1066+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 0
1067+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1068+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1069+
; CHECK-NEXT: ret i1 [[CMP1]]
1070+
;
1071+
%cmp = icmp eq i32 %a, 0
1072+
%conv = zext i1 %cmp to i32
1073+
%cmp1 = icmp eq i32 %conv, %a
1074+
ret i1 %cmp1
1075+
}
1076+
1077+
define i1 @icmp_eq_zext_ne_zero(i32 %a) {
1078+
; CHECK-LABEL: @icmp_eq_zext_ne_zero(
1079+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 0
1080+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1081+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1082+
; CHECK-NEXT: ret i1 [[CMP1]]
1083+
;
1084+
%cmp = icmp ne i32 %a, 0
1085+
%conv = zext i1 %cmp to i32
1086+
%cmp1 = icmp eq i32 %conv, %a
1087+
ret i1 %cmp1
1088+
}
1089+
1090+
define i1 @icmp_ne_zext_eq_one(i32 %a) {
1091+
; CHECK-LABEL: @icmp_ne_zext_eq_one(
1092+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 1
1093+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1094+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1095+
; CHECK-NEXT: ret i1 [[CMP1]]
1096+
;
1097+
%cmp = icmp eq i32 %a, 1
1098+
%conv = zext i1 %cmp to i32
1099+
%cmp1 = icmp ne i32 %conv, %a
1100+
ret i1 %cmp1
1101+
}
1102+
1103+
define i1 @icmp_ne_zext_ne_one(i32 %a) {
1104+
; CHECK-LABEL: @icmp_ne_zext_ne_one(
1105+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 1
1106+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1107+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1108+
; CHECK-NEXT: ret i1 [[CMP1]]
1109+
;
1110+
%cmp = icmp ne i32 %a, 1
1111+
%conv = zext i1 %cmp to i32
1112+
%cmp1 = icmp ne i32 %conv, %a
1113+
ret i1 %cmp1
1114+
}
1115+
1116+
define i1 @icmp_eq_zext_eq_one(i32 %a) {
1117+
; CHECK-LABEL: @icmp_eq_zext_eq_one(
1118+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 1
1119+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1120+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1121+
; CHECK-NEXT: ret i1 [[CMP1]]
1122+
;
1123+
%cmp = icmp eq i32 %a, 1
1124+
%conv = zext i1 %cmp to i32
1125+
%cmp1 = icmp eq i32 %conv, %a
1126+
ret i1 %cmp1
1127+
}
1128+
1129+
define i1 @icmp_eq_zext_ne_one(i32 %a) {
1130+
; CHECK-LABEL: @icmp_eq_zext_ne_one(
1131+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 1
1132+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1133+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1134+
; CHECK-NEXT: ret i1 [[CMP1]]
1135+
;
1136+
%cmp = icmp ne i32 %a, 1
1137+
%conv = zext i1 %cmp to i32
1138+
%cmp1 = icmp eq i32 %conv, %a
1139+
ret i1 %cmp1
1140+
}
1141+
1142+
define i1 @icmp_ne_zext_eq_non_boolean(i32 %a) {
1143+
; CHECK-LABEL: @icmp_ne_zext_eq_non_boolean(
1144+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 2
1145+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1146+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1147+
; CHECK-NEXT: ret i1 [[CMP1]]
1148+
;
1149+
%cmp = icmp eq i32 %a, 2
1150+
%conv = zext i1 %cmp to i32
1151+
%cmp1 = icmp ne i32 %conv, %a
1152+
ret i1 %cmp1
1153+
}
1154+
1155+
define i1 @icmp_ne_zext_ne_non_boolean(i32 %a) {
1156+
; CHECK-LABEL: @icmp_ne_zext_ne_non_boolean(
1157+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 2
1158+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1159+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne i32 [[CONV]], [[A]]
1160+
; CHECK-NEXT: ret i1 [[CMP1]]
1161+
;
1162+
%cmp = icmp ne i32 %a, 2
1163+
%conv = zext i1 %cmp to i32
1164+
%cmp1 = icmp ne i32 %conv, %a
1165+
ret i1 %cmp1
1166+
}
1167+
1168+
define i1 @icmp_eq_zext_eq_non_boolean(i32 %a) {
1169+
; CHECK-LABEL: @icmp_eq_zext_eq_non_boolean(
1170+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[A:%.*]], 2
1171+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1172+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1173+
; CHECK-NEXT: ret i1 [[CMP1]]
1174+
;
1175+
%cmp = icmp eq i32 %a, 2
1176+
%conv = zext i1 %cmp to i32
1177+
%cmp1 = icmp eq i32 %conv, %a
1178+
ret i1 %cmp1
1179+
}
1180+
1181+
define i1 @icmp_eq_zext_ne_non_boolean(i32 %a) {
1182+
; CHECK-LABEL: @icmp_eq_zext_ne_non_boolean(
1183+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne i32 [[A:%.*]], 2
1184+
; CHECK-NEXT: [[CONV:%.*]] = zext i1 [[CMP]] to i32
1185+
; CHECK-NEXT: [[CMP1:%.*]] = icmp eq i32 [[CONV]], [[A]]
1186+
; CHECK-NEXT: ret i1 [[CMP1]]
1187+
;
1188+
%cmp = icmp ne i32 %a, 2
1189+
%conv = zext i1 %cmp to i32
1190+
%cmp1 = icmp eq i32 %conv, %a
1191+
ret i1 %cmp1
1192+
}
1193+
1194+
define <2 x i1> @icmp_ne_zext_eq_zero_vec(<2 x i32> %a) {
1195+
; CHECK-LABEL: @icmp_ne_zext_eq_zero_vec(
1196+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], zeroinitializer
1197+
; CHECK-NEXT: [[CONV:%.*]] = zext <2 x i1> [[CMP]] to <2 x i32>
1198+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1199+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1200+
;
1201+
%cmp = icmp eq <2 x i32> %a, <i32 0, i32 0>
1202+
%conv = zext <2 x i1> %cmp to <2 x i32>
1203+
%cmp1 = icmp ne <2 x i32> %conv, %a
1204+
ret <2 x i1> %cmp1
1205+
}
1206+
1207+
define <2 x i1> @icmp_ne_zext_ne_zero_vec(<2 x i32> %a) {
1208+
; CHECK-LABEL: @icmp_ne_zext_ne_zero_vec(
1209+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[A:%.*]], zeroinitializer
1210+
; CHECK-NEXT: [[CONV:%.*]] = zext <2 x i1> [[CMP]] to <2 x i32>
1211+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1212+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1213+
;
1214+
%cmp = icmp ne <2 x i32> %a, <i32 0, i32 0>
1215+
%conv = zext <2 x i1> %cmp to <2 x i32>
1216+
%cmp1 = icmp ne <2 x i32> %conv, %a
1217+
ret <2 x i1> %cmp1
1218+
}
1219+
1220+
define <2 x i1> @icmp_ne_zext_eq_one_vec(<2 x i32> %a) {
1221+
; CHECK-LABEL: @icmp_ne_zext_eq_one_vec(
1222+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 1, i32 1>
1223+
; CHECK-NEXT: [[CONV:%.*]] = zext <2 x i1> [[CMP]] to <2 x i32>
1224+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1225+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1226+
;
1227+
%cmp = icmp eq <2 x i32> %a, <i32 1, i32 1>
1228+
%conv = zext <2 x i1> %cmp to <2 x i32>
1229+
%cmp1 = icmp ne <2 x i32> %conv, %a
1230+
ret <2 x i1> %cmp1
1231+
}
1232+
1233+
define <2 x i1> @icmp_ne_zext_ne_one_vec(<2 x i32> %a) {
1234+
; CHECK-LABEL: @icmp_ne_zext_ne_one_vec(
1235+
; CHECK-NEXT: [[CMP:%.*]] = icmp ne <2 x i32> [[A:%.*]], <i32 1, i32 1>
1236+
; CHECK-NEXT: [[CONV:%.*]] = zext <2 x i1> [[CMP]] to <2 x i32>
1237+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1238+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1239+
;
1240+
%cmp = icmp ne <2 x i32> %a, <i32 1, i32 1>
1241+
%conv = zext <2 x i1> %cmp to <2 x i32>
1242+
%cmp1 = icmp ne <2 x i32> %conv, %a
1243+
ret <2 x i1> %cmp1
1244+
}
1245+
1246+
define <2 x i1> @icmp_ne_zext_eq_non_boolean_vec(<2 x i32> %a) {
1247+
; CHECK-LABEL: @icmp_ne_zext_eq_non_boolean_vec(
1248+
; CHECK-NEXT: [[CMP:%.*]] = icmp eq <2 x i32> [[A:%.*]], <i32 2, i32 2>
1249+
; CHECK-NEXT: [[CONV:%.*]] = zext <2 x i1> [[CMP]] to <2 x i32>
1250+
; CHECK-NEXT: [[CMP1:%.*]] = icmp ne <2 x i32> [[CONV]], [[A]]
1251+
; CHECK-NEXT: ret <2 x i1> [[CMP1]]
1252+
;
1253+
%cmp = icmp eq <2 x i32> %a, <i32 2, i32 2>
1254+
%conv = zext <2 x i1> %cmp to <2 x i32>
1255+
%cmp1 = icmp ne <2 x i32> %conv, %a
1256+
ret <2 x i1> %cmp1
1257+
}
1258+
10371259
!0 = !{i32 1, i32 6}
10381260
!1 = !{i32 0, i32 6}
10391261
!2 = !{i8 0, i8 1}

0 commit comments

Comments
 (0)