[clang] Implement lifetime analysis for lifetime_capture_by(X) (#115921)
[llvm-project.git] / clang / test / CodeGen / attr-minsize.cpp
blob4a26e856ff9ed3d8827feb154f09c7a2be9098d7
1 // RUN: %clang_cc1 -Oz -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=Oz
2 // RUN: %clang_cc1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
3 // RUN: %clang_cc1 -O1 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
4 // RUN: %clang_cc1 -O2 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
5 // RUN: %clang_cc1 -O3 -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
6 // RUN: %clang_cc1 -Os -disable-llvm-passes -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
7 // Check that we set the minsize attribute on each function
8 // when Oz optimization level is set.
10 __attribute__((minsize))
11 int test1() {
12 return 42;
13 // Oz: @{{.*}}test1{{.*}}[[MINSIZE:#[0-9]+]]
14 // OTHER: @{{.*}}test1{{.*}}[[MS:#[0-9]+]]
17 int test2() {
18 return 42;
19 // Oz: @{{.*}}test2{{.*}}[[MINSIZE]]
20 // Oz: ret
21 // OTHER: @{{.*}}test2
22 // OTHER-NOT: [[MS]]
23 // OTHER: ret
26 int test3() {
27 return 42;
28 // Oz: @{{.*}}test3{{.*}}[[MINSIZE]]
29 // Oz: ret
30 // OTHER: @{{.*}}test3
31 // OTHER-NOT: [[MS]]
32 // OTHER: ret
35 // Check that the minsize attribute is well propagated through
36 // template instantiation
38 template<typename T>
39 __attribute__((minsize))
40 void test4(T arg) {
41 return;
44 template
45 void test4<int>(int arg);
46 // Oz: define{{.*}}void @{{.*}}test4
47 // Oz: [[MINSIZE]]
48 // OTHER: define{{.*}}void @{{.*}}test4
49 // OTHER: [[MS]]
51 template
52 void test4<float>(float arg);
53 // Oz: define{{.*}}void @{{.*}}test4
54 // Oz: [[MINSIZE]]
55 // OTHER: define{{.*}}void @{{.*}}test4
56 // OTHER: [[MS]]
58 template<typename T>
59 void test5(T arg) {
60 return;
63 template
64 void test5<int>(int arg);
65 // Oz: define{{.*}}void @{{.*}}test5
66 // Oz: [[MINSIZE]]
67 // OTHER: define{{.*}}void @{{.*}}test5
68 // OTHER-NOT: define{{.*}}void @{{.*}}test5{{.*}}[[MS]]
70 template
71 void test5<float>(float arg);
72 // Oz: define{{.*}}void @{{.*}}test5
73 // Oz: [[MINSIZE]]
74 // OTHER: define{{.*}}void @{{.*}}test5
75 // OTHER-NOT: define{{.*}}void @{{.*}}test5{{.*}}[[MS]]
77 // Oz: attributes [[MINSIZE]] = { minsize{{.*}} }
79 // OTHER: attributes [[MS]] = { minsize{{.*}} }