mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-28 19:31:58 +00:00
38048cdb1c
On ELF and COFF an alias is just another name for a position in the file. There is no way to refer to a position in another file, so an alias to undefined is meaningless. MachO currently doesn't support aliases. The spec has a N_INDR, which when implemented will have a different set of restrictions. Adding support for it shouldn't be harder than any other IR extension. For now, having the IR represent what is actually possible with current tools makes it easier to fix the design of GlobalAlias. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203705 91177308-0d34-0410-b5e6-96231b3b80d8
99 lines
3.1 KiB
LLVM
99 lines
3.1 KiB
LLVM
; RUN: opt -metarenamer -S < %s | FileCheck %s
|
|
|
|
; CHECK: target triple {{.*}}
|
|
; CHECK-NOT: {{^x*}}xxx{{^x*}}
|
|
; CHECK: ret i32 6
|
|
|
|
target triple = "x86_64-pc-linux-gnu"
|
|
|
|
%struct.bar_xxx = type { i32, double }
|
|
%struct.foo_xxx = type { i32, float, %struct.bar_xxx }
|
|
|
|
@func_5_xxx.static_local_3_xxx = internal global i32 3, align 4
|
|
@global_3_xxx = common global i32 0, align 4
|
|
|
|
@func_7_xxx = alias weak i32 (...)* @aliased_func_7_xxx
|
|
|
|
define i32 @aliased_func_7_xxx(...) {
|
|
ret i32 0
|
|
}
|
|
|
|
define i32 @func_3_xxx() nounwind uwtable ssp {
|
|
ret i32 3
|
|
}
|
|
|
|
define void @func_4_xxx(%struct.foo_xxx* sret %agg.result) nounwind uwtable ssp {
|
|
%1 = alloca %struct.foo_xxx, align 8
|
|
%2 = getelementptr inbounds %struct.foo_xxx* %1, i32 0, i32 0
|
|
store i32 1, i32* %2, align 4
|
|
%3 = getelementptr inbounds %struct.foo_xxx* %1, i32 0, i32 1
|
|
store float 2.000000e+00, float* %3, align 4
|
|
%4 = getelementptr inbounds %struct.foo_xxx* %1, i32 0, i32 2
|
|
%5 = getelementptr inbounds %struct.bar_xxx* %4, i32 0, i32 0
|
|
store i32 3, i32* %5, align 4
|
|
%6 = getelementptr inbounds %struct.bar_xxx* %4, i32 0, i32 1
|
|
store double 4.000000e+00, double* %6, align 8
|
|
%7 = bitcast %struct.foo_xxx* %agg.result to i8*
|
|
%8 = bitcast %struct.foo_xxx* %1 to i8*
|
|
call void @llvm.memcpy.p0i8.p0i8.i64(i8* %7, i8* %8, i64 24, i32 8, i1 false)
|
|
ret void
|
|
}
|
|
|
|
declare void @llvm.memcpy.p0i8.p0i8.i64(i8* nocapture, i8* nocapture, i64, i32, i1) nounwind
|
|
|
|
define i32 @func_5_xxx(i32 %arg_1_xxx, i32 %arg_2_xxx, i32 %arg_3_xxx, i32 %arg_4_xxx) nounwind uwtable ssp {
|
|
%1 = alloca i32, align 4
|
|
%2 = alloca i32, align 4
|
|
%3 = alloca i32, align 4
|
|
%4 = alloca i32, align 4
|
|
%local_1_xxx = alloca i32, align 4
|
|
%local_2_xxx = alloca i32, align 4
|
|
%i = alloca i32, align 4
|
|
store i32 %arg_1_xxx, i32* %1, align 4
|
|
store i32 %arg_2_xxx, i32* %2, align 4
|
|
store i32 %arg_3_xxx, i32* %3, align 4
|
|
store i32 %arg_4_xxx, i32* %4, align 4
|
|
store i32 1, i32* %local_1_xxx, align 4
|
|
store i32 2, i32* %local_2_xxx, align 4
|
|
store i32 0, i32* %i, align 4
|
|
br label %5
|
|
|
|
; <label>:5 ; preds = %9, %0
|
|
%6 = load i32* %i, align 4
|
|
%7 = icmp slt i32 %6, 10
|
|
br i1 %7, label %8, label %12
|
|
|
|
; <label>:8 ; preds = %5
|
|
br label %9
|
|
|
|
; <label>:9 ; preds = %8
|
|
%10 = load i32* %i, align 4
|
|
%11 = add nsw i32 %10, 1
|
|
store i32 %11, i32* %i, align 4
|
|
br label %5
|
|
|
|
; <label>:12 ; preds = %5
|
|
%13 = load i32* %local_1_xxx, align 4
|
|
%14 = load i32* %1, align 4
|
|
%15 = add nsw i32 %13, %14
|
|
%16 = load i32* %local_2_xxx, align 4
|
|
%17 = add nsw i32 %15, %16
|
|
%18 = load i32* %2, align 4
|
|
%19 = add nsw i32 %17, %18
|
|
%20 = load i32* @func_5_xxx.static_local_3_xxx, align 4
|
|
%21 = add nsw i32 %19, %20
|
|
%22 = load i32* %3, align 4
|
|
%23 = add nsw i32 %21, %22
|
|
%24 = load i32* %4, align 4
|
|
%25 = add nsw i32 %23, %24
|
|
ret i32 %25
|
|
}
|
|
|
|
define i32 @varargs_func_6_xxx(i32 %arg_1_xxx, i32 %arg_2_xxx, ...) nounwind uwtable ssp {
|
|
%1 = alloca i32, align 4
|
|
%2 = alloca i32, align 4
|
|
store i32 %arg_1_xxx, i32* %1, align 4
|
|
store i32 %arg_2_xxx, i32* %2, align 4
|
|
ret i32 6
|
|
}
|