]> granicus.if.org Git - clang/commitdiff
Pass in frame pointer omitting compiler flags for CloudABI as well.
authorEd Schouten <ed@nuxi.nl>
Thu, 11 Aug 2016 19:23:30 +0000 (19:23 +0000)
committerEd Schouten <ed@nuxi.nl>
Thu, 11 Aug 2016 19:23:30 +0000 (19:23 +0000)
On Linux we pass in -fomit-frame-pointer flags (and similar)
automatically if optimization is enabled. Let's do the same thing on
CloudABI. Without this, Clang seems to run out of registers quite
quickly while trying to build code with inline assembly.

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

lib/Driver/Tools.cpp
test/Driver/frame-pointer-elim.c

index 141d12e9a2f59bd116925e4534443217fc82354b..6011a7fa31af3213e44bf2b8e1f59477dc7f9ab0 100644 (file)
@@ -3242,7 +3242,7 @@ static bool shouldUseFramePointerForTarget(const ArgList &Args,
     break;
   }
 
-  if (Triple.isOSLinux()) {
+  if (Triple.isOSLinux() || Triple.getOS() == llvm::Triple::CloudABI) {
     switch (Triple.getArch()) {
     // Don't use a frame pointer on linux if optimizing for certain targets.
     case llvm::Triple::mips64:
index 5355cbe3a364d12e921a0a847711a15864251f13..139c0ccb952a6d8db0840d4af9338800f983bb24 100644 (file)
@@ -8,6 +8,15 @@
 // RUN:   FileCheck --check-prefix=LINUX %s
 // LINUX-NOT: "-momit-leaf-frame-pointer"
 
+// CloudABI follows the same rules as Linux.
+// RUN: %clang -### -target x86_64-unknown-cloudabi -S -O1 %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=CLOUDABI-OPT %s
+// CLOUDABI-OPT: "-momit-leaf-frame-pointer"
+
+// RUN: %clang -### -target x86_64-unknown-cloudabi -S %s 2>&1 | \
+// RUN:   FileCheck --check-prefix=CLOUDABI %s
+// CLOUDABI-NOT: "-momit-leaf-frame-pointer"
+
 // Darwin disables omitting the leaf frame pointer even under optimization
 // unless the command lines are given.
 // RUN: %clang -### -target i386-apple-darwin -S %s 2>&1 | \