blob: 8ded0a7d9730ba80a4480365cd1ae8bbf552e52a [file] [log] [blame]
// RUN: %clang_cc1 -O2 -triple x86_64-unknown-linux-gnu -fclangir -emit-cir %s -o %t.cir
// RUN: FileCheck --input-file=%t.cir %s -check-prefix=CIR
// RUN: %clang_cc1 -O2 -triple x86_64-unknown-linux-gnu -fclangir -emit-llvm %s -o %t.ll
// RUN: FileCheck --input-file=%t.ll %s -check-prefix=LLVM
inline int s0(int a, int b) {
int x = a + b;
return x;
}
__attribute__((noinline))
int s1(int a, int b) {
return s0(a,b);
}
__attribute__((always_inline))
int s2(int a, int b) {
return s0(a,b);
}
int s3(int a, int b) {
int x = a + b;
return x;
}
// CIR: #fn_attr = #cir<extra({inline = #cir.inline<hint>, nothrow = #cir.nothrow})>
// CIR: #fn_attr1 = #cir<extra({inline = #cir.inline<no>, nothrow = #cir.nothrow})>
// CIR: #fn_attr2 = #cir<extra({inline = #cir.inline<always>, nothrow = #cir.nothrow})>
// CIR: cir.func linkonce_odr @_Z2s0ii(%arg0:{{.*}}, %arg1:{{.*}} -> {{.*}} extra(#fn_attr)
// CIR: cir.func @_Z2s1ii(%arg0:{{.*}}, %arg1:{{.*}} -> {{.*}} extra(#fn_attr1)
// CIR: cir.func @_Z2s2ii(%arg0:{{.*}}, %arg1:{{.*}} -> {{.*}} extra(#fn_attr2)
// CIR: cir.func @_Z2s3ii(%arg0:{{.*}}, %arg1:{{.*}} -> {{.*}} {
// LLVM: define dso_local i32 @_Z2s1ii(i32 %0, i32 %1) {{.*}} #[[#ATTR1:]]
// LLVM: define dso_local i32 @_Z2s2ii(i32 %0, i32 %1) {{.*}} #[[#ATTR2:]]
// LLVM: attributes #[[#ATTR1]] = {{.*}} noinline
// LLVM: attributes #[[#ATTR2]] = {{.*}} alwaysinline