llvm-mirror/test/CodeGen/AArch64/tail-call-unused-zext.ll
Matt Arsenault 23c462a8b5 Rename ExpandISelPseudo->FinalizeISel, delay register reservation
This allows targets to make more decisions about reserved registers
after isel. For example, now it should be certain there are calls or
stack objects in the frame or not, which could have been introduced by
legalization.

Patch by Matthias Braun

llvm-svn: 363757
2019-06-19 00:25:39 +00:00

37 lines
1.0 KiB
LLVM

; RUN: llc -mtriple=arm64--- -stop-after=finalize-isel -o - %s | FileCheck %s
; Check that we ignore the zeroext attribute on the return type of the tail
; call, since the return value is unused. This happens during CodeGenPrepare in
; dupRetToEnableTailCallOpts, which calls attributesPermitTailCall to check if
; the attributes of the caller and the callee match.
declare zeroext i1 @zcallee()
define void @zcaller() {
; CHECK-LABEL: name: zcaller
entry:
br i1 undef, label %calllabel, label %retlabel
calllabel:
; CHECK: bb.1.calllabel:
; CHECK-NOT: BL @zcallee
; CHECK-NEXT: TCRETURNdi @zcallee
%unused_result = tail call zeroext i1 @zcallee()
br label %retlabel
retlabel:
ret void
}
declare signext i1 @scallee()
define void @scaller() {
; CHECK-LABEL: name: scaller
entry:
br i1 undef, label %calllabel, label %retlabel
calllabel:
; CHECK: bb.1.calllabel:
; CHECK-NOT: BL @scallee
; CHECK-NEXT: TCRETURNdi @scallee
%unused_result = tail call signext i1 @scallee()
br label %retlabel
retlabel:
ret void
}