mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
017a58dbae
This patch prevents GlobalISel from optimizing out redundant branch instructions when compiling without optimizations. The motivating example is code like the following common pattern in Swift, where users expect to be able to set a breakpoint on the early exit: public func f(b: Bool) { guard b else { return // I would like to set a breakpoint here. } ... } The patch modifies two places in GlobalISEL: The first one is in IRTranslator.cpp where the removal of redundant branches is made conditional on the optimization level. The second one is in AArch64InstructionSelector.cpp where an -O0 *only* optimization is being removed. Disabling these optimizations increases code size at -O0 by ~8%. However, doing so improves debuggability, and debug builds are the primary reason why developers compile without optimizations. We thus concluded that this is the right trade-off. rdar://79515454 Differential Revision: https://reviews.llvm.org/D105238 |
||
---|---|---|
.. | ||
asan-stack-vars.mir | ||
big-endian-dump.ll | ||
big-endian.ll | ||
bitfields.ll | ||
call-site-info-output.ll | ||
cfi-eof-prologue.ll | ||
coalescing.ll | ||
compiler-gen-bbs-livedebugvalues.mir | ||
constant-dbgloc.ll | ||
dagcombine-zext.ll | ||
dbg-sve-types.ll | ||
dbg-value-i8.ll | ||
dbg-value-i16.ll | ||
dbgcall-site-float-entry-value.ll | ||
dwarfdump.ll | ||
eh_frame_personality.ll | ||
eh_frame.s | ||
eh-frame.ll | ||
fallthrough-branch.ll | ||
frame-loclistx.s | ||
frameindices.ll | ||
inlined-argument.ll | ||
ir-outliner.ll | ||
line-header.ll | ||
lit.local.cfg | ||
little-endian-dump.ll | ||
machine-outliner.ll | ||
pr40709.ll | ||
processes-relocations.ll | ||
prologue_end.ll | ||
return-address-signing.ll | ||
struct_by_value.ll | ||
tls-at-location.ll | ||
unretained-declaration-subprogram.ll |