From abd24488935a73212522d17a9883b55c14ff2c2c Mon Sep 17 00:00:00 2001 From: Sanjoy Das Date: Thu, 24 Mar 2016 22:37:52 +0000 Subject: [PATCH] Lower varargs correctly in deopt bundle lowering Earlier we were ignoring varargs in LowerCallSiteWithDeoptBundle because populateCallLoweringInfo does not set CallLoweringInfo::IsVarArg. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@264354 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/SelectionDAG/StatepointLowering.cpp | 1 + test/CodeGen/X86/deopt-bundles.ll | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/lib/CodeGen/SelectionDAG/StatepointLowering.cpp b/lib/CodeGen/SelectionDAG/StatepointLowering.cpp index bf9f1fa26fb..39fea622f93 100644 --- a/lib/CodeGen/SelectionDAG/StatepointLowering.cpp +++ b/lib/CodeGen/SelectionDAG/StatepointLowering.cpp @@ -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); diff --git a/test/CodeGen/X86/deopt-bundles.ll b/test/CodeGen/X86/deopt-bundles.ll index b90b5364b34..4a9cf3b156d 100644 --- a/test/CodeGen/X86/deopt-bundles.ll +++ b/test/CodeGen/X86/deopt-bundles.ll @@ -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: