llvm-project/llvm/test/Transforms/GlobalOpt/alias-used-address-space.ll
DianQK 533b7c1f6c
[GlobalOpt] Don't replace the aliasee if it has other references.
As long as aliasee has `@llvm.used` or `@llvm.compiler.used` references, we cannot do the related replace or delete operations. Even if it is a Local Linkage, we cannot infer if there is no other use for it, such as asm or other future added cases.

Reviewed By: nikic

Differential Revision: https://reviews.llvm.org/D145293
2023-04-27 09:53:47 +08:00

28 lines
1.3 KiB
LLVM

; RUN: opt -S -passes=globalopt < %s | FileCheck %s
target datalayout = "p:32:32:32-p1:16:16:16"
@c = hidden addrspace(1) global i8 42
@i = internal addrspace(1) global i8 42
; CHECK: @i = internal addrspace(1) global i8 42
@llvm.used = appending global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @ca to ptr)], section "llvm.metadata"
; CHECK-DAG: @llvm.used = appending global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @ca to ptr)], section "llvm.metadata"
@llvm.compiler.used = appending global [2 x ptr] [ptr addrspacecast(ptr addrspace(1) @ia to ptr), ptr addrspacecast (ptr addrspace(1) @i to ptr)], section "llvm.metadata"
; CHECK-DAG: @llvm.compiler.used = appending global [2 x ptr] [ptr addrspacecast (ptr addrspace(1) @i to ptr), ptr addrspacecast (ptr addrspace(1) @ia to ptr)], section "llvm.metadata"
@sameAsUsed = global [1 x ptr] [ptr addrspacecast(ptr addrspace(1) @ca to ptr)]
; CHECK-DAG: @sameAsUsed = local_unnamed_addr global [1 x ptr] [ptr addrspacecast (ptr addrspace(1) @c to ptr)]
@ia = internal alias i8, ptr addrspace(1) @i
; CHECK: @ia = internal alias i8, ptr addrspace(1) @i
@ca = internal alias i8, ptr addrspace(1) @c
; CHECK: @ca = internal alias i8, ptr addrspace(1) @c
define ptr addrspace(1) @h() {
ret ptr addrspace(1) @ca
}