Files
derek.holloway 7502bf64a4
CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

79 lines
3.2 KiB
LLVM

; This testcase is for testing the positive return values of the
; TOCRestoreNeededForCallToImplementation query, specifically the type of
; functions that are considered DSO local on AIX.
; REQUIRES: asserts
; RUN: llc < %s -mtriple=powerpc64-ibm-aix-xcoff --function-sections -filetype=obj -o /dev/null -debug-only=asmprinter 2>&1 | FileCheck %s
; RUN: llc < %s -mtriple=powerpc-ibm-aix-xcoff --function-sections -filetype=obj -o /dev/null -debug-only=asmprinter 2>&1 | FileCheck %s
; RUN: llc < %s -mtriple=powerpc64-ibm-aix-xcoff -ifunc-local-if-proven=1 -o /dev/null -debug-only=asmprinter 2>&1 | FileCheck %s
; CHECK: foo_ext_hidden_decl is dso_local
; CHECK: foo_ext_hidden_def is dso_local
; CHECK: foo_ext_hidden_weak_def is dso_local
; CHECK: foo_ext_protected_decl is dso_local
; CHECK: foo_ext_protected_def is dso_local
; CHECK: foo_ext_protected_weak_def is dso_local
; CHECK: foo_static is dso_local
; The following decls/defs are dso_local in the IR, and it matches the behaviour on AIX in practice
; (1) a hidden/protected declaration should have a matching definition in the same shared object,
; with the matching visibility. So the definition is not interposable due to hidden/protected.
; (2) a hidden/protected definition is not interposable.
; (3) attribute weak has no effect on interposition, and if a strong definition in the same shared object
; exists, then it's a user error to have that definition have conflicting visibility.
; In practice, on AIX the linker will silently pick the strong definition and keep it's visibility
; ignoring what's on the weak definition.
; On Linux, both ld and lld pick the strong definition but give it the most restrictive visibility based
; on the candidates available (so a weak hidden and a strong default will yield a hidden strong)
;
declare hidden void @foo_ext_hidden_decl(...) ; (1)
declare protected void @foo_ext_protected_decl(...) ; (1)
define hidden void @foo_ext_hidden_def() { ; (2)
entry:
ret void
}
define protected void @foo_ext_protected_def() { ; (2)
entry:
ret void
}
define weak hidden void @foo_ext_hidden_weak_def() { ; (3)
entry:
ret void
}
define weak protected void @foo_ext_protected_weak_def() { ; (3)
entry:
ret void
}
define internal void @foo_static() {
entry:
ret void
}
@foo = ifunc void (...), ptr @resolve_foo
@x = global i32 0, align 4
@switch.table.bar = private unnamed_addr constant [6 x ptr] [ptr @foo_ext_hidden_decl, ptr @foo_ext_hidden_def, ptr @foo_ext_hidden_weak_def, ptr @foo_ext_protected_decl, ptr @foo_ext_protected_def, ptr @foo_ext_protected_weak_def], align 4
define internal nonnull ptr @resolve_foo() {
entry:
%x = load i32, ptr @x, align 4
%0 = icmp ult i32 %x, 6
br i1 %0, label %switch.lookup, label %return
switch.lookup: ; preds = %entry
%switch.gep = getelementptr inbounds nuw ptr, ptr @switch.table.bar, i32 %x
%switch.load = load ptr, ptr %switch.gep, align 4
br label %return
return: ; preds = %entry, %switch.lookup
%retval.0 = phi ptr [ %switch.load, %switch.lookup ], [ @foo_static, %entry ]
ret ptr %retval.0
}