1 // RUN: %clang_cc1 -Oz -emit-llvm %s -o - | FileCheck %s -check-prefix=Oz 2 // RUN: %clang_cc1 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER 3 // RUN: %clang_cc1 -O1 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER 4 // RUN: %clang_cc1 -O2 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER 5 // RUN: %clang_cc1 -O3 -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER 6 // RUN: %clang_cc1 -Os -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. 9 10 __attribute__((minsize)) 11 int test1() { 12 return 42; 13 // Oz: @{{.*}}test1{{.*}}[[MINSIZE:#[0-9]+]] 14 // OTHER: @{{.*}}test1{{.*}}[[MS:#[0-9]+]] 15 } 16 17 int test2() { 18 return 42; 19 // Oz: @{{.*}}test2{{.*}}[[MINSIZE]] 20 // Oz: ret 21 // OTHER: @{{.*}}test2 22 // OTHER-NOT: [[MS]] 23 // OTHER: ret 24 } 25 26 int test3() { 27 return 42; 28 // Oz: @{{.*}}test3{{.*}}[[MINSIZE]] 29 // Oz: ret 30 // OTHER: @{{.*}}test3 31 // OTHER-NOT: [[MS]] 32 // OTHER: ret 33 } 34 35 // Check that the minsize attribute is well propagated through 36 // template instantiation 37 38 template<typename T> 39 __attribute__((minsize)) 40 void test4(T arg) { 41 return; 42 } 43 44 template 45 void test4<int>(int arg); 46 // Oz: define{{.*}}void @{{.*}}test4 47 // Oz: [[MINSIZE]] 48 // OTHER: define{{.*}}void @{{.*}}test4 49 // OTHER: [[MS]] 50 51 template 52 void test4<float>(float arg); 53 // Oz: define{{.*}}void @{{.*}}test4 54 // Oz: [[MINSIZE]] 55 // OTHER: define{{.*}}void @{{.*}}test4 56 // OTHER: [[MS]] 57 58 template<typename T> 59 void test5(T arg) { 60 return; 61 } 62 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]] 69 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]] 76 77 // Oz: attributes [[MINSIZE]] = { minsize{{.*}} } 78 79 // OTHER: attributes [[MS]] = { minsize nounwind{{.*}} } 80