@@ -880,6 +880,18 @@ func.func @no_speculate_divui(
880880 return
881881}
882882
883+ func.func @no_speculate_udiv (
884+ // CHECK-LABEL: @no_speculate_udiv(
885+ %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
886+ scf.for %i = %lb to %ub step %step {
887+ // CHECK: scf.for
888+ // CHECK: llvm.udiv
889+ %val = llvm.udiv %num , %denom : i32
890+ }
891+
892+ return
893+ }
894+
883895func.func @no_speculate_divsi (
884896// CHECK-LABEL: @no_speculate_divsi(
885897 %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
@@ -892,6 +904,18 @@ func.func @no_speculate_divsi(
892904 return
893905}
894906
907+ func.func @no_speculate_sdiv (
908+ // CHECK-LABEL: @no_speculate_sdiv(
909+ %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
910+ scf.for %i = %lb to %ub step %step {
911+ // CHECK: scf.for
912+ // CHECK: llvm.sdiv
913+ %val = llvm.sdiv %num , %denom : i32
914+ }
915+
916+ return
917+ }
918+
895919func.func @no_speculate_ceildivui (
896920// CHECK-LABEL: @no_speculate_ceildivui(
897921 %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
@@ -928,6 +952,18 @@ func.func @no_speculate_divui_const(%num: i32, %lb: index, %ub: index, %step: in
928952 return
929953}
930954
955+ func.func @no_speculate_udiv_const (%num: i32 , %lb: index , %ub: index , %step: index ) {
956+ // CHECK-LABEL: @no_speculate_udiv_const(
957+ %c0 = arith.constant 0 : i32
958+ scf.for %i = %lb to %ub step %step {
959+ // CHECK: scf.for
960+ // CHECK: llvm.udiv
961+ %val = llvm.udiv %num , %c0 : i32
962+ }
963+
964+ return
965+ }
966+
931967func.func @speculate_divui_const (
932968// CHECK-LABEL: @speculate_divui_const(
933969 %num: i32 , %lb: index , %ub: index , %step: index ) {
@@ -941,6 +977,19 @@ func.func @speculate_divui_const(
941977 return
942978}
943979
980+ func.func @speculate_udiv_const (
981+ // CHECK-LABEL: @speculate_udiv_const(
982+ %num: i32 , %lb: index , %ub: index , %step: index ) {
983+ %c5 = llvm.mlir.constant (5 : i32 ) : i32
984+ // CHECK: llvm.udiv
985+ // CHECK: scf.for
986+ scf.for %i = %lb to %ub step %step {
987+ %val = llvm.udiv %num , %c5 : i32
988+ }
989+
990+ return
991+ }
992+
944993func.func @no_speculate_ceildivui_const (%num: i32 , %lb: index , %ub: index , %step: index ) {
945994// CHECK-LABEL: @no_speculate_ceildivui_const(
946995 %c0 = arith.constant 0 : i32
@@ -979,6 +1028,19 @@ func.func @no_speculate_divsi_const0(
9791028 return
9801029}
9811030
1031+ func.func @no_speculate_sdiv_const0 (
1032+ // CHECK-LABEL: @no_speculate_sdiv_const0(
1033+ %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
1034+ %c0 = arith.constant 0 : i32
1035+ scf.for %i = %lb to %ub step %step {
1036+ // CHECK: scf.for
1037+ // CHECK: llvm.sdiv
1038+ %val = llvm.sdiv %num , %c0 : i32
1039+ }
1040+
1041+ return
1042+ }
1043+
9821044func.func @no_speculate_divsi_const_minus1 (
9831045// CHECK-LABEL: @no_speculate_divsi_const_minus1(
9841046 %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
@@ -992,6 +1054,19 @@ func.func @no_speculate_divsi_const_minus1(
9921054 return
9931055}
9941056
1057+ func.func @no_speculate_sdiv_const_minus1 (
1058+ // CHECK-LABEL: @no_speculate_sdiv_const_minus1(
1059+ %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
1060+ %cm1 = arith.constant -1 : i32
1061+ scf.for %i = %lb to %ub step %step {
1062+ // CHECK: scf.for
1063+ // CHECK: llvm.sdiv
1064+ %val = llvm.sdiv %num , %cm1 : i32
1065+ }
1066+
1067+ return
1068+ }
1069+
9951070func.func @speculate_divsi_const (
9961071// CHECK-LABEL: @speculate_divsi_const(
9971072 %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
@@ -1005,6 +1080,19 @@ func.func @speculate_divsi_const(
10051080 return
10061081}
10071082
1083+ func.func @speculate_sdiv_const (
1084+ // CHECK-LABEL: @speculate_sdiv_const(
1085+ %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
1086+ %c5 = arith.constant 5 : i32
1087+ scf.for %i = %lb to %ub step %step {
1088+ // CHECK: llvm.sdiv
1089+ // CHECK: scf.for
1090+ %val = llvm.sdiv %num , %c5 : i32
1091+ }
1092+
1093+ return
1094+ }
1095+
10081096func.func @no_speculate_ceildivsi_const0 (
10091097// CHECK-LABEL: @no_speculate_ceildivsi_const0(
10101098 %num: i32 , %denom: i32 , %lb: index , %ub: index , %step: index ) {
@@ -1057,6 +1145,19 @@ func.func @no_speculate_divui_range(
10571145 return
10581146}
10591147
1148+ func.func @no_speculate_udiv_range (
1149+ // CHECK-LABEL: @no_speculate_udiv_range(
1150+ %num: i8 , %lb: index , %ub: index , %step: index ) {
1151+ %denom = test.with_bounds {smax = 127 : i8 , smin = -128 : i8 , umax = 255 : i8 , umin = 0 : i8 } : i8
1152+ scf.for %i = %lb to %ub step %step {
1153+ // CHECK: scf.for
1154+ // CHECK: llvm.udiv
1155+ %val = llvm.udiv %num , %denom : i8
1156+ }
1157+
1158+ return
1159+ }
1160+
10601161func.func @no_speculate_divsi_range (
10611162// CHECK-LABEL: @no_speculate_divsi_range(
10621163 %num: i8 , %lb: index , %ub: index , %step: index ) {
@@ -1072,6 +1173,21 @@ func.func @no_speculate_divsi_range(
10721173 return
10731174}
10741175
1176+ func.func @no_speculate_sdiv_range (
1177+ // CHECK-LABEL: @no_speculate_sdiv_range(
1178+ %num: i8 , %lb: index , %ub: index , %step: index ) {
1179+ %denom0 = test.with_bounds {smax = -1 : i8 , smin = -128 : i8 , umax = 255 : i8 , umin = 0 : i8 } : i8
1180+ %denom1 = test.with_bounds {smax = 127 : i8 , smin = 0 : i8 , umax = 255 : i8 , umin = 0 : i8 } : i8
1181+ scf.for %i = %lb to %ub step %step {
1182+ // CHECK: scf.for
1183+ // CHECK-COUNT-2: llvm.sdiv
1184+ %val0 = llvm.sdiv %num , %denom0 : i8
1185+ %val1 = llvm.sdiv %num , %denom1 : i8
1186+ }
1187+
1188+ return
1189+ }
1190+
10751191func.func @no_speculate_ceildivui_range (
10761192// CHECK-LABEL: @no_speculate_ceildivui_range(
10771193 %num: i8 , %lb: index , %ub: index , %step: index ) {
@@ -1113,6 +1229,19 @@ func.func @speculate_divui_range(
11131229 return
11141230}
11151231
1232+ func.func @speculate_udiv_range (
1233+ // CHECK-LABEL: @speculate_udiv_range(
1234+ %num: i8 , %lb: index , %ub: index , %step: index ) {
1235+ %denom = test.with_bounds {smax = 127 : i8 , smin = -128 : i8 , umax = 255 : i8 , umin = 1 : i8 } : i8
1236+ scf.for %i = %lb to %ub step %step {
1237+ // CHECK: llvm.udiv
1238+ // CHECK: scf.for
1239+ %val = llvm.udiv %num , %denom : i8
1240+ }
1241+
1242+ return
1243+ }
1244+
11161245func.func @speculate_divsi_range (
11171246// CHECK-LABEL: @speculate_divsi_range(
11181247 %num: i8 , %lb: index , %ub: index , %step: index ) {
@@ -1129,6 +1258,22 @@ func.func @speculate_divsi_range(
11291258 return
11301259}
11311260
1261+ func.func @speculate_sdiv_range (
1262+ // CHECK-LABEL: @speculate_sdiv_range(
1263+ %num: i8 , %lb: index , %ub: index , %step: index ) {
1264+ %denom0 = test.with_bounds {smax = 127 : i8 , smin = 1 : i8 , umax = 255 : i8 , umin = 0 : i8 } : i8
1265+ %denom1 = test.with_bounds {smax = -2 : i8 , smin = -128 : i8 , umax = 255 : i8 , umin = 0 : i8 } : i8
1266+ scf.for %i = %lb to %ub step %step {
1267+ // CHECK-COUNT-2: llvm.sdiv
1268+ // CHECK: scf.for
1269+ %val0 = llvm.sdiv %num , %denom0 : i8
1270+ %val1 = llvm.sdiv %num , %denom1 : i8
1271+
1272+ }
1273+
1274+ return
1275+ }
1276+
11321277func.func @speculate_ceildivui_range (
11331278// CHECK-LABEL: @speculate_ceildivui_range(
11341279 %num: i8 , %lb: index , %ub: index , %step: index ) {
0 commit comments