blob: 5c7d580a467e882f0cc8a0b3221e7b1c2ebf93b0 [file] [log] [blame]
Chris Lattner8c4b0d02003-06-26 05:05:51 +00001; This test makes sure that these instructions are properly eliminated.
2;
Reid Spencerd0e30dc2006-12-02 04:23:10 +00003; RUN: llvm-upgrade < %s | llvm-as | opt -instcombine | llvm-dis | not grep load
Chris Lattner8c4b0d02003-06-26 05:05:51 +00004
5%X = constant int 42
Chris Lattner29dd8242004-09-19 18:43:01 +00006%X2 = constant int 47
Chris Lattner8c4b0d02003-06-26 05:05:51 +00007%Y = constant [2 x { int, float }] [ { int, float } { int 12, float 1.0 },
Dale Johannesen6480cc62007-09-05 17:50:36 +00008 { int, float } { int 37, float 0x3FF3B2FEC0000000 } ]
Chris Lattner9b387432004-05-27 17:28:55 +00009%Z = constant [2 x { int, float }] zeroinitializer
Chris Lattner8c4b0d02003-06-26 05:05:51 +000010
Chris Lattner3a451492004-05-27 17:43:33 +000011int %test1() {
12 %B = load int* %X
13 ret int %B
14}
15
Chris Lattner8c4b0d02003-06-26 05:05:51 +000016float %test2() {
Reid Spencer0e43e152006-11-23 15:14:52 +000017 %A = getelementptr [2 x { int, float}]* %Y, long 0, long 1, uint 1
Chris Lattner8c4b0d02003-06-26 05:05:51 +000018 %B = load float* %A
19 ret float %B
20}
21
Chris Lattner9b387432004-05-27 17:28:55 +000022
Chris Lattner8c4b0d02003-06-26 05:05:51 +000023int %test3() {
Reid Spencer0e43e152006-11-23 15:14:52 +000024 %A = getelementptr [2 x { int, float}]* %Y, long 0, long 0, uint 0
Chris Lattner8c4b0d02003-06-26 05:05:51 +000025 %B = load int* %A
26 ret int %B
27}
28
Chris Lattner9b387432004-05-27 17:28:55 +000029int %test4() {
Reid Spencer0e43e152006-11-23 15:14:52 +000030 %A = getelementptr [2 x { int, float}]* %Z, long 0, long 1, uint 0
Chris Lattner9b387432004-05-27 17:28:55 +000031 %B = load int* %A
32 ret int %B
33}
Chris Lattner29dd8242004-09-19 18:43:01 +000034
35; load (select (Cond, &V1, &V2)) --> select(Cond, load &V1, load &V2)
36int %test5(bool %C) {
37 %Y = select bool %C, int* %X, int* %X2
38 %Z = load int* %Y
39 ret int %Z
40}
41
Chris Lattnerda96eeb2005-05-01 04:24:15 +000042int %test7(int %X) {
43 %V = getelementptr int* null, int %X
44 %R = load int* %V
45 ret int %R
46}
Chris Lattner4cd474e2005-09-12 21:59:22 +000047
48int %test8(int* %P) {
49 store int 1, int* %P
50 %X = load int* %P ;; Trivial store->load forwarding
51 ret int %X
52}
Chris Lattner20c1cc02005-09-12 22:19:46 +000053
54int %test9(int* %P) {
55 %X = load int* %P ;; Trivial load cse
56 %Y = load int* %P
57 %Z = sub int %X, %Y
58 ret int %Z
59}
Chris Lattner42a6cef2005-09-12 23:22:17 +000060
61int %test10(bool %C, int* %P, int* %Q) {
62 br bool %C, label %T, label %F
63T:
64 store int 1, int* %Q
65 store int 0, int* %P
66 br label %C
67F:
68 store int 0, int* %P
69 br label %C
70C:
71 %V = load int* %P ;; always 0
72 ret int %V
73}