Files
clang-p2996/llvm/test/CodeGen/X86/extern_weak.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

65 lines
1.3 KiB
LLVM

; RUN: llc < %s -mtriple=i686-apple-darwin | FileCheck %s --check-prefix=DARWIN
; RUN: llc < %s -mtriple=i686-windows-msvc | FileCheck %s --check-prefix=WIN32
; RUN: llc < %s -mtriple=x86_64-windows-msvc | FileCheck %s --check-prefix=WIN64
declare extern_weak void @foo(...)
define void @bar() {
entry:
br i1 icmp ne (ptr @foo, ptr null), label %if.then, label %if.end
if.then:
tail call void (...) @foo( )
ret void
if.end:
ret void
}
; DARWIN-LABEL: _bar:
; DARWIN: cmpl $0, L_foo$non_lazy_ptr
; DARWIN: jne _foo ## TAILCALL
; WIN32-LABEL: _bar:
; WIN32: cmpl $0, .refptr._foo
; WIN32: jmpl *.refptr._foo
; WIN64-LABEL: bar:
; WIN64: cmpq $0, .refptr.foo(%rip)
; WIN64: jmpq *.refptr.foo
declare extern_weak i32 @X(ptr)
@Y = global ptr @X ; <ptr> [#uses=0]
; DARWIN-LABEL: _Y:
; DARWIN: .long _X
; WIN32-LABEL: _Y:
; WIN32: .long _X
; WIN64-LABEL: Y:
; WIN64: .quad X
; DARWIN: .weak_reference _foo
; DARWIN: .weak_reference _X
; WIN32: .section .rdata$.refptr._foo,"dr",discard,.refptr._foo
; WIN32: .globl .refptr._foo
; WIN32: .refptr._foo:
; WIN32: .long _foo
; WIN32: .weak _foo
; WIN32: .weak _X
; WIN64: .section .rdata$.refptr.foo,"dr",discard,.refptr.foo
; WIN64: .globl .refptr.foo
; WIN64: .refptr.foo:
; WIN64: .quad foo
; WIN64: .weak foo
; WIN64: .weak X