llvm-6502/test/Transforms/MetaRenamer/metarenamer.ll
Rafael Espindola 38048cdb1c Reject alias to undefined symbols in the verifier.
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
2014-03-12 20:15:49 +00:00

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
}