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 |
Rafael Espindola | 1821c6c | 2012-06-15 18:00:24 +0000 | [diff] [blame] | 13 | ; CHECK: @e = linkonce_odr global i32 0 |
| 14 | |
| 15 | define i32 @get_e() { |
| 16 | %t = load i32* @e |
| 17 | ret i32 %t |
| 18 | } |
| 19 | |
| 20 | define void @set_e(i32 %x) { |
| 21 | store i32 %x, i32* @e |
| 22 | ret void |
| 23 | } |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 24 | |
| 25 | define i1 @bah(i64 %i) nounwind readonly optsize ssp { |
| 26 | entry: |
David Blaikie | 79e6c74 | 2015-02-27 19:29:02 +0000 | [diff] [blame^] | 27 | %arrayidx4 = getelementptr inbounds [4 x i8], [4 x i8]* @d, i64 0, i64 %i |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 28 | %tmp5 = load i8* %arrayidx4, align 1 |
Duncan Sands | e8ce94f | 2012-07-02 18:55:39 +0000 | [diff] [blame] | 29 | %array0 = bitcast [4 x i8]* @d to i8* |
| 30 | %tmp6 = load i8* %array0, align 1 |
| 31 | %cmp = icmp eq i8 %tmp5, %tmp6 |
Rafael Espindola | fc355bc | 2011-01-19 16:32:21 +0000 | [diff] [blame] | 32 | ret i1 %cmp |
| 33 | } |
| 34 | |
| 35 | define void @baz(i32 %x) { |
| 36 | entry: |
| 37 | store i32 %x, i32* @a, align 4 |
| 38 | store i32 %x, i32* @b, align 4 |
| 39 | store i32 %x, i32* @c, align 4 |
| 40 | ret void |
| 41 | } |
| 42 | |
| 43 | define i32 @foo(i32* %x) nounwind readnone optsize ssp { |
| 44 | entry: |
| 45 | %cmp = icmp eq i32* %x, @a |
| 46 | %conv = zext i1 %cmp to i32 |
| 47 | ret i32 %conv |
| 48 | } |
| 49 | |
| 50 | define i32 @bar() { |
| 51 | entry: |
| 52 | switch i64 ptrtoint (i32* @b to i64), label %sw.epilog [ |
| 53 | i64 1, label %return |
| 54 | i64 0, label %return |
| 55 | ] |
| 56 | |
| 57 | sw.epilog: |
| 58 | ret i32 0 |
| 59 | |
| 60 | return: |
| 61 | ret i32 1 |
| 62 | } |
| 63 | |
| 64 | define i32 @zed() { |
| 65 | entry: |
| 66 | %tmp1 = load i32* @c, align 4 |
| 67 | ret i32 %tmp1 |
| 68 | } |