forked from OSchip/llvm-project
Lower varargs correctly in deopt bundle lowering
Earlier we were ignoring varargs in LowerCallSiteWithDeoptBundle because populateCallLoweringInfo does not set CallLoweringInfo::IsVarArg. llvm-svn: 264354
This commit is contained in:
parent
5109bfd165
commit
731c67fed2
|
@ -827,6 +827,7 @@ void SelectionDAGBuilder::LowerCallSiteWithDeoptBundle(
|
|||
unsigned ArgBeginIndex = CS.arg_begin() - CS.getInstruction()->op_begin();
|
||||
populateCallLoweringInfo(SI.CLI, CS, ArgBeginIndex, CS.getNumArgOperands(),
|
||||
Callee, CS.getType(), false);
|
||||
SI.CLI.IsVarArg = CS.getFunctionType()->isVarArg();
|
||||
|
||||
auto DeoptBundle = *CS.getOperandBundle(LLVMContext::OB_deopt);
|
||||
|
||||
|
|
|
@ -21,6 +21,13 @@ target triple = "x86_64-apple-macosx10.11.0"
|
|||
; STACKMAPS-NEXT: Stack Maps: Loc 2: Constant 1 [encoding: .byte 4, .byte 8, .short 0, .int 1]
|
||||
; STACKMAPS-NEXT: Stack Maps: Loc 3: Constant 1 [encoding: .byte 4, .byte 8, .short 0, .int 1]
|
||||
; STACKMAPS-NEXT: Stack Maps: has 0 live-out registers
|
||||
; STACKMAPS-NEXT: Stack Maps: callsite 4243
|
||||
; STACKMAPS-NEXT: Stack Maps: has 4 locations
|
||||
; STACKMAPS-NEXT: Stack Maps: Loc 0: Constant 0 [encoding: .byte 4, .byte 8, .short 0, .int 0]
|
||||
; STACKMAPS-NEXT: Stack Maps: Loc 1: Constant 0 [encoding: .byte 4, .byte 8, .short 0, .int 0]
|
||||
; STACKMAPS-NEXT: Stack Maps: Loc 2: Constant 1 [encoding: .byte 4, .byte 8, .short 0, .int 1]
|
||||
; STACKMAPS-NEXT: Stack Maps: Loc 3: Constant 16 [encoding: .byte 4, .byte 8, .short 0, .int 16]
|
||||
; STACKMAPS-NEXT: Stack Maps: has 0 live-out registers
|
||||
; STACKMAPS-NEXT: Stack Maps: callsite 2882400015
|
||||
; STACKMAPS-NEXT: Stack Maps: has 4 locations
|
||||
; STACKMAPS-NEXT: Stack Maps: Loc 0: Constant 0 [encoding: .byte 4, .byte 8, .short 0, .int 0]
|
||||
|
@ -46,6 +53,7 @@ target triple = "x86_64-apple-macosx10.11.0"
|
|||
|
||||
declare i32 @callee_0()
|
||||
declare i32 @callee_1(i32)
|
||||
declare i32 @callee_vararg(...)
|
||||
|
||||
define i32 @caller_0() {
|
||||
; CHECK-LABEL: _caller_0
|
||||
|
@ -68,6 +76,15 @@ entry:
|
|||
; CHECK: retq
|
||||
}
|
||||
|
||||
define i32 @caller_vararg() {
|
||||
; CHECK-LABEL: _caller_vararg
|
||||
entry:
|
||||
; CHECK: movb $1, %al
|
||||
; CHECK: callq _callee_vararg
|
||||
%v = call i32(...) @callee_vararg(i32 42, double 500.0) "statepoint-id"="4243" [ "deopt"(i32 16) ]
|
||||
ret i32 %v
|
||||
}
|
||||
|
||||
define i32 @invoker_0() personality i8 0 {
|
||||
; CHECK-LABEL: _invoker_0
|
||||
entry:
|
||||
|
|
Loading…
Reference in New Issue