Jim Stichnoth | f1156be | 2014-11-03 12:36:29 -0800 | [diff] [blame] | 1 | ; Tests the integrated assembler for instructions with multiple |
| 2 | ; relocations. |
| 3 | |
Jim Stichnoth | 729dbd0 | 2015-02-25 14:48:43 -0800 | [diff] [blame] | 4 | ; RUN: %if --need=allow_dump --command %p2i -i %s --args -O2 \ |
| 5 | ; RUN: | %if --need=allow_dump --command FileCheck %s |
Jim Stichnoth | f1156be | 2014-11-03 12:36:29 -0800 | [diff] [blame] | 6 | |
| 7 | ; char global_char; |
| 8 | ; char *p_global_char; |
| 9 | ; void dummy(); |
| 10 | ; void store_immediate_to_global() { p_global_char = &global_char; } |
| 11 | ; void add_in_place() { p_global_char += (int)&global_char; } |
| 12 | ; void cmp_global_immediate() { if (p_global_char == &global_char) dummy(); } |
| 13 | |
| 14 | @global_char = internal global [1 x i8] zeroinitializer, align 1 |
| 15 | @p_global_char = internal global [4 x i8] zeroinitializer, align 4 |
Jan Voung | 0faec4c | 2014-11-05 17:29:56 -0800 | [diff] [blame] | 16 | declare void @dummy() |
Jim Stichnoth | f1156be | 2014-11-03 12:36:29 -0800 | [diff] [blame] | 17 | |
| 18 | define internal void @store_immediate_to_global() { |
| 19 | entry: |
| 20 | %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
| 21 | %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
| 22 | store i32 %expanded1, i32* %p_global_char.bc, align 1 |
| 23 | ret void |
| 24 | } |
| 25 | ; CHECK-LABEL: store_immediate_to_global |
| 26 | ; CHECK: .long p_global_char |
| 27 | ; CHECK: .long global_char |
| 28 | |
| 29 | define internal void @add_in_place() { |
| 30 | entry: |
| 31 | %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
Jim Stichnoth | e5b58fb | 2015-06-01 15:17:20 -0700 | [diff] [blame] | 32 | %0 = load i32, i32* %p_global_char.bc, align 1 |
Jim Stichnoth | f1156be | 2014-11-03 12:36:29 -0800 | [diff] [blame] | 33 | %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
| 34 | %gep = add i32 %0, %expanded1 |
| 35 | %p_global_char.bc3 = bitcast [4 x i8]* @p_global_char to i32* |
| 36 | store i32 %gep, i32* %p_global_char.bc3, align 1 |
| 37 | ret void |
| 38 | } |
| 39 | ; CHECK-LABEL: add_in_place |
| 40 | ; CHECK: .long global_char |
| 41 | ; CHECK: .long p_global_char |
| 42 | |
| 43 | define internal void @cmp_global_immediate() { |
| 44 | entry: |
| 45 | %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
Jim Stichnoth | e5b58fb | 2015-06-01 15:17:20 -0700 | [diff] [blame] | 46 | %0 = load i32, i32* %p_global_char.bc, align 1 |
Jim Stichnoth | f1156be | 2014-11-03 12:36:29 -0800 | [diff] [blame] | 47 | %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
| 48 | %cmp = icmp eq i32 %0, %expanded1 |
| 49 | br i1 %cmp, label %if.then, label %if.end |
| 50 | |
| 51 | if.then: ; preds = %entry |
Jan Voung | 0faec4c | 2014-11-05 17:29:56 -0800 | [diff] [blame] | 52 | tail call void @dummy() |
Jim Stichnoth | f1156be | 2014-11-03 12:36:29 -0800 | [diff] [blame] | 53 | br label %if.end |
| 54 | |
| 55 | if.end: ; preds = %if.then, %entry |
| 56 | ret void |
| 57 | } |
| 58 | ; CHECK-LABEL: cmp_global_immediate |
| 59 | ; CHECK: .long p_global_char |
| 60 | ; CHECK: .long global_char |
Jan Voung | 0faec4c | 2014-11-05 17:29:56 -0800 | [diff] [blame] | 61 | ; CHECK: .long dummy |