blob: 97f331cb28e9673ae9570a4673e179db254ed249 [file] [log] [blame]
Chris Lattner8170e8f2002-05-06 05:35:20 +00001; This test makes sure that div instructions are properly eliminated.
2;
3
Reid Spencerd0e30dc2006-12-02 04:23:10 +00004; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep div
Reid Spencerede8c3b2007-04-15 07:38:21 +00005; END.
Chris Lattner8170e8f2002-05-06 05:35:20 +00006
7implementation
8
Chris Lattner2bf6c222003-02-18 19:16:45 +00009int %test1(int %A) {
Chris Lattner8170e8f2002-05-06 05:35:20 +000010 %B = div int %A, 1
11 ret int %B
Chris Lattner2bf6c222003-02-18 19:16:45 +000012}
Chris Lattnerc5fccf32003-02-18 19:28:47 +000013
14uint %test2(uint %A) {
15 %B = div uint %A, 8 ; => Shift
Chris Lattnere24003a2004-04-26 14:01:47 +000016 ret uint %B
Chris Lattnerc5fccf32003-02-18 19:28:47 +000017}
18
19int %test3(int %A) {
20 %B = div int 0, %A ; => 0, don't need to keep traps
21 ret int %B
22}
Chris Lattnere24003a2004-04-26 14:01:47 +000023
24int %test4(int %A) {
25 %B = div int %A, -1 ; 0-A
26 ret int %B
27}
Chris Lattnercbd7a982004-09-28 18:21:01 +000028
29uint %test5(uint %A) {
30 %B = div uint %A, 4294967280
31 %C = div uint %B, 4294967292
32 ret uint %C
33}
Chris Lattnerd9d85382004-09-29 17:37:07 +000034
35bool %test6(uint %A) {
36 %B = div uint %A, 123
37 %C = seteq uint %B, 0 ; A < 123
38 ret bool %C
39}
40
41bool %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
47bool %test8(ubyte %A) {
48 %B = div ubyte %A, 123
49 %C = seteq ubyte %B, 2 ; A >= 246
50 ret bool %C
51}
52
53bool %test9(ubyte %A) {
54 %B = div ubyte %A, 123
55 %C = setne ubyte %B, 2 ; A < 246
56 ret bool %C
57}
58
Chris Lattner9803a0a2004-12-12 21:40:22 +000059uint %test10(uint %X, bool %C) {
60 %V = select bool %C, uint 64, uint 8
Reid Spencer7e80b0b2006-10-26 06:15:43 +000061 %R = udiv uint %X, %V
Chris Lattner9803a0a2004-12-12 21:40:22 +000062 ret uint %R
63}
64
Reid Spencer7e80b0b2006-10-26 06:15:43 +000065int %test11(int %X, bool %C) {
66 %A = select bool %C, int 1024, int 32
67 %B = udiv int %X, %A
68 ret int %B
Chris Lattnerb624bb52006-02-05 07:52:47 +000069}