brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.6 KiB · e07ad6a Raw
49 lines · c
1// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=LINUX2// RUN: %clang_cc1 -triple x86_64-apple-macos -emit-llvm %s -o - | FileCheck %s --check-prefix=LINUX3// RUN: %clang_cc1 -triple x86_64-windows-pc -emit-llvm %s -o - | FileCheck %s --check-prefix=WINDOWS4int __attribute__((target("sse4.2"))) foo(int i) { return 0; }5int __attribute__((target("arch=sandybridge"))) foo(int);6int __attribute__((target("arch=ivybridge"))) foo(int i) {return 1;}7int __attribute__((target("default"))) foo(int i) { return 2; }8 9typedef int (*FuncPtr)(int);10void func(FuncPtr);11 12int bar(void) {13  func(foo);14  FuncPtr Free = &foo;15  FuncPtr Free2 = foo;16 17  return 0;18  return Free(1) + Free(2);19}20 21// LINUX: @foo.ifunc = weak_odr ifunc i32 (i32), ptr @foo.resolver22// LINUX: define{{.*}} i32 @foo.sse4.2(23// LINUX: ret i32 024// LINUX: define{{.*}} i32 @foo.arch_ivybridge(25// LINUX: ret i32 126// LINUX: define{{.*}} i32 @foo(27// LINUX: ret i32 228 29// WINDOWS: define dso_local i32 @foo.sse4.2(30// WINDOWS: ret i32 031// WINDOWS: define dso_local i32 @foo.arch_ivybridge(32// WINDOWS: ret i32 133// WINDOWS: define dso_local i32 @foo(34// WINDOWS: ret i32 235 36// LINUX: define{{.*}} i32 @bar()37// LINUX: call void @func(ptr noundef @foo.ifunc)38// LINUX: store ptr @foo.ifunc39// LINUX: store ptr @foo.ifunc40 41// WINDOWS: define dso_local i32 @bar()42// WINDOWS: call void @func(ptr noundef @foo.resolver)43// WINDOWS: store ptr @foo.resolver44// WINDOWS: store ptr @foo.resolver45 46// LINUX: declare i32 @foo.arch_sandybridge(47 48// WINDOWS: declare dso_local i32 @foo.arch_sandybridge(49