// RUN: %clang_cc1 -triple x86_64-linux-gnu -emit-llvm %s -o - | FileCheck %s --check-prefix=LINUX
// RUN: %clang_cc1 -triple x86_64-apple-macos -emit-llvm %s -o - | FileCheck %s --check-prefix=LINUX
// RUN: %clang_cc1 -triple x86_64-windows-pc -emit-llvm %s -o - | FileCheck %s --check-prefix=WINDOWS
int __attribute__((target("sse4.2"))) foo(int i) { return 0; }
int __attribute__((target("arch=sandybridge"))) foo(int);
int __attribute__((target("arch=ivybridge"))) foo(int i) {return 1;}
int __attribute__((target("default"))) foo(int i) { return 2; }

typedef int (*FuncPtr)(int);
void func(FuncPtr);

int bar(void) {
  func(foo);
  FuncPtr Free = &foo;
  FuncPtr Free2 = foo;

  return 0;
  return Free(1) + Free(2);
}

// LINUX: @foo.ifunc = weak_odr ifunc i32 (i32), ptr @foo.resolver
// LINUX: define{{.*}} i32 @foo.sse4.2(
// LINUX: ret i32 0
// LINUX: define{{.*}} i32 @foo.arch_ivybridge(
// LINUX: ret i32 1
// LINUX: define{{.*}} i32 @foo(
// LINUX: ret i32 2

// WINDOWS: define dso_local i32 @foo.sse4.2(
// WINDOWS: ret i32 0
// WINDOWS: define dso_local i32 @foo.arch_ivybridge(
// WINDOWS: ret i32 1
// WINDOWS: define dso_local i32 @foo(
// WINDOWS: ret i32 2

// LINUX: define{{.*}} i32 @bar()
// LINUX: call void @func(ptr noundef @foo.ifunc)
// LINUX: store ptr @foo.ifunc
// LINUX: store ptr @foo.ifunc

// WINDOWS: define dso_local i32 @bar()
// WINDOWS: call void @func(ptr noundef @foo.resolver)
// WINDOWS: store ptr @foo.resolver
// WINDOWS: store ptr @foo.resolver

// LINUX: declare i32 @foo.arch_sandybridge(

// WINDOWS: declare dso_local i32 @foo.arch_sandybridge(
