| ; 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 | |
| } | |