Skip to content

Commit baf8124

Browse files
authored
Always add the frame-pointer=all attribute (#57209)
At some point LLVM on MacOS started doing frame pointer optimization by default. We should ask for a frame pointer on every function, on all platforms. Prior to this change, on `1.11.3+0.aarch64.apple.darwin14`: ``` julia> @code_native ((x,y) -> Core.Intrinsics.add_float(x,y))(1.0,2.0) .section __TEXT,__text,regular,pure_instructions .build_version macos, 15, 0 .globl "_julia_#1_678" ; -- Begin function julia_#1_678 .p2align 2 "_julia_#1_678": ; @"julia_#1_678" ; Function Signature: var"#1"(Float64, Float64) ; ┌ @ REPL[1]:1 within `#1` ; %bb.0: ; %top ; │ @ REPL[1] within `#1` ;DEBUG_VALUE: #1:x <- $d0 ;DEBUG_VALUE: #1:x <- $d0 ;DEBUG_VALUE: #1:y <- $d1 ;DEBUG_VALUE: #1:y <- $d1 ; │ @ REPL[1]:1 within `#1` fadd d0, d0, d1 ret ; └ ; -- End function .section __DATA,__const .p2align 3, 0x0 ; @"+Core.Float64#680" "l_+Core.Float64#680": .quad "l_+Core.Float64#680.jit" .set "l_+Core.Float64#680.jit", 5490712608 .subsections_via_symbols ``` Prior to this change, on `1.11.3+0.aarch64.linux.gnu`: ``` julia> @code_native ((x,y) -> Core.Intrinsics.add_float(x,y))(1.0,2.0) .text .file "#1" .globl "julia_#1_656" // -- Begin function julia_#1_656 .p2align 2 .type "julia_#1_656",@function "julia_#1_656": // @"julia_#1_656" ; Function Signature: var"#1"(Float64, Float64) ; ┌ @ REPL[1]:1 within `#1` // %bb.0: // %top ; │ @ REPL[1] within `#1` //DEBUG_VALUE: #1:x <- $d0 //DEBUG_VALUE: #1:x <- $d0 //DEBUG_VALUE: #1:y <- $d1 //DEBUG_VALUE: #1:y <- $d1 stp x29, x30, [sp, #-16]! // 16-byte Folded Spill mov x29, sp ; │ @ REPL[1]:1 within `#1` fadd d0, d0, d1 ldp x29, x30, [sp], #16 // 16-byte Folded Reload ret .Lfunc_end0: .size "julia_#1_656", .Lfunc_end0-"julia_#1_656" ; └ // -- End function .type ".L+Core.Float64#658",@object // @"+Core.Float64#658" .section .rodata,"a",@progbits .p2align 3, 0x0 ".L+Core.Float64#658": .xword ".L+Core.Float64#658.jit" .size ".L+Core.Float64#658", 8 .set ".L+Core.Float64#658.jit", 278205186835760 .size ".L+Core.Float64#658.jit", 8 .section ".note.GNU-stack","",@progbits ```
1 parent 72f8a10 commit baf8124

File tree

1 file changed

+1
-16
lines changed

1 file changed

+1
-16
lines changed

src/codegen.cpp

+1-16
Original file line numberDiff line numberDiff line change
@@ -83,20 +83,6 @@
8383

8484
using namespace llvm;
8585

86-
static bool jl_fpo_disabled(const Triple &TT) {
87-
#ifdef JL_DISABLE_FPO
88-
return true;
89-
#endif
90-
#ifdef _COMPILER_MSAN_ENABLED_
91-
// MSAN doesn't support FPO
92-
return true;
93-
#endif
94-
if (TT.isOSLinux() || TT.isOSWindows() || TT.isOSFreeBSD() || TT.isOSOpenBSD()) {
95-
return true;
96-
}
97-
return false;
98-
}
99-
10086
static bool jl_floattemp_var_needed(const Triple &TT) {
10187
#ifdef JL_NEED_FLOATTEMP_VAR
10288
return true;
@@ -2970,8 +2956,7 @@ void jl_init_function(Function *F, const Triple &TT) JL_NOTSAFEPOINT
29702956
if (TT.isOSWindows() && TT.getArch() == Triple::x86_64) {
29712957
attr.addUWTableAttr(llvm::UWTableKind::Default); // force NeedsWinEH
29722958
}
2973-
if (jl_fpo_disabled(TT))
2974-
attr.addAttribute("frame-pointer", "all");
2959+
attr.addAttribute("frame-pointer", "all");
29752960
if (!TT.isOSWindows()) {
29762961
#if !defined(_COMPILER_ASAN_ENABLED_)
29772962
// ASAN won't like us accessing undefined memory causing spurious issues,

0 commit comments

Comments
 (0)