| Index: tests_lit/llvm2ice_tests/ias-multi-reloc.ll
|
| diff --git a/tests_lit/llvm2ice_tests/ias-multi-reloc.ll b/tests_lit/llvm2ice_tests/ias-multi-reloc.ll
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..4e25c66328198ea8ee8d060eb439558dc122f028
|
| --- /dev/null
|
| +++ b/tests_lit/llvm2ice_tests/ias-multi-reloc.ll
|
| @@ -0,0 +1,61 @@
|
| +; Tests the integrated assembler for instructions with multiple
|
| +; relocations.
|
| +
|
| +; RUN: %p2i -i %s --args -O2 | FileCheck %s
|
| +
|
| +; char global_char;
|
| +; char *p_global_char;
|
| +; void dummy();
|
| +; void store_immediate_to_global() { p_global_char = &global_char; }
|
| +; void add_in_place() { p_global_char += (int)&global_char; }
|
| +; void cmp_global_immediate() { if (p_global_char == &global_char) dummy(); }
|
| +
|
| +@global_char = internal global [1 x i8] zeroinitializer, align 1
|
| +@p_global_char = internal global [4 x i8] zeroinitializer, align 4
|
| +declare void @dummy(i32)
|
| +
|
| +define internal void @store_immediate_to_global() {
|
| +entry:
|
| + %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32*
|
| + %expanded1 = ptrtoint [1 x i8]* @global_char to i32
|
| + store i32 %expanded1, i32* %p_global_char.bc, align 1
|
| + ret void
|
| +}
|
| +; CHECK-LABEL: store_immediate_to_global
|
| +; CHECK: .long p_global_char
|
| +; CHECK: .long global_char
|
| +
|
| +define internal void @add_in_place() {
|
| +entry:
|
| + %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32*
|
| + %0 = load i32* %p_global_char.bc, align 1
|
| + %expanded1 = ptrtoint [1 x i8]* @global_char to i32
|
| + %gep = add i32 %0, %expanded1
|
| + %p_global_char.bc3 = bitcast [4 x i8]* @p_global_char to i32*
|
| + store i32 %gep, i32* %p_global_char.bc3, align 1
|
| + ret void
|
| +}
|
| +; CHECK-LABEL: add_in_place
|
| +; CHECK: .long global_char
|
| +; CHECK: .long p_global_char
|
| +
|
| +define internal void @cmp_global_immediate() {
|
| +entry:
|
| + %p_global_char.bc = bitcast [4 x i8]* @p_global_char to i32*
|
| + %0 = load i32* %p_global_char.bc, align 1
|
| + %expanded1 = ptrtoint [1 x i8]* @global_char to i32
|
| + %cmp = icmp eq i32 %0, %expanded1
|
| + br i1 %cmp, label %if.then, label %if.end
|
| +
|
| +if.then: ; preds = %entry
|
| + %dummy.bc = bitcast void (i32)* @dummy to void ()*
|
| + tail call void %dummy.bc()
|
| + br label %if.end
|
| +
|
| +if.end: ; preds = %if.then, %entry
|
| + ret void
|
| +}
|
| +; CHECK-LABEL: cmp_global_immediate
|
| +; CHECK: .long p_global_char
|
| +; CHECK: .long global_char
|
| +; CHECK: call dummy
|
|
|