kernigh created this revision. kernigh added reviewers: joerg, brad, cfe-commits. Herald added subscribers: jsji, krytarowski, nemanjai. Herald added a project: clang.
This enables -fomit-frame-pointer when optimizing code for all PowerPC targets, instead of only Linux and NetBSD. I mailed this patch to cfe-commits earlier this week. Roman Lebedev and Hal Finkel pointed me to Phabricator; this is my first attempt to use Phabricator. My earlier mail wrote: > The attached patch is for clang to use -fomit-frame-pointer by default > for all PowerPC targets when optimizing code. Right now, clang uses > -fomit-frame-pointer for PowerPC Linux and NetBSD but not for other > targets. I have been running `clang -target powerpc-openbsd`. > > The patch is for llvm-project.git master. I previously posted this > patch to https://bugs.llvm.org/show_bug.cgi?id=41094 , but the patch > in this email is for a newer revision of master. > > In most functions, the frame pointer in r31 is an unnecessary extra > copy of the stack pointer in r1. GCC is using -fomit-frame-pointer by > default (in my PowerPC machine running OpenBSD/macppc); I want Clang > to be at least as good as GCC. Also, this patch helps me to compare > the output of `clang -target powerpc-openbsd -O2 -S` with the output > for Linux or NetBSD. In bug 41094, I showed how -fomit-frame-pointer > simplifies the C function `void nothing(void) {}`. Repository: rC Clang https://reviews.llvm.org/D60335 Files: clang/lib/Driver/ToolChains/Clang.cpp Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -523,8 +523,12 @@ // XCore never wants frame pointers, regardless of OS. // WebAssembly never wants frame pointers. return false; + case llvm::Triple::ppc: + case llvm::Triple::ppc64: + case llvm::Triple::ppc64le: case llvm::Triple::riscv32: case llvm::Triple::riscv64: + // PowerPC's frame pointer is often an extra copy of the stack pointer. return !areOptimizationsEnabled(Args); default: break; @@ -542,9 +546,6 @@ case llvm::Triple::mips64el: case llvm::Triple::mips: case llvm::Triple::mipsel: - case llvm::Triple::ppc: - case llvm::Triple::ppc64: - case llvm::Triple::ppc64le: case llvm::Triple::systemz: case llvm::Triple::x86: case llvm::Triple::x86_64:
Index: clang/lib/Driver/ToolChains/Clang.cpp =================================================================== --- clang/lib/Driver/ToolChains/Clang.cpp +++ clang/lib/Driver/ToolChains/Clang.cpp @@ -523,8 +523,12 @@ // XCore never wants frame pointers, regardless of OS. // WebAssembly never wants frame pointers. return false; + case llvm::Triple::ppc: + case llvm::Triple::ppc64: + case llvm::Triple::ppc64le: case llvm::Triple::riscv32: case llvm::Triple::riscv64: + // PowerPC's frame pointer is often an extra copy of the stack pointer. return !areOptimizationsEnabled(Args); default: break; @@ -542,9 +546,6 @@ case llvm::Triple::mips64el: case llvm::Triple::mips: case llvm::Triple::mipsel: - case llvm::Triple::ppc: - case llvm::Triple::ppc64: - case llvm::Triple::ppc64le: case llvm::Triple::systemz: case llvm::Triple::x86: case llvm::Triple::x86_64:
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits