llvm-project/clang/test/CodeGen/attr-minsize.cpp
David Blaikie 6267684a18 Make some tests LLVM-optimization agnostic and remove some others that were beyond value/repair
Several of these tests (the two deleted, and the one removal edit) were
relying on the optimizer to collapse things to test some frontend
feature. The tests were really old and features seemed amply covered by
other parts of the test suite, so I just removed them.

If anyone thinks they're valuable enough to keep/fix, we can play around
with that, for sure.

(inspired by r252872)

llvm-svn: 253114
2015-11-14 01:10:38 +00:00

80 lines
2.1 KiB
C++

// RUN: %clang_cc1 -Oz -disable-llvm-optzns -emit-llvm %s -o - | FileCheck %s -check-prefix=Oz
// RUN: %clang_cc1 -disable-llvm-optzns -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O1 -disable-llvm-optzns -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O2 -disable-llvm-optzns -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -O3 -disable-llvm-optzns -emit-llvm %s -o - | FileCheck %s -check-prefix=OTHER
// RUN: %clang_cc1 -Os -disable-llvm-optzns -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 nounwind{{.*}} }