@@ -382,3 +382,99 @@ define i1 @icmp_ult_sremsmax_smax(i32 %x) {
382382 %c = icmp ult i32 %r , 2147483647
383383 ret i1 %c
384384}
385+
386+ define i1 @icmp_slt_srem_pos_range (i32 %x , i32 range(i32 999 , -2147483648 ) %y ) {
387+ ; CHECK-LABEL: define i1 @icmp_slt_srem_pos_range(
388+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
389+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
390+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], [[Y]]
391+ ; CHECK-NEXT: ret i1 [[C]]
392+ ;
393+ %r = srem i32 %x , 1000
394+ %c = icmp slt i32 %r , %y
395+ ret i1 %c
396+ }
397+
398+ define i1 @icmp_sle_srem_pos_range (i32 %x , i32 range(i32 999 , -2147483648 ) %y ) {
399+ ; CHECK-LABEL: define i1 @icmp_sle_srem_pos_range(
400+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
401+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
402+ ; CHECK-NEXT: [[C:%.*]] = icmp sle i32 [[R]], [[Y]]
403+ ; CHECK-NEXT: ret i1 [[C]]
404+ ;
405+ %r = srem i32 %x , 1000
406+ %c = icmp sle i32 %r , %y
407+ ret i1 %c
408+ }
409+
410+ define i1 @icmp_sgt_srem_pos_range (i32 %x , i32 range(i32 999 , -2147483648 ) %y ) {
411+ ; CHECK-LABEL: define i1 @icmp_sgt_srem_pos_range(
412+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
413+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
414+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], [[Y]]
415+ ; CHECK-NEXT: ret i1 [[C]]
416+ ;
417+ %r = srem i32 %x , 1000
418+ %c = icmp sgt i32 %r , %y
419+ ret i1 %c
420+ }
421+
422+ define i1 @icmp_sge_srem_pos_range (i32 %x , i32 range(i32 999 , -2147483648 ) %y ) {
423+ ; CHECK-LABEL: define i1 @icmp_sge_srem_pos_range(
424+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 999, -2147483648) [[Y:%.*]]) {
425+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
426+ ; CHECK-NEXT: [[C:%.*]] = icmp sge i32 [[R]], [[Y]]
427+ ; CHECK-NEXT: ret i1 [[C]]
428+ ;
429+ %r = srem i32 %x , 1000
430+ %c = icmp sge i32 %r , %y
431+ ret i1 %c
432+ }
433+
434+ define i1 @icmp_slt_srem_neg_range (i32 %x , i32 range(i32 -2147483648 , -999 ) %y ) {
435+ ; CHECK-LABEL: define i1 @icmp_slt_srem_neg_range(
436+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
437+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
438+ ; CHECK-NEXT: [[C:%.*]] = icmp slt i32 [[R]], [[Y]]
439+ ; CHECK-NEXT: ret i1 [[C]]
440+ ;
441+ %r = srem i32 %x , 1000
442+ %c = icmp slt i32 %r , %y
443+ ret i1 %c
444+ }
445+
446+ define i1 @icmp_sle_srem_neg_range (i32 %x , i32 range(i32 -2147483648 , -999 ) %y ) {
447+ ; CHECK-LABEL: define i1 @icmp_sle_srem_neg_range(
448+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
449+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
450+ ; CHECK-NEXT: [[C:%.*]] = icmp sle i32 [[R]], [[Y]]
451+ ; CHECK-NEXT: ret i1 [[C]]
452+ ;
453+ %r = srem i32 %x , 1000
454+ %c = icmp sle i32 %r , %y
455+ ret i1 %c
456+ }
457+
458+ define i1 @icmp_sgt_srem_neg_range (i32 %x , i32 range(i32 -2147483648 , -999 ) %y ) {
459+ ; CHECK-LABEL: define i1 @icmp_sgt_srem_neg_range(
460+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
461+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
462+ ; CHECK-NEXT: [[C:%.*]] = icmp sgt i32 [[R]], [[Y]]
463+ ; CHECK-NEXT: ret i1 [[C]]
464+ ;
465+ %r = srem i32 %x , 1000
466+ %c = icmp sgt i32 %r , %y
467+ ret i1 %c
468+ }
469+
470+ define i1 @icmp_sge_srem_neg_range (i32 %x , i32 range(i32 -2147483648 , -999 ) %y ) {
471+ ; CHECK-LABEL: define i1 @icmp_sge_srem_neg_range(
472+ ; CHECK-SAME: i32 [[X:%.*]], i32 range(i32 -2147483648, -999) [[Y:%.*]]) {
473+ ; CHECK-NEXT: [[R:%.*]] = srem i32 [[X]], 1000
474+ ; CHECK-NEXT: [[C:%.*]] = icmp sge i32 [[R]], [[Y]]
475+ ; CHECK-NEXT: ret i1 [[C]]
476+ ;
477+ %r = srem i32 %x , 1000
478+ %c = icmp sge i32 %r , %y
479+ ret i1 %c
480+ }
0 commit comments