Files
clang-p2996/llvm/test/CodeGen/X86/pr37063.ll
Noah Goldstein ee5585ed09 Recommit "Improve and enable folding of conditional branches with tail calls." (2nd Try)
Improve and enable folding of conditional branches with tail calls.

1. Make it so that conditional tail calls can be emitted even when
   there are multiple predecessors.

2. Don't guard the transformation behind -Os. The rationale for
   guarding it was static-prediction can be affected by whether the
   branch is forward of backward. This is no longer true for almost any
   X86 cpus (anything newer than `SnB`) so is no longer a meaningful
   concern.

Reviewed By: pengfei

Differential Revision: https://reviews.llvm.org/D140931
2023-02-06 14:09:17 -06:00

30 lines
796 B
LLVM

; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc < %s -mtriple=x86_64-unknown-unknown | FileCheck %s
declare dso_local void @bar()
define void @foo(ptr) {
; CHECK-LABEL: foo:
; CHECK: # %bb.0: # %start
; CHECK-NEXT: movl (%rdi), %eax
; CHECK-NEXT: andl $6, %eax
; CHECK-NEXT: cmpl $4, %eax
; CHECK-NEXT: jne bar # TAILCALL
; CHECK-NEXT: # %bb.1: # %bb1
; CHECK-NEXT: retq
start:
%1 = load i64, ptr %0, align 8, !range !0
%2 = and i64 %1, 6
%3 = icmp eq i64 %2, 4
br i1 %3, label %bb1, label %bb2.i
bb1: ; preds = %bb2.i, %start
ret void
bb2.i: ; preds = %start
tail call fastcc void @bar()
br label %bb1
}
!0 = !{i64 0, i64 6}