hiraditya created this revision. hiraditya added reviewers: enh, danalbert, pirama, srhines. Herald added subscribers: VincentWu, danielkiss, vkmr, sameer.abuasal, s.egerton, Jim, benna, psnobl, rogfer01, shiva0217, kito-cheng, simoncook, asb, arichardson. Herald added a project: All. hiraditya requested review of this revision. Herald added subscribers: cfe-commits, pcwang-thead, eopXD, MaskRay. Herald added a project: clang.
Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D150490 Files: clang/lib/Driver/ToolChains/Clang.cpp clang/test/Driver/frame-pointer-elim.c clang/test/Driver/frame-pointer.c Index: clang/test/Driver/frame-pointer.c =================================================================== --- clang/test/Driver/frame-pointer.c +++ clang/test/Driver/frame-pointer.c @@ -57,6 +57,12 @@ // RUN: %clang --target=riscv64-unknown-linux-gnu -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK3-64 %s // RUN: %clang --target=riscv64-unknown-linux-gnu -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECKs-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O0 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O1 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O2 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s + // RUN: %clang --target=loongarch32 -### -S -O0 %s -o %t.s 2>&1 | FileCheck -check-prefix=CHECK0-32 %s // RUN: %clang --target=loongarch32 -### -S -O1 %s -o %t.s 2>&1 | FileCheck -check-prefix=CHECK1-32 %s // RUN: %clang --target=loongarch32 -### -S -O2 %s -o %t.s 2>&1 | FileCheck -check-prefix=CHECK2-32 %s @@ -81,3 +87,5 @@ // CHECK3-64-NOT: -mframe-pointer=all // CHECKs-64-NOT: -mframe-pointer=all // CHECK-MACHO-64: -mframe-pointer=all + +// CHECK-ANDROID-64: -mframe-pointer=non-leaf Index: clang/test/Driver/frame-pointer-elim.c =================================================================== --- clang/test/Driver/frame-pointer-elim.c +++ clang/test/Driver/frame-pointer-elim.c @@ -153,6 +153,9 @@ // 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 - +// RUN: %clang -### -target riscv64-linux-android -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NON-LEAF %s +// RUN: %clang -### -target riscv64-linux-android -mbig-endian -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NON-LEAF %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 @@ -420,6 +420,9 @@ if (Args.hasArg(options::OPT_pg) && !Args.hasArg(options::OPT_mfentry)) return true; + if (Triple.isAndroid() && Triple.getArch() == llvm::Triple::riscv64) + return true; + switch (Triple.getArch()) { case llvm::Triple::xcore: case llvm::Triple::wasm32: @@ -515,7 +518,8 @@ bool OmitLeafFP = Args.hasFlag(options::OPT_momit_leaf_frame_pointer, options::OPT_mno_omit_leaf_frame_pointer, - Triple.isAArch64() || Triple.isPS() || Triple.isVE()); + Triple.isAArch64() || Triple.isPS() || Triple.isVE() || + (Triple.isAndroid() && (Triple.getArch() == llvm::Triple::riscv64))); if (NoOmitFP || mustUseNonLeafFramePointerForTarget(Triple) || (!OmitFP && useFramePointerForTargetByDefault(Args, Triple))) { if (OmitLeafFP)
Index: clang/test/Driver/frame-pointer.c =================================================================== --- clang/test/Driver/frame-pointer.c +++ clang/test/Driver/frame-pointer.c @@ -57,6 +57,12 @@ // RUN: %clang --target=riscv64-unknown-linux-gnu -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK3-64 %s // RUN: %clang --target=riscv64-unknown-linux-gnu -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECKs-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O0 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O1 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O2 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -O3 %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s +// RUN: %clang --target=riscv64-linux-android -### -S -Os %s 2>&1 | FileCheck -check-prefix=CHECK-ANDROID-64 %s + // RUN: %clang --target=loongarch32 -### -S -O0 %s -o %t.s 2>&1 | FileCheck -check-prefix=CHECK0-32 %s // RUN: %clang --target=loongarch32 -### -S -O1 %s -o %t.s 2>&1 | FileCheck -check-prefix=CHECK1-32 %s // RUN: %clang --target=loongarch32 -### -S -O2 %s -o %t.s 2>&1 | FileCheck -check-prefix=CHECK2-32 %s @@ -81,3 +87,5 @@ // CHECK3-64-NOT: -mframe-pointer=all // CHECKs-64-NOT: -mframe-pointer=all // CHECK-MACHO-64: -mframe-pointer=all + +// CHECK-ANDROID-64: -mframe-pointer=non-leaf Index: clang/test/Driver/frame-pointer-elim.c =================================================================== --- clang/test/Driver/frame-pointer-elim.c +++ clang/test/Driver/frame-pointer-elim.c @@ -153,6 +153,9 @@ // 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 - +// RUN: %clang -### -target riscv64-linux-android -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NON-LEAF %s +// RUN: %clang -### -target riscv64-linux-android -mbig-endian -O1 -S %s 2>&1 | \ +// RUN: FileCheck --check-prefix=KEEP-NON-LEAF %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 @@ -420,6 +420,9 @@ if (Args.hasArg(options::OPT_pg) && !Args.hasArg(options::OPT_mfentry)) return true; + if (Triple.isAndroid() && Triple.getArch() == llvm::Triple::riscv64) + return true; + switch (Triple.getArch()) { case llvm::Triple::xcore: case llvm::Triple::wasm32: @@ -515,7 +518,8 @@ bool OmitLeafFP = Args.hasFlag(options::OPT_momit_leaf_frame_pointer, options::OPT_mno_omit_leaf_frame_pointer, - Triple.isAArch64() || Triple.isPS() || Triple.isVE()); + Triple.isAArch64() || Triple.isPS() || Triple.isVE() || + (Triple.isAndroid() && (Triple.getArch() == llvm::Triple::riscv64))); if (NoOmitFP || mustUseNonLeafFramePointerForTarget(Triple) || (!OmitFP && useFramePointerForTargetByDefault(Args, Triple))) { if (OmitLeafFP)
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits