OLD | NEW |
(Empty) | |
| 1 ; Tests the integrated assembler for instructions with multiple |
| 2 ; relocations. |
| 3 |
| 4 ; RUN: %p2i -i %s --args -O2 | FileCheck %s |
| 5 |
| 6 ; char global_char; |
| 7 ; char *p_global_char; |
| 8 ; void dummy(); |
| 9 ; void store_immediate_to_global() { p_global_char = &global_char; } |
| 10 ; void add_in_place() { p_global_char += (int)&global_char; } |
| 11 ; void cmp_global_immediate() { if (p_global_char == &global_char) dummy(); } |
| 12 |
| 13 @global_char = internal global [1 x i8] zeroinitializer, align 1 |
| 14 @p_global_char = internal global [4 x i8] zeroinitializer, align 4 |
| 15 declare void @dummy(i32) |
| 16 |
| 17 define internal void @store_immediate_to_global() { |
| 18 entry: |
| 19 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
| 20 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
| 21 store i32 %expanded1, i32* %p_global_char.bc, align 1 |
| 22 ret void |
| 23 } |
| 24 ; CHECK-LABEL: store_immediate_to_global |
| 25 ; CHECK: .long p_global_char |
| 26 ; CHECK: .long global_char |
| 27 |
| 28 define internal void @add_in_place() { |
| 29 entry: |
| 30 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
| 31 %0 = load i32* %p_global_char.bc, align 1 |
| 32 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
| 33 %gep = add i32 %0, %expanded1 |
| 34 %p_global_char.bc3 = bitcast [4 x i8]* @p_global_char to i32* |
| 35 store i32 %gep, i32* %p_global_char.bc3, align 1 |
| 36 ret void |
| 37 } |
| 38 ; CHECK-LABEL: add_in_place |
| 39 ; CHECK: .long global_char |
| 40 ; CHECK: .long p_global_char |
| 41 |
| 42 define internal void @cmp_global_immediate() { |
| 43 entry: |
| 44 %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32* |
| 45 %0 = load i32* %p_global_char.bc, align 1 |
| 46 %expanded1 = ptrtoint [1 x i8]* @global_char to i32 |
| 47 %cmp = icmp eq i32 %0, %expanded1 |
| 48 br i1 %cmp, label %if.then, label %if.end |
| 49 |
| 50 if.then: ; preds = %entry |
| 51 %dummy.bc = bitcast void (i32)* @dummy to void ()* |
| 52 tail call void %dummy.bc() |
| 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 |
| 61 ; CHECK: call dummy |
OLD | NEW |