blob: 8a8031e9eb7f28e435cc4b0d696f7c9cb44da544 [file] [log] [blame] [edit]
; RUN: opt -ppc-prep-ifunc-aix -mtriple=powerpc64-ibm-aix-xcoff %s -S | FileCheck %s -DALIGN=8
; RUN: opt -ppc-prep-ifunc-aix -mtriple=powerpc-ibm-aix-xcoff %s -S | FileCheck %s -DALIGN=4
; CHECK: @__update_foo = private global { ptr, ptr } { ptr @foo, ptr @foo.resolver }, section "__ifunc_sec", align [[ALIGN]]
; CHECK: @__update_bar = private global { ptr, ptr } { ptr @bar, ptr @bar.resolver }, section "__ifunc_sec", align [[ALIGN]]
; CHECK: @foo = ifunc i32 (...), ptr @foo.resolver, !implicit.ref ![[#UPDATE_FOO:]], !implicit.ref ![[#INIT_IFUNC:]]
; CHECK: @bar = ifunc void (i32, i1), ptr @bar.resolver, !implicit.ref ![[#UPDATE_BAR:]], !implicit.ref ![[#INIT_IFUNC]]
; CHECK: declare void @__init_ifuncs()
; CHECK: ![[#UPDATE_FOO]] = !{ptr @__update_foo}
; CHECK: ![[#INIT_IFUNC]] = !{ptr @__init_ifuncs}
; CHECK: ![[#UPDATE_BAR]] = !{ptr @__update_bar}
@foo = ifunc i32 (...), ptr @foo.resolver
@bar = ifunc void (i32, i1), ptr @bar.resolver
define hidden signext i32 @my_foo() {
entry:
ret i32 4
}
define internal ptr @foo.resolver() {
entry:
ret ptr @my_foo
}
declare void @my_bar(i32, i1)
define ptr @bar.resolver() {
entry:
ret ptr @my_bar
}