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