1aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// RUN: %clang_cc1 -Oz -emit-llvm %s -o - | FileCheck %s -check-prefix=Oz
2aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// RUN: %clang_cc1 -O0 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
3aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// RUN: %clang_cc1 -O1 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
4aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// RUN: %clang_cc1 -O2 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
5aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// RUN: %clang_cc1 -O3 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
6aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// RUN: %clang_cc1 -Os -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
7aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Check that we set the minsize attribute on each function
8aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// when Oz optimization level is set.
9aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
103bba3efba0e57071d60b355ed62639f93e37711cBill Wendling__attribute__((minsize))
11aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetint test1() {
12aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet  return 42;
133bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: @{{.*}}test1{{.*}}[[MINSIZE:#[0-9]+]]
143bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER: @{{.*}}test1{{.*}}[[MS:#[0-9]+]]
15aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet}
16aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
17aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetint test2() {
18aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet  return 42;
193bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: @{{.*}}test2{{.*}}[[MINSIZE]]
20aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Oz: ret
21aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// OTHER: @{{.*}}test2
223bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER-NOT: [[MS]]
23aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// OTHER: ret
24aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet}
25aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
26aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetint test3() {
27aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet  return 42;
283bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: @{{.*}}test3{{.*}}[[MINSIZE]]
293bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: ret
303bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER: @{{.*}}test3
313bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER-NOT: [[MS]]
323bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER: ret
33aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet}
34aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
35aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Check that the minsize attribute is well propagated through
36aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// template instantiation
37aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
38aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombettemplate<typename T>
39aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet__attribute__((minsize))
40aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetvoid test4(T arg) {
41aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet  return;
42aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet}
43aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
44aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombettemplate
45aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetvoid test4<int>(int arg);
46aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Oz: define{{.*}}void @{{.*}}test4
473bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: [[MINSIZE]]
48aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// OTHER: define{{.*}}void @{{.*}}test4
493bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER: [[MS]]
50aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
51aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombettemplate
52aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetvoid test4<float>(float arg);
53aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Oz: define{{.*}}void @{{.*}}test4
543bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: [[MINSIZE]]
55aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// OTHER: define{{.*}}void @{{.*}}test4
563bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER: [[MS]]
57aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
58aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombettemplate<typename T>
59aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetvoid test5(T arg) {
60aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet  return;
61aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet}
62aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
63aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombettemplate
64aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetvoid test5<int>(int arg);
65aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Oz: define{{.*}}void @{{.*}}test5
663bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: [[MINSIZE]]
67aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// OTHER: define{{.*}}void @{{.*}}test5
683bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER-NOT: define{{.*}}void @{{.*}}test5{{.*}}[[MS]]
69aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet
70aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombettemplate
71aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombetvoid test5<float>(float arg);
72aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// Oz: define{{.*}}void @{{.*}}test5
733bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: [[MINSIZE]]
74aee56faf90c04a75d9c432a92a8fdd2c875559a7Quentin Colombet// OTHER: define{{.*}}void @{{.*}}test5
753bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER-NOT: define{{.*}}void @{{.*}}test5{{.*}}[[MS]]
76f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling
773bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// Oz: attributes [[MINSIZE]] = { minsize{{.*}} }
78f7a9da053f5bd6c18450c1796d953b42c3b7ad3aBill Wendling
793bba3efba0e57071d60b355ed62639f93e37711cBill Wendling// OTHER: attributes [[MS]] = { minsize nounwind{{.*}} }
80