Skip to content

Commit 0861fbe

Browse files
committed
[CVP] Add tests for icmp of trunc implication (NFC)
1 parent f4615fe commit 0861fbe

File tree

1 file changed

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

1 file changed

+106
-0
lines changed

llvm/test/Transforms/CorrelatedValuePropagation/basic.ll

Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1125,6 +1125,112 @@ entry:
11251125
ret i1 %cmp
11261126
}
11271127

1128+
define void @trunc_icmp_ule(i32 %x, i1* %p) {
1129+
; CHECK-LABEL: @trunc_icmp_ule(
1130+
; CHECK-NEXT: [[T:%.*]] = trunc i32 [[X:%.*]] to i8
1131+
; CHECK-NEXT: [[C:%.*]] = icmp uge i8 [[T]], 5
1132+
; CHECK-NEXT: br i1 [[C]], label [[TRUE:%.*]], label [[FALSE:%.*]]
1133+
; CHECK: true:
1134+
; CHECK-NEXT: [[C1:%.*]] = icmp uge i32 [[X]], 5
1135+
; CHECK-NEXT: store i1 [[C1]], i1* [[P:%.*]], align 1
1136+
; CHECK-NEXT: [[C2:%.*]] = icmp ugt i32 [[X]], 5
1137+
; CHECK-NEXT: store i1 [[C2]], i1* [[P]], align 1
1138+
; CHECK-NEXT: [[C3:%.*]] = icmp ule i32 [[X]], 5
1139+
; CHECK-NEXT: store i1 [[C3]], i1* [[P]], align 1
1140+
; CHECK-NEXT: [[C4:%.*]] = icmp ult i32 [[X]], 5
1141+
; CHECK-NEXT: store i1 [[C4]], i1* [[P]], align 1
1142+
; CHECK-NEXT: ret void
1143+
; CHECK: false:
1144+
; CHECK-NEXT: [[C1_2:%.*]] = icmp uge i32 [[X]], 5
1145+
; CHECK-NEXT: store i1 [[C1_2]], i1* [[P]], align 1
1146+
; CHECK-NEXT: [[C2_2:%.*]] = icmp ugt i32 [[X]], 5
1147+
; CHECK-NEXT: store i1 [[C2_2]], i1* [[P]], align 1
1148+
; CHECK-NEXT: [[C3_2:%.*]] = icmp ule i32 [[X]], 5
1149+
; CHECK-NEXT: store i1 [[C3_2]], i1* [[P]], align 1
1150+
; CHECK-NEXT: [[C4_2:%.*]] = icmp ult i32 [[X]], 5
1151+
; CHECK-NEXT: store i1 [[C4_2]], i1* [[P]], align 1
1152+
; CHECK-NEXT: ret void
1153+
;
1154+
%t = trunc i32 %x to i8
1155+
%c = icmp uge i8 %t, 5
1156+
br i1 %c, label %true, label %false
1157+
1158+
true:
1159+
%c1 = icmp uge i32 %x, 5
1160+
store i1 %c1, i1* %p
1161+
%c2 = icmp ugt i32 %x, 5
1162+
store i1 %c2, i1* %p
1163+
%c3 = icmp ule i32 %x, 5
1164+
store i1 %c3, i1* %p
1165+
%c4 = icmp ult i32 %x, 5
1166+
store i1 %c4, i1* %p
1167+
ret void
1168+
1169+
false:
1170+
%c1.2 = icmp uge i32 %x, 5
1171+
store i1 %c1.2, i1* %p
1172+
%c2.2 = icmp ugt i32 %x, 5
1173+
store i1 %c2.2, i1* %p
1174+
%c3.2 = icmp ule i32 %x, 5
1175+
store i1 %c3.2, i1* %p
1176+
%c4.2 = icmp ult i32 %x, 5
1177+
store i1 %c4.2, i1* %p
1178+
ret void
1179+
}
1180+
1181+
define void @trunc_icmp_eq(i32 %x, i1* %p) {
1182+
; CHECK-LABEL: @trunc_icmp_eq(
1183+
; CHECK-NEXT: [[T:%.*]] = trunc i32 [[X:%.*]] to i8
1184+
; CHECK-NEXT: [[C:%.*]] = icmp eq i8 [[T]], 5
1185+
; CHECK-NEXT: br i1 [[C]], label [[TRUE:%.*]], label [[FALSE:%.*]]
1186+
; CHECK: true:
1187+
; CHECK-NEXT: [[C1:%.*]] = icmp uge i32 [[X]], 5
1188+
; CHECK-NEXT: store i1 [[C1]], i1* [[P:%.*]], align 1
1189+
; CHECK-NEXT: [[C2:%.*]] = icmp ugt i32 [[X]], 5
1190+
; CHECK-NEXT: store i1 [[C2]], i1* [[P]], align 1
1191+
; CHECK-NEXT: [[C3:%.*]] = icmp ule i32 [[X]], 5
1192+
; CHECK-NEXT: store i1 [[C3]], i1* [[P]], align 1
1193+
; CHECK-NEXT: [[C4:%.*]] = icmp ult i32 [[X]], 5
1194+
; CHECK-NEXT: store i1 [[C4]], i1* [[P]], align 1
1195+
; CHECK-NEXT: ret void
1196+
; CHECK: false:
1197+
; CHECK-NEXT: [[C1_2:%.*]] = icmp uge i32 [[X]], 5
1198+
; CHECK-NEXT: store i1 [[C1_2]], i1* [[P]], align 1
1199+
; CHECK-NEXT: [[C2_2:%.*]] = icmp ugt i32 [[X]], 5
1200+
; CHECK-NEXT: store i1 [[C2_2]], i1* [[P]], align 1
1201+
; CHECK-NEXT: [[C3_2:%.*]] = icmp ule i32 [[X]], 5
1202+
; CHECK-NEXT: store i1 [[C3_2]], i1* [[P]], align 1
1203+
; CHECK-NEXT: [[C4_2:%.*]] = icmp ult i32 [[X]], 5
1204+
; CHECK-NEXT: store i1 [[C4_2]], i1* [[P]], align 1
1205+
; CHECK-NEXT: ret void
1206+
;
1207+
%t = trunc i32 %x to i8
1208+
%c = icmp eq i8 %t, 5
1209+
br i1 %c, label %true, label %false
1210+
1211+
true:
1212+
%c1 = icmp uge i32 %x, 5
1213+
store i1 %c1, i1* %p
1214+
%c2 = icmp ugt i32 %x, 5
1215+
store i1 %c2, i1* %p
1216+
%c3 = icmp ule i32 %x, 5
1217+
store i1 %c3, i1* %p
1218+
%c4 = icmp ult i32 %x, 5
1219+
store i1 %c4, i1* %p
1220+
ret void
1221+
1222+
false:
1223+
%c1.2 = icmp uge i32 %x, 5
1224+
store i1 %c1.2, i1* %p
1225+
%c2.2 = icmp ugt i32 %x, 5
1226+
store i1 %c2.2, i1* %p
1227+
%c3.2 = icmp ule i32 %x, 5
1228+
store i1 %c3.2, i1* %p
1229+
%c4.2 = icmp ult i32 %x, 5
1230+
store i1 %c4.2, i1* %p
1231+
ret void
1232+
}
1233+
11281234
; TODO: missed optimization
11291235
; Make sure we exercise non-integer inputs to unary operators (i.e. crash check).
11301236
define i1 @bitcast_unknown(float %a) {

0 commit comments

Comments
 (0)