// RUN: %clang_cc1 -Oz -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=Oz
// RUN: %clang_cc1     -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O2 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O3 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -Os -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// Check that we set the minsize attribute on each function
// when Oz optimization level is set.

__attribute__((minsize))
int test1() {
  return 42;
// Oz: @{{.*}}test1{{.*}}[[MINSIZE:#[0-9]+]]
// OTHER: @{{.*}}test1{{.*}}[[MS:#[0-9]+]]
}

int test2() {
  return 42;
// Oz: @{{.*}}test2{{.*}}[[MINSIZE]]
// Oz: ret
// OTHER: @{{.*}}test2
// OTHER-NOT: [[MS]]
// OTHER: ret
}

int test3() {
  return 42;
// Oz: @{{.*}}test3{{.*}}[[MINSIZE]]
// Oz: ret
// OTHER: @{{.*}}test3
// OTHER-NOT: [[MS]]
// OTHER: ret
}

// Check that the minsize attribute is well propagated through
// template instantiation

template<typename T>
__attribute__((minsize))
void test4(T arg) {
  return;
}

template
void test4<int>(int arg);
// Oz: define{{.*}}void @{{.*}}test4
// Oz: [[MINSIZE]]
// OTHER: define{{.*}}void @{{.*}}test4
// OTHER: [[MS]]

template
void test4<float>(float arg);
// Oz: define{{.*}}void @{{.*}}test4
// Oz: [[MINSIZE]]
// OTHER: define{{.*}}void @{{.*}}test4
// OTHER: [[MS]]

template<typename T>
void test5(T arg) {
  return;
}

template
void test5<int>(int arg);
// Oz: define{{.*}}void @{{.*}}test5
// Oz: [[MINSIZE]]
// OTHER: define{{.*}}void @{{.*}}test5
// OTHER-NOT: define{{.*}}void @{{.*}}test5{{.*}}[[MS]]

template
void test5<float>(float arg);
// Oz: define{{.*}}void @{{.*}}test5
// Oz: [[MINSIZE]]
// OTHER: define{{.*}}void @{{.*}}test5
// OTHER-NOT: define{{.*}}void @{{.*}}test5{{.*}}[[MS]]

// Oz: attributes [[MINSIZE]] = { minsize{{.*}} }

// OTHER: attributes [[MS]] = { minsize{{.*}} }
