Dmitri Gribenko | d7beca8 | 2013-01-01 13:57:25 +0000 | [diff] [blame] | 1 | ; RUN: opt -globalopt -S < %s | FileCheck %s |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 2 | |
| 3 | @a = internal global i32 0, align 4 |
| 4 | @b = internal global i32 0, align 4 |
| 5 | @c = internal global i32 0, align 4 |
| 6 | @d = internal constant [4 x i8] c"foo\00", align 1 |
Rafael Espindola | 1821c6c | 2012-06-15 18:00:24 +0000 | [diff] [blame] | 7 | @e = linkonce_odr global i32 0 |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 8 | |
Shuxin Yang | 2e1890e | 2013-10-27 03:08:44 +0000 | [diff] [blame] | 9 | ; CHECK: @a = internal global i32 0, align 4 |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 10 | ; CHECK: @b = internal global i32 0, align 4 |
Shuxin Yang | 2e1890e | 2013-10-27 03:08:44 +0000 | [diff] [blame] | 11 | ; CHECK: @c = internal unnamed_addr global i32 0, align 4 |
| 12 | ; CHECK: @d = internal unnamed_addr constant [4 x i8] c"foo\00", align 1 |
Peter Collingbourne | 96efdd6 | 2016-06-14 21:01:22 +0000 | [diff] [blame] | 13 | ; CHECK: @e = linkonce_odr local_unnamed_addr global i32 0 |
Rafael Espindola | 1821c6c | 2012-06-15 18:00:24 +0000 | [diff] [blame] | 14 | |
Rafael Espindola | 10d9a03 | 2015-12-22 20:43:30 +0000 | [diff] [blame] | 15 | ; CHECK: define internal fastcc void @used_internal() unnamed_addr { |
| 16 | define internal void @used_internal() { |
| 17 | ret void |
| 18 | } |
| 19 | |
Rafael Espindola | 1821c6c | 2012-06-15 18:00:24 +0000 | [diff] [blame] | 20 | define i32 @get_e() { |
Rafael Espindola | 10d9a03 | 2015-12-22 20:43:30 +0000 | [diff] [blame] | 21 | call void @used_internal() |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 22 | %t = load i32, i32* @e |
Rafael Espindola | 1821c6c | 2012-06-15 18:00:24 +0000 | [diff] [blame] | 23 | ret i32 %t |
| 24 | } |
| 25 | |
| 26 | define void @set_e(i32 %x) { |
| 27 | store i32 %x, i32* @e |
| 28 | ret void |
| 29 | } |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 30 | |
| 31 | define i1 @bah(i64 %i) nounwind readonly optsize ssp { |
| 32 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame] | 33 | %arrayidx4 = getelementptr inbounds [4 x i8], [4 x i8]* @d, i64 0, i64 %i |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 34 | %tmp5 = load i8, i8* %arrayidx4, align 1 |
Duncan Sands | e8ce94f | 2012-07-02 18:55:39 +0000 | [diff] [blame] | 35 | %array0 = bitcast [4 x i8]* @d to i8* |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 36 | %tmp6 = load i8, i8* %array0, align 1 |
Duncan Sands | e8ce94f | 2012-07-02 18:55:39 +0000 | [diff] [blame] | 37 | %cmp = icmp eq i8 %tmp5, %tmp6 |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 38 | ret i1 %cmp |
| 39 | } |
| 40 | |
| 41 | define void @baz(i32 %x) { |
| 42 | entry: |
| 43 | store i32 %x, i32* @a, align 4 |
| 44 | store i32 %x, i32* @b, align 4 |
| 45 | store i32 %x, i32* @c, align 4 |
| 46 | ret void |
| 47 | } |
| 48 | |
| 49 | define i32 @foo(i32* %x) nounwind readnone optsize ssp { |
| 50 | entry: |
| 51 | %cmp = icmp eq i32* %x, @a |
| 52 | %conv = zext i1 %cmp to i32 |
| 53 | ret i32 %conv |
| 54 | } |
| 55 | |
| 56 | define i32 @bar() { |
| 57 | entry: |
| 58 | switch i64 ptrtoint (i32* @b to i64), label %sw.epilog [ |
| 59 | i64 1, label %return |
| 60 | i64 0, label %return |
| 61 | ] |
| 62 | |
| 63 | sw.epilog: |
| 64 | ret i32 0 |
| 65 | |
| 66 | return: |
| 67 | ret i32 1 |
| 68 | } |
| 69 | |
| 70 | define i32 @zed() { |
| 71 | entry: |
David Blaikie | a79ac14 | 2015-02-27 21:17:42 +0000 | [diff] [blame] | 72 | %tmp1 = load i32, i32* @c, align 4 |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 73 | ret i32 %tmp1 |
| 74 | } |