Rafael Espindola 95f885390b Don't replace an alias in llvm.used with its target.
When we replace an internal alias with its target, be careful not to
replace the entry in llvm.used (and llvm.compiler_used).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@181524 91177308-0d34-0410-b5e6-96231b3b80d8
2013-05-09 17:22:59 +00:00

43 lines
1.3 KiB
LLVM

; RUN: opt < %s -globalopt -S | FileCheck %s
@c = global i8 42
@llvm.used = appending global [3 x i8*] [i8* bitcast (void ()* @fa to i8*), i8* bitcast (void ()* @f to i8*), i8* @ca], section "llvm.metadata"
; CHECK: @llvm.used = appending global [3 x i8*] [i8* bitcast (void ()* @fa to i8*), i8* bitcast (void ()* @f to i8*), i8* @ca], section "llvm.metadata"
@llvm.compiler_used = appending global [2 x i8*] [i8* bitcast (void ()* @fa to i8*), i8* bitcast (void ()* @fa3 to i8*)], section "llvm.metadata"
@sameAsUsed = global [3 x i8*] [i8* bitcast (void ()* @fa to i8*), i8* bitcast (void ()* @f to i8*), i8* @ca]
; CHECK: @sameAsUsed = global [3 x i8*] [i8* bitcast (void ()* @f to i8*), i8* bitcast (void ()* @f to i8*), i8* @c]
@other = global i32* bitcast (void ()* @fa to i32*)
; CHECK: @other = global i32* bitcast (void ()* @f to i32*)
@fa = alias internal void ()* @f
; CHECK: @fa = alias internal void ()* @f
@fa2 = alias internal void ()* @f
; CHECK-NOT: @fa2
@fa3 = alias internal void ()* @f
; CHECK: @fa3
@ca = alias internal i8* @c
; CHECK: @ca = alias internal i8* @c
define void @f() {
ret void
}
define i8* @g() {
ret i8* bitcast (void ()* @fa to i8*);
}
define i8* @g2() {
ret i8* bitcast (void ()* @fa2 to i8*);
}
define i8* @h() {
ret i8* @ca
}