From 9e4da07125504a0886fc7c224d233d317643d267 Mon Sep 17 00:00:00 2001 From: Ed Schouten Date: Thu, 11 Aug 2016 19:23:30 +0000 Subject: [PATCH] Pass in frame pointer omitting compiler flags for CloudABI as well. 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. llvm-svn: 278393 --- clang/lib/Driver/Tools.cpp | 2 +- clang/test/Driver/frame-pointer-elim.c | 9 +++++++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/clang/lib/Driver/Tools.cpp b/clang/lib/Driver/Tools.cpp index 141d12e..6011a7f 100644 --- a/clang/lib/Driver/Tools.cpp +++ b/clang/lib/Driver/Tools.cpp @@ -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: diff --git a/clang/test/Driver/frame-pointer-elim.c b/clang/test/Driver/frame-pointer-elim.c index 5355cbe..139c0cc 100644 --- a/clang/test/Driver/frame-pointer-elim.c +++ b/clang/test/Driver/frame-pointer-elim.c @@ -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 | \ -- 2.7.4