oops, forgot to commit this.
[oota-llvm.git] / test / Transforms / InstCombine / div.ll
1 ; This test makes sure that div instructions are properly eliminated.
2 ;
3
4 ; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep div
5 ; END.
6
7 implementation
8
9 int %test1(int %A) {
10         %B = div int %A, 1
11         ret int %B
12 }
13
14 uint %test2(uint %A) {
15         %B = div uint %A, 8   ; => Shift
16         ret uint %B
17 }
18
19 int %test3(int %A) {
20         %B = div int 0, %A    ; => 0, don't need to keep traps
21         ret int %B
22 }
23
24 int %test4(int %A) {
25         %B = div int %A, -1    ; 0-A
26         ret int %B
27 }
28
29 uint %test5(uint %A) {
30         %B = div uint %A, 4294967280
31         %C = div uint %B, 4294967292
32         ret uint %C
33 }
34
35 bool %test6(uint %A) {
36         %B = div uint %A, 123
37         %C = seteq uint %B, 0   ; A < 123
38         ret bool %C
39
40
41 bool %test7(uint %A) {
42         %B = div uint %A, 10
43         %C = seteq uint %B, 2    ; A >= 20 && A < 30
44         ret bool %C
45 }
46
47 bool %test8(ubyte %A) {
48         %B = div ubyte %A, 123
49         %C = seteq ubyte %B, 2   ; A >= 246
50         ret bool %C
51
52
53 bool %test9(ubyte %A) {
54         %B = div ubyte %A, 123
55         %C = setne ubyte %B, 2   ; A < 246
56         ret bool %C
57
58
59 uint %test10(uint %X, bool %C) {
60         %V = select bool %C, uint 64, uint 8
61         %R = udiv uint %X, %V
62         ret uint %R
63 }
64
65 int %test11(int %X, bool %C) {
66         %A = select bool %C, int 1024, int 32
67         %B = udiv int %X, %A
68         ret int %B
69 }