[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / Transforms / CorrelatedValuePropagation / urem.ll
blobb01e9c5723e6de975513de5d4773d79344f46292
1 ; RUN: opt < %s -correlated-propagation -S | FileCheck %s
3 ; CHECK-LABEL: @test_nop
4 define void @test_nop(i32 %n) {
5 ; CHECK udiv i32 %n, 100
6   %div = udiv i32 %n, 100
7   ret void
10 ; CHECK-LABEL: @test1(
11 define void @test1(i32 %n) {
12 entry:
13   %cmp = icmp ule i32 %n, 65535
14   br i1 %cmp, label %bb, label %exit
16 bb:
17 ; CHECK: urem i16
18   %div = urem i32 %n, 100
19   br label %exit
21 exit:
22   ret void
25 ; CHECK-LABEL: @test2(
26 define void @test2(i32 %n) {
27 entry:
28   %cmp = icmp ule i32 %n, 65536
29   br i1 %cmp, label %bb, label %exit
31 bb:
32 ; CHECK: urem i32 %n, 100
33   %div = urem i32 %n, 100
34   br label %exit
36 exit:
37   ret void
40 ; CHECK-LABEL: @test3(
41 define void @test3(i32 %m, i32 %n) {
42 entry:
43   %cmp1 = icmp ult i32 %m, 65535
44   %cmp2 = icmp ult i32 %n, 65535
45   %cmp = and i1 %cmp1, %cmp2
46   br i1 %cmp, label %bb, label %exit
48 bb:
49 ; CHECK: urem i16
50   %div = urem i32 %m, %n
51   br label %exit
53 exit:
54   ret void
57 ; CHECK-LABEL: @test4(
58 define void @test4(i32 %m, i32 %n) {
59 entry:
60   %cmp1 = icmp ult i32 %m, 65535
61   %cmp2 = icmp ule i32 %n, 65536
62   %cmp = and i1 %cmp1, %cmp2
63   br i1 %cmp, label %bb, label %exit
65 bb:
66 ; CHECK: urem i32 %m, %n
67   %div = urem i32 %m, %n
68   br label %exit
70 exit:
71   ret void
74 ; CHECK-LABEL: @test5
75 define void @test5(i32 %n) {
76   %trunc = and i32 %n, 63
77   ; CHECK: urem i8
78   %div = urem i32 %trunc, 42
79   ret void
82 ; CHECK-LABEL: @test6
83 define void @test6(i32 %n) {
84 entry:
85   %cmp = icmp ule i32 %n, 255
86   br i1 %cmp, label %bb, label %exit
88 bb:
89 ; CHECK: urem i8
90   %div = srem i32 %n, 100
91   br label %exit
93 exit:
94   ret void
97 ; CHECK-LABEL: @non_power_of_2
98 define void @non_power_of_2(i24 %n) {
99   %div = urem i24 %n, 42
100   ret void