blob: 5df9a927cf8d0c56617371964b282b0eab22e641 [file] [log] [blame]
Erich Keane281d20b2018-01-08 21:34:17 +00001// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm %s -o - | FileCheck %s
2int __attribute__((target("sse4.2"))) foo(int i) { return 0; }
3int __attribute__((target("arch=sandybridge"))) foo(int);
4int __attribute__((target("arch=ivybridge"))) foo(int i) {return 1;}
5int __attribute__((target("default"))) foo(int i) { return 2; }
6
7typedef int (*FuncPtr)(int);
8void func(FuncPtr);
9
10int bar() {
11 func(foo);
12 FuncPtr Free = &foo;
13 FuncPtr Free2 = foo;
14
15 return 0;
16 return Free(1) + Free(2);
17}
18
19// CHECK: @foo.ifunc = ifunc i32 (i32), i32 (i32)* ()* @foo.resolver
20// CHECK: define i32 @foo.sse4.2(
21// CHECK: ret i32 0
22// CHECK: define i32 @foo.arch_ivybridge(
23// CHECK: ret i32 1
24// CHECK: define i32 @foo(
25// CHECK: ret i32 2
26
27// CHECK: define i32 @bar()
28// CHECK: call void @func(i32 (i32)* @foo.ifunc)
29// CHECK: store i32 (i32)* @foo.ifunc
30// CHECK: store i32 (i32)* @foo.ifunc
31
32// CHECK: declare i32 @foo.arch_sandybridge(