blob: b21d39b7a539e6014bfaebd9d4ee5a6190eec1f5 [file] [log] [blame]
Chris Lattner8170e8f2002-05-06 05:35:20 +00001; This test makes sure that div instructions are properly eliminated.
2;
3
Tanya Lattnerbaa370b2008-03-18 03:45:45 +00004; RUN: llvm-as < %s | opt -instcombine | llvm-dis | not grep div
Reid Spencerede8c3b2007-04-15 07:38:21 +00005; END.
Chris Lattner8170e8f2002-05-06 05:35:20 +00006
Tanya Lattnerbaa370b2008-03-18 03:45:45 +00007define i32 @test1(i32 %A) {
8 %B = sdiv i32 %A, 1 ; <i32> [#uses=1]
9 ret i32 %B
Chris Lattner2bf6c222003-02-18 19:16:45 +000010}
Chris Lattnerc5fccf32003-02-18 19:28:47 +000011
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000012define i32 @test2(i32 %A) {
13 ; => Shift
14 %B = udiv i32 %A, 8 ; <i32> [#uses=1]
15 ret i32 %B
Chris Lattnerc5fccf32003-02-18 19:28:47 +000016}
17
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000018define i32 @test3(i32 %A) {
19 ; => 0, don't need to keep traps
20 %B = sdiv i32 0, %A ; <i32> [#uses=1]
21 ret i32 %B
Chris Lattnerc5fccf32003-02-18 19:28:47 +000022}
Chris Lattnere24003a2004-04-26 14:01:47 +000023
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000024define i32 @test4(i32 %A) {
25 ; 0-A
26 %B = sdiv i32 %A, -1 ; <i32> [#uses=1]
27 ret i32 %B
Chris Lattnere24003a2004-04-26 14:01:47 +000028}
Chris Lattnercbd7a982004-09-28 18:21:01 +000029
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000030define i32 @test5(i32 %A) {
31 %B = udiv i32 %A, -16 ; <i32> [#uses=1]
32 %C = udiv i32 %B, -4 ; <i32> [#uses=1]
33 ret i32 %C
Chris Lattnercbd7a982004-09-28 18:21:01 +000034}
Chris Lattnerd9d85382004-09-29 17:37:07 +000035
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000036define i1 @test6(i32 %A) {
37 %B = udiv i32 %A, 123 ; <i32> [#uses=1]
38 ; A < 123
39 %C = icmp eq i32 %B, 0 ; <i1> [#uses=1]
40 ret i1 %C
Chris Lattnerd9d85382004-09-29 17:37:07 +000041}
42
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000043define i1 @test7(i32 %A) {
44 %B = udiv i32 %A, 10 ; <i32> [#uses=1]
45 ; A >= 20 && A < 30
46 %C = icmp eq i32 %B, 2 ; <i1> [#uses=1]
47 ret i1 %C
Chris Lattner9803a0a2004-12-12 21:40:22 +000048}
49
Tanya Lattnerbaa370b2008-03-18 03:45:45 +000050define i1 @test8(i8 %A) {
51 %B = udiv i8 %A, 123 ; <i8> [#uses=1]
52 ; A >= 246
53 %C = icmp eq i8 %B, 2 ; <i1> [#uses=1]
54 ret i1 %C
55}
56
57define i1 @test9(i8 %A) {
58 %B = udiv i8 %A, 123 ; <i8> [#uses=1]
59 ; A < 246
60 %C = icmp ne i8 %B, 2 ; <i1> [#uses=1]
61 ret i1 %C
62}
63
64define i32 @test10(i32 %X, i1 %C) {
65 %V = select i1 %C, i32 64, i32 8 ; <i32> [#uses=1]
66 %R = udiv i32 %X, %V ; <i32> [#uses=1]
67 ret i32 %R
68}
69
70define i32 @test11(i32 %X, i1 %C) {
71 %A = select i1 %C, i32 1024, i32 32 ; <i32> [#uses=1]
72 %B = udiv i32 %X, %A ; <i32> [#uses=1]
73 ret i32 %B
Chris Lattnerb624bb52006-02-05 07:52:47 +000074}