Use the llvm-upgrade program to upgrade llvm assembly.
[oota-llvm.git] / test / Transforms / ADCE / 2002-05-28-Crash.ll
1 ; This testcase is distilled from the GNU rx package.  The loop should be 
2 ; removed but causes a problem when ADCE does.  The source function is:
3 ; int rx_bitset_empty (int size, rx_Bitset set) {
4 ;  int x;
5 ;  RX_subset s;
6 ;  s = set[0];
7 ;  set[0] = 1;
8 ;  for (x = rx_bitset_numb_subsets(size) - 1; !set[x]; --x)
9 ;    ;
10 ;  set[0] = s;
11 ;  return !s;
12 ;}
13 ;
14 ; RUN: llvm-upgrade < %s | llvm-as | opt -adce
15
16 implementation   ; Functions:
17
18 int %rx_bitset_empty(int %size, uint* %set) {
19 bb1:                                    ;[#uses=2]
20         %reg110 = load uint* %set               ; <uint> [#uses=2]
21         store uint 1, uint* %set
22         %cast112 = cast int %size to ulong              ; <ulong> [#uses=1]
23         %reg113 = add ulong %cast112, 31                ; <ulong> [#uses=1]
24         %reg114 = shr ulong %reg113, ubyte 5            ; <ulong> [#uses=2]
25         %cast109 = cast ulong %reg114 to int            ; <int> [#uses=1]
26         %reg129 = add int %cast109, -1          ; <int> [#uses=1]
27         %reg114-idxcast = cast ulong %reg114 to uint            ; <uint> [#uses=1]
28         %reg114-idxcast-offset = add uint %reg114-idxcast, 1073741823           ; <uint> [#uses=1]
29         %reg114-idxcast-offset = cast uint %reg114-idxcast-offset to long
30         %reg124 = getelementptr uint* %set, long %reg114-idxcast-offset         ; <uint*> [#uses=1]
31         %reg125 = load uint* %reg124            ; <uint> [#uses=1]
32         %cond232 = setne uint %reg125, 0                ; <bool> [#uses=1]
33         br bool %cond232, label %bb3, label %bb2
34
35 bb2:                                    ;[#uses=3]
36         %cann-indvar = phi int [ 0, %bb1 ], [ %add1-indvar, %bb2 ]              ; <int> [#uses=2]
37         %reg130-scale = mul int %cann-indvar, -1                ; <int> [#uses=1]
38         %reg130 = add int %reg130-scale, %reg129                ; <int> [#uses=1]
39         %add1-indvar = add int %cann-indvar, 1          ; <int> [#uses=1]
40         %reg130-idxcast = cast int %reg130 to uint              ; <uint> [#uses=1]
41         %reg130-idxcast-offset = add uint %reg130-idxcast, 1073741823           ; <uint> [#uses=1]
42         %reg130-idxcast-offset = cast uint %reg130-idxcast-offset to long
43         %reg118 = getelementptr uint* %set, long %reg130-idxcast-offset         ; <uint*> [#uses=1]
44         %reg119 = load uint* %reg118            ; <uint> [#uses=1]
45         %cond233 = seteq uint %reg119, 0                ; <bool> [#uses=1]
46         br bool %cond233, label %bb2, label %bb3
47
48 bb3:                                    ;[#uses=2]
49         store uint %reg110, uint* %set
50         %cast126 = cast uint %reg110 to ulong           ; <ulong> [#uses=1]
51         %reg127 = add ulong %cast126, 18446744073709551615              ; <ulong> [#uses=1]
52         %reg128 = shr ulong %reg127, ubyte 63           ; <ulong> [#uses=1]
53         %cast120 = cast ulong %reg128 to int            ; <int> [#uses=1]
54         ret int %cast120
55
56 }