This revision was automatically updated to reflect the committed changes. Closed by commit rG8eda71616fec: [Clang][A32/T32][Linux] -O1 implies -fomit-frame-pointer (authored by nickdesaulniers).
Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D80828/new/ https://reviews.llvm.org/D80828 Files: clang/lib/Basic/Targets/ARM.cpp clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/frame-pointer-elim.c llvm/docs/ReleaseNotes.rst
Index: llvm/docs/ReleaseNotes.rst =================================================================== --- llvm/docs/ReleaseNotes.rst +++ llvm/docs/ReleaseNotes.rst @@ -91,6 +91,12 @@ * Implemented C-language intrinsics ``<arm_cde.h>`` for the CDE instruction set. +* Clang now defaults to ``-fomit-frame-pointer`` when targeting non-Android + Linux for arm and thumb when optimizations are enabled. Users that were + previously not specifying a value and relying on the implicit compiler + default may wish to specify ``-fno-omit-frame-pointer`` to get the old + behavior. This improves compatibility with GCC. + Changes to the MIPS Target -------------------------- Index: clang/test/Driver/frame-pointer-elim.c =================================================================== --- clang/test/Driver/frame-pointer-elim.c +++ clang/test/Driver/frame-pointer-elim.c @@ -103,5 +103,33 @@ // RUN: %clang -### -target powerpc64 -S -O1 %s 2>&1 | \ // RUN: FileCheck --check-prefix=KEEP-NONE %s +// For AAarch32 (A32, T32) linux targets, default omit frame pointer when +// optimizations are enabled. +// RUN: %clang -### -target arm-linux-gnueabihf- -marm -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target arm-linux-gnueabihf- -mthumb -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target arm-linux-gnueabihf- -marm -mbig-endian -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target arm-linux-gnueabihf- -mthumb -mbig-endian -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target arm-linux-gnueabihf- -marm -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NONE %s +// RUN: %clang -### -target arm-linux-gnueabihf- -mthumb -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NONE %s +// RUN: %clang -### -target arm-linux-gnueabihf- -marm -mbig-endian -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NONE %s +// RUN: %clang -### -target arm-linux-gnueabihf- -mthumb -mbig-endian -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NONE %s +// For Android, keep the framepointers always. +// RUN: %clang -### -target armv7a-linux-androideabi- -marm -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target armv7a-linux-androideabi- -mthumb -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target armv7a-linux-androideabi- -marm -mbig-endian -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s +// RUN: %clang -### -target armv7a-linux-androideabi- -mthumb -mbig-endian -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-ALL %s + void f0() {} void f1() { f0(); } Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -7,6 +7,7 @@ //===----------------------------------------------------------------------===// #include "Clang.h" +#include "AMDGPU.h" #include "Arch/AArch64.h" #include "Arch/ARM.h" #include "Arch/Mips.h" @@ -15,11 +16,10 @@ #include "Arch/Sparc.h" #include "Arch/SystemZ.h" #include "Arch/X86.h" -#include "AMDGPU.h" #include "CommonArgs.h" #include "Hexagon.h" -#include "MSP430.h" #include "InputInfo.h" +#include "MSP430.h" #include "PS4CPU.h" #include "clang/Basic/CharInfo.h" #include "clang/Basic/CodeGenOptions.h" @@ -35,6 +35,7 @@ #include "llvm/Config/llvm-config.h" #include "llvm/Option/ArgList.h" #include "llvm/Support/CodeGen.h" +#include "llvm/Support/Compiler.h" #include "llvm/Support/Compression.h" #include "llvm/Support/FileSystem.h" #include "llvm/Support/Path.h" @@ -557,6 +558,13 @@ Triple.isOSHurd()) { switch (Triple.getArch()) { // Don't use a frame pointer on linux if optimizing for certain targets. + case llvm::Triple::arm: + case llvm::Triple::armeb: + case llvm::Triple::thumb: + case llvm::Triple::thumbeb: + if (Triple.isAndroid()) + return true; + LLVM_FALLTHROUGH; case llvm::Triple::mips64: case llvm::Triple::mips64el: case llvm::Triple::mips: Index: clang/lib/Basic/Targets/ARM.cpp =================================================================== --- clang/lib/Basic/Targets/ARM.cpp +++ clang/lib/Basic/Targets/ARM.cpp @@ -314,7 +314,7 @@ // Maximum alignment for ARM NEON data types should be 64-bits (AAPCS) // as well the default alignment - if (IsAAPCS && (Triple.getEnvironment() != llvm::Triple::Android)) + if (IsAAPCS && !Triple.isAndroid()) DefaultAlignForAttributeAligned = MaxVectorAlign = 64; // Do force alignment of members that follow zero length bitfields. If
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits