Use the llvm-upgrade program to upgrade llvm assembly.
[oota-llvm.git] / test / Transforms / Mem2Reg / 2005-06-30-ReadBeforeWrite.ll
1 ; RUN: llvm-upgrade < %s | llvm-as | opt -mem2reg -instcombine | llvm-dis | grep store
2 ; PR590
3
4 void %zero(sbyte* %p, int %n) {
5 entry:
6         %p_addr = alloca sbyte*         ; <sbyte**> [#uses=2]
7         %n_addr = alloca int            ; <int*> [#uses=2]
8         %i = alloca int         ; <int*> [#uses=6]
9         %out = alloca int               ; <int*> [#uses=2]
10         %undef = alloca int             ; <int*> [#uses=2]
11         store sbyte* %p, sbyte** %p_addr
12         store int %n, int* %n_addr
13         store int 0, int* %i
14         br label %loopentry
15
16 loopentry:              ; preds = %endif, %entry
17         %tmp.0 = load int* %n_addr              ; <int> [#uses=1]
18         %tmp.1 = add int %tmp.0, 1              ; <int> [#uses=1]
19         %tmp.2 = load int* %i           ; <int> [#uses=1]
20         %tmp.3 = setgt int %tmp.1, %tmp.2               ; <bool> [#uses=2]
21         %tmp.4 = cast bool %tmp.3 to int                ; <int> [#uses=0]
22         br bool %tmp.3, label %no_exit, label %return
23
24 no_exit:                ; preds = %loopentry
25         %tmp.5 = load int* %undef               ; <int> [#uses=1]
26         store int %tmp.5, int* %out
27         store int 0, int* %undef
28         %tmp.6 = load int* %i           ; <int> [#uses=1]
29         %tmp.7 = setgt int %tmp.6, 0            ; <bool> [#uses=2]
30         %tmp.8 = cast bool %tmp.7 to int                ; <int> [#uses=0]
31         br bool %tmp.7, label %then, label %endif
32
33 then:           ; preds = %no_exit
34         %tmp.9 = load sbyte** %p_addr           ; <sbyte*> [#uses=1]
35         %tmp.10 = load int* %i          ; <int> [#uses=1]
36         %tmp.11 = sub int %tmp.10, 1            ; <int> [#uses=1]
37         %tmp.12 = getelementptr sbyte* %tmp.9, int %tmp.11              ; <sbyte*> [#uses=1]
38         %tmp.13 = load int* %out                ; <int> [#uses=1]
39         %tmp.14 = cast int %tmp.13 to sbyte             ; <sbyte> [#uses=1]
40         store sbyte %tmp.14, sbyte* %tmp.12
41         br label %endif
42
43 endif:          ; preds = %then, %no_exit
44         %tmp.15 = load int* %i          ; <int> [#uses=1]
45         %inc = add int %tmp.15, 1               ; <int> [#uses=1]
46         store int %inc, int* %i
47         br label %loopentry
48
49 return:         ; preds = %loopentry
50         ret void
51 }