1437358beSMircea Trofin // Ensure calling bypassing the driver with -fembed-bitcode embeds bitcode pre-
2437358beSMircea Trofin // optimizations
3437358beSMircea Trofin // REQUIRES: x86-registered-target
4437358beSMircea Trofin // RUN: %clang_cc1 %s -O2 -emit-obj -triple=x86_64-unknown-linux-gnu -o %t.o -fembed-bitcode=all
5437358beSMircea Trofin // RUN: llvm-objcopy --dump-section=.llvmbc=%t.bc %t.o /dev/null
6437358beSMircea Trofin 
7437358beSMircea Trofin // Also check that the .llvmcmd section captures the optimization options.
8437358beSMircea Trofin // RUN: llvm-dis %t.bc -o - | FileCheck %s --check-prefix=CHECK-BC
9437358beSMircea Trofin // RUN: llvm-objcopy --dump-section=.llvmcmd=- %t.o /dev/null | FileCheck %s --check-prefix=CHECK-CMD
10437358beSMircea Trofin 
11fd739804SFangrui Song // CHECK-BC-LABEL: define{{.*}} void @bar() #0 {
12437358beSMircea Trofin // CHECK-BC-NEXT: entry:
13437358beSMircea Trofin // CHECK-BC-NEXT: ret void
14437358beSMircea Trofin // CHECK-BC-NEXT: }
15fd739804SFangrui Song // CHECK-BC-LABEL: define{{.*}} void @foo() #1 {
16437358beSMircea Trofin // CHECK-BC-NEXT: entry:
17437358beSMircea Trofin // CHECK-BC-NEXT: call void @bar()
18437358beSMircea Trofin // CHECK-BC-NEXT: ret void
19437358beSMircea Trofin // CHECK-BC-NEXT: }
20437358beSMircea Trofin // CHECK-BC-LABEL: attributes #0 = {{.*}} alwaysinline
21437358beSMircea Trofin // CHECK-CMD: -O2
22437358beSMircea Trofin 
bar(void)23*7de71613SAaron Ballman __attribute__((always_inline)) void bar(void) {
24437358beSMircea Trofin   return;
25437358beSMircea Trofin }
26437358beSMircea Trofin 
foo(void)27*7de71613SAaron Ballman void foo(void) {
28437358beSMircea Trofin   bar();
29437358beSMircea Trofin   return;
30437358beSMircea Trofin }
31