From 3f3335dbc30fbcd71b295d248cd3d5f6d94ce3fb Mon Sep 17 00:00:00 2001 From: Chad Rosier Date: Wed, 29 Feb 2012 20:14:59 +0000 Subject: [PATCH] Allocate TargetLibraryInfo for the CodeGen passes. Otherwise, it's instantiated by the BAA pass, which uses the default TargetLibraryInfo constructor. Unfortunately, the default TargetLibraryInfo constructor assumes all library calls are available and thus ignores -fno-builtin. rdar://10947759 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@151745 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/BackendUtil.cpp | 6 ++++++ test/CodeGen/libcalls-fno-builtin.c | 27 +++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 test/CodeGen/libcalls-fno-builtin.c diff --git a/lib/CodeGen/BackendUtil.cpp b/lib/CodeGen/BackendUtil.cpp index d175bd5e08..d9bdc325c1 100644 --- a/lib/CodeGen/BackendUtil.cpp +++ b/lib/CodeGen/BackendUtil.cpp @@ -351,6 +351,12 @@ bool EmitAssemblyHelper::AddEmitPasses(BackendAction Action, // Create the code generator passes. PassManager *PM = getCodeGenPasses(); + // Add LibraryInfo. + TargetLibraryInfo *TLI = new TargetLibraryInfo(); + if (!CodeGenOpts.SimplifyLibCalls) + TLI->disableAllFunctions(); + PM->add(TLI); + // Normal mode, emit a .s or .o file by running the code generator. Note, // this also adds codegenerator level optimization passes. TargetMachine::CodeGenFileType CGFT = TargetMachine::CGFT_AssemblyFile; diff --git a/test/CodeGen/libcalls-fno-builtin.c b/test/CodeGen/libcalls-fno-builtin.c new file mode 100644 index 0000000000..41f0b38c67 --- /dev/null +++ b/test/CodeGen/libcalls-fno-builtin.c @@ -0,0 +1,27 @@ +// RUN: %clang_cc1 -S -O3 -fno-builtin -o - %s | FileCheck %s + +double ceil(double x); +double copysign(double,double); +double cos(double x); +double fabs(double x); +double floor(double x); + +double t1(double x) { return ceil(x); } +// CHECK: t1 +// CHECK: ceil + +double t2(double x, double y) { return copysign(x,y); } +// CHECK: t2 +// CHECK: copysign + +double t3(double x) { return cos(x); } +// CHECK: t3 +// CHECK: cos + +double t4(double x) { return fabs(x); } +// CHECK: t4 +// CHECK: fabs + +double t5(double x) { return floor(x); } +// CHECK: t5 +// CHECK: floor -- 2.50.1