mirror of
https://github.com/Gericom/teak-llvm.git
synced 2025-06-19 11:35:51 -04:00

Multi-versioned functions defined by cpu_dispatch and implemented with IFunc can not be called outside the translation units where they are defined due to lack of symbols. This patch add function aliases for these functions and thus make them visible outside. Differential Revision: https://reviews.llvm.org/D67058 Patch by Senran Zhang llvm-svn: 371586
30 lines
929 B
C++
30 lines
929 B
C++
// RUN: %clang_cc1 -std=c++11 -triple x86_64-linux-gnu -fmodules -emit-llvm %s -o - | FileCheck %s
|
|
#pragma clang module build A
|
|
module A {}
|
|
#pragma clang module contents
|
|
#pragma clang module begin A
|
|
__attribute__((target("default"))) void f();
|
|
__attribute__((target("sse4.2"))) void f();
|
|
#pragma clang module end
|
|
#pragma clang module endbuild
|
|
|
|
#pragma clang module build B
|
|
module B {}
|
|
#pragma clang module contents
|
|
#pragma clang module begin B
|
|
__attribute__((target("default"))) void f();
|
|
__attribute__((target("sse4.2"))) void f();
|
|
#pragma clang module end
|
|
#pragma clang module endbuild
|
|
|
|
#pragma clang module import A
|
|
#pragma clang module import B
|
|
void g() { f(); }
|
|
|
|
// Negative tests to validate that the resolver only calls each 1x.
|
|
// CHECK: define weak_odr void ()* @_Z1fv.resolver
|
|
// CHECK: ret void ()* @_Z1fv.sse4.2
|
|
// CHECK-NOT: ret void ()* @_Z1fv.sse4.2
|
|
// CHECK: ret void ()* @_Z1fv
|
|
// CHECK-NOT: ret void ()* @_Z1fv
|