]> granicus.if.org Git - clang/commitdiff
[WebAssembly] Enable -ffunction-sections and -fdata-sections by default.
authorDan Gohman <dan433584@gmail.com>
Thu, 7 Jan 2016 00:50:27 +0000 (00:50 +0000)
committerDan Gohman <dan433584@gmail.com>
Thu, 7 Jan 2016 00:50:27 +0000 (00:50 +0000)
These remain user-overridable with -fno-function-sections and
-fno-data-sections.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@257005 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Driver/Tools.cpp
test/Driver/wasm-toolchain.c

index 0236e613a37ead0ddf3c010b0580601552132ffc..158499124092531ff77e22aeb3d33beef83f1627 100644 (file)
@@ -4176,8 +4176,11 @@ void Clang::ConstructJob(Compilation &C, const JobAction &JA,
     CmdArgs.push_back("-generate-type-units");
   }
 
-  // CloudABI uses -ffunction-sections and -fdata-sections by default.
-  bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI;
+  // CloudABI and WebAssembly use -ffunction-sections and -fdata-sections by
+  // default.
+  bool UseSeparateSections = Triple.getOS() == llvm::Triple::CloudABI ||
+                             Triple.getArch() == llvm::Triple::wasm32 ||
+                             Triple.getArch() == llvm::Triple::wasm64;
 
   if (Args.hasFlag(options::OPT_ffunction_sections,
                    options::OPT_fno_function_sections, UseSeparateSections)) {
@@ -6536,7 +6539,9 @@ void wasm::Linker::ConstructJob(Compilation &C, const JobAction &JA,
   CmdArgs.push_back("ld");
 
   // Enable garbage collection of unused input sections by default, since code
-  // size is of particular importance.
+  // size is of particular importance. This is significantly facilitated by
+  // the enabling of -ffunction-sections and -fdata-sections in
+  // Clang::ConstructJob.
   if (areOptimizationsEnabled(Args))
     CmdArgs.push_back("--gc-sections");
 
index 82c0c5828be5836422461d9563dfa2454545ee27..3acacd23de6b5ae574ee45ebb87e8a74935890a5 100644 (file)
@@ -1,7 +1,19 @@
 // A basic clang -cc1 command-line.
 
 // RUN: %clang %s -### -target wasm32-unknown-unknown 2>&1 | FileCheck -check-prefix=CC1 %s
-// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}}
+// CC1: clang{{.*}} "-cc1" "-triple" "wasm32-unknown-unknown" {{.*}} "-ffunction-sections" "-fdata-sections"
+
+// Ditto, but ensure that a user -fno-function-sections disables the
+// default -ffunction-sections.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown -fno-function-sections 2>&1 | FileCheck -check-prefix=NO_FUNCTION_SECTIONS %s
+// NO_FUNCTION_SECTIONS-NOT: function-sections
+
+// Ditto, but ensure that a user -fno-data-sections disables the
+// default -fdata-sections.
+
+// RUN: %clang %s -### -target wasm32-unknown-unknown -fno-data-sections 2>&1 | FileCheck -check-prefix=NO_DATA_SECTIONS %s
+// NO_DATA_SECTIONS-NOT: data-sections
 
 // A basic C link command-line.