Home | History | Annotate | Download | only in InstCombine
      1 ; RUN: opt -instcombine -S < %s | FileCheck %s
      2 
      3 ; CHECK-LABEL: @test1
      4 ; CHECK: %cmp1 = icmp ugt i32 %d, %n
      5 define i1 @test1(i32 %n, i32 %d) {
      6   %div = udiv i32 %n, %d
      7   %cmp1 = icmp eq i32 %div, 0
      8   ret i1 %cmp1
      9 }
     10 
     11 ; CHECK-LABEL: @test2
     12 ; CHECK: %cmp1 = icmp ugt i32 %d, 64
     13 define i1 @test2(i32 %d) {
     14   %div = udiv i32 64, %d
     15   %cmp1 = icmp eq i32 %div, 0
     16   ret i1 %cmp1
     17 }
     18 
     19 ; CHECK-LABEL: @test3
     20 ; CHECK: %cmp1 = icmp ule i32 %d, %n
     21 define i1 @test3(i32 %n, i32 %d) {
     22   %div = udiv i32 %n, %d
     23   %cmp1 = icmp ne i32 %div, 0
     24   ret i1 %cmp1
     25 }
     26 
     27 ; CHECK-LABEL: @test4
     28 ; CHECK: %cmp1 = icmp ult i32 %d, 65
     29 define i1 @test4(i32 %d) {
     30   %div = udiv i32 64, %d
     31   %cmp1 = icmp ne i32 %div, 0
     32   ret i1 %cmp1
     33 }
     34 
     35 ; CHECK-LABEL: @test5
     36 ; CHECK: ret i1 true
     37 define i1 @test5(i32 %d) {
     38   %div = udiv i32 -1, %d
     39   %cmp1 = icmp ne i32 %div, 0
     40   ret i1 %cmp1
     41 }
     42 
     43 ; CHECK-LABEL: @test6
     44 ; CHECK: %cmp1 = icmp ult i32 %d, 6
     45 define i1 @test6(i32 %d) {
     46   %div = udiv i32 5, %d
     47   %cmp1 = icmp ugt i32 %div, 0
     48   ret i1 %cmp1
     49 }
     50 
     51 ; (icmp ugt (udiv C1, X), C1) -> false.
     52 ; CHECK-LABEL: @test7
     53 ; CHECK: ret i1 false
     54 define i1 @test7(i32 %d) {
     55   %div = udiv i32 8, %d
     56   %cmp1 = icmp ugt i32 %div, 8
     57   ret i1 %cmp1
     58 }
     59 
     60 ; CHECK-LABEL: @test8
     61 ; CHECK: %cmp1 = icmp ult i32 %d, 2
     62 define i1 @test8(i32 %d) {
     63   %div = udiv i32 4, %d
     64   %cmp1 = icmp ugt i32 %div, 3
     65   ret i1 %cmp1
     66 }
     67 
     68 ; CHECK-LABEL: @test9
     69 ; CHECK: %cmp1 = icmp ult i32 %d, 2
     70 define i1 @test9(i32 %d) {
     71   %div = udiv i32 4, %d
     72   %cmp1 = icmp ugt i32 %div, 2
     73   ret i1 %cmp1
     74 }
     75 
     76 ; CHECK-LABEL: @test10
     77 ; CHECK: %cmp1 = icmp ult i32 %d, 3
     78 define i1 @test10(i32 %d) {
     79   %div = udiv i32 4, %d
     80   %cmp1 = icmp ugt i32 %div, 1
     81   ret i1 %cmp1
     82 }
     83 
     84 ; CHECK-LABEL: @test11
     85 ; CHECK: %cmp1 = icmp ugt i32 %d, 4
     86 define i1 @test11(i32 %d) {
     87   %div = udiv i32 4, %d
     88   %cmp1 = icmp ult i32 %div, 1
     89   ret i1 %cmp1
     90 }
     91 
     92 ; CHECK-LABEL: @test12
     93 ; CHECK: %cmp1 = icmp ugt i32 %d, 2
     94 define i1 @test12(i32 %d) {
     95   %div = udiv i32 4, %d
     96   %cmp1 = icmp ult i32 %div, 2
     97   ret i1 %cmp1
     98 }
     99 
    100 ; CHECK-LABEL: @test13
    101 ; CHECK: %cmp1 = icmp ugt i32 %d, 1
    102 define i1 @test13(i32 %d) {
    103   %div = udiv i32 4, %d
    104   %cmp1 = icmp ult i32 %div, 3
    105   ret i1 %cmp1
    106 }
    107 
    108 ; CHECK-LABEL: @test14
    109 ; CHECK: %cmp1 = icmp ugt i32 %d, 1
    110 define i1 @test14(i32 %d) {
    111   %div = udiv i32 4, %d
    112   %cmp1 = icmp ult i32 %div, 4
    113   ret i1 %cmp1
    114 }
    115 
    116 ; icmp ugt X, UINT_MAX -> false.
    117 ; CHECK-LABEL: @test15
    118 ; CHECK: ret i1 false
    119 define i1 @test15(i32 %d) {
    120   %div = udiv i32 4, %d
    121   %cmp1 = icmp ugt i32 %div, -1
    122   ret i1 %cmp1
    123 }
    124 
    125 ; icmp ult X, UINT_MAX -> true.
    126 ; CHECK-LABEL: @test16
    127 ; CHECK: ret i1 true
    128 define i1 @test16(i32 %d) {
    129   %div = udiv i32 4, %d
    130   %cmp1 = icmp ult i32 %div, -1
    131   ret i1 %cmp1
    132 }
    133