[InstCombine] Signed saturation patterns
[llvm-core.git] / test / Feature / weak_constant.ll
blob4ac2e7e7d6891a5679f86c0c9f8ce0168efaebfe
1 ; RUN: opt < %s -O3 -S > %t
2 ; RUN:   grep undef %t | count 1
3 ; RUN:   grep 5 %t | count 1
4 ; RUN:   grep 7 %t | count 1
5 ; RUN:   grep 9 %t | count 1
7         %0 = type { i32, i32 }          ; type %0
8 @a = weak constant i32 undef            ; <i32*> [#uses=1]
9 @b = weak constant i32 5                ; <i32*> [#uses=1]
10 @c = weak constant %0 { i32 7, i32 9 }          ; <%0*> [#uses=1]
12 define i32 @la() {
13         %v = load i32, i32* @a          ; <i32> [#uses=1]
14         ret i32 %v
17 define i32 @lb() {
18         %v = load i32, i32* @b          ; <i32> [#uses=1]
19         ret i32 %v
22 define i32 @lc() {
23         %g = getelementptr %0, %0* @c, i32 0, i32 0             ; <i32*> [#uses=1]
24         %u = load i32, i32* %g          ; <i32> [#uses=1]
25         %h = getelementptr %0, %0* @c, i32 0, i32 1             ; <i32*> [#uses=1]
26         %v = load i32, i32* %h          ; <i32> [#uses=1]
27         %r = add i32 %u, %v
28         ret i32 %r
31 define i32 @f() {
32         %u = call i32 @la()             ; <i32> [#uses=1]
33         %v = call i32 @lb()             ; <i32> [#uses=1]
34         %w = call i32 @lc()             ; <i32> [#uses=1]
35         %r = add i32 %u, %v             ; <i32> [#uses=1]
36         %s = add i32 %r, %w             ; <i32> [#uses=1]
37         ret i32 %s