mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
c34a7c7b51
The current compact unwind scheme does not work when the prologue is not at the start (the instructions before the prologue cannot be described). (Technically this is fixable, but it requires multiple compact unwind descriptors for one function.) rL255175 chose to not perform shrink-wrapping for no-frame-pointer functions not marked as nounwind to work around PR25614. This is overly limited, as platforms not supporting compact unwind (all non-Darwin) does not need the workaround. This patch restricts the limitation to compact unwind platforms. Reviewed By: qcolombet Differential Revision: https://reviews.llvm.org/D89930
36 lines
905 B
LLVM
36 lines
905 B
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
|
|
|
|
; Make sure dagcombine doesn't eliminate the comparison due
|
|
; to an off-by-one bug with computeKnownBits information.
|
|
|
|
declare void @qux()
|
|
|
|
define void @foo(i32 %a) {
|
|
; CHECK-LABEL: foo:
|
|
; CHECK: # %bb.0:
|
|
; CHECK-NEXT: shrl $23, %edi
|
|
; CHECK-NEXT: testl $256, %edi # imm = 0x100
|
|
; CHECK-NEXT: jne .LBB0_2
|
|
; CHECK-NEXT: # %bb.1: # %true
|
|
; CHECK-NEXT: pushq %rax
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 16
|
|
; CHECK-NEXT: callq qux
|
|
; CHECK-NEXT: popq %rax
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 8
|
|
; CHECK-NEXT: .LBB0_2: # %false
|
|
; CHECK-NEXT: retq
|
|
%t0 = lshr i32 %a, 23
|
|
br label %next
|
|
next:
|
|
%t1 = and i32 %t0, 256
|
|
%t2 = icmp eq i32 %t1, 0
|
|
br i1 %t2, label %true, label %false
|
|
true:
|
|
call void @qux()
|
|
ret void
|
|
false:
|
|
ret void
|
|
}
|
|
|