From: Tim Northover Date: Thu, 9 Mar 2017 22:00:39 +0000 (+0000) Subject: GlobalISel: inform FrameLowering when we emit a function call. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=cc002baec3deb03dcbf385f90416f9ed08b8f7be;p=llvm GlobalISel: inform FrameLowering when we emit a function call. Amongst other things (I expect) this is necessary to ensure decent backtraces when an "unreachable" is involved. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297413 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/GlobalISel/IRTranslator.cpp b/lib/CodeGen/GlobalISel/IRTranslator.cpp index b6ce59dc120..e170b762ab8 100644 --- a/lib/CodeGen/GlobalISel/IRTranslator.cpp +++ b/lib/CodeGen/GlobalISel/IRTranslator.cpp @@ -729,6 +729,7 @@ bool IRTranslator::translateCall(const User &U, MachineIRBuilder &MIRBuilder) { for (auto &Arg: CI.arg_operands()) Args.push_back(getOrCreateVReg(*Arg)); + MF->getFrameInfo().setHasCalls(true); return CLI->lowerCall(MIRBuilder, CI, Res, Args, [&]() { return getOrCreateVReg(*CI.getCalledValue()); }); diff --git a/lib/CodeGen/GlobalISel/LegalizerHelper.cpp b/lib/CodeGen/GlobalISel/LegalizerHelper.cpp index b4decb18999..da7e9595eed 100644 --- a/lib/CodeGen/GlobalISel/LegalizerHelper.cpp +++ b/lib/CodeGen/GlobalISel/LegalizerHelper.cpp @@ -117,6 +117,7 @@ LegalizerHelper::libcall(MachineInstr &MI) { auto &CLI = *MIRBuilder.getMF().getSubtarget().getCallLowering(); auto &TLI = *MIRBuilder.getMF().getSubtarget().getTargetLowering(); const char *Name = TLI.getLibcallName(getRTLibDesc(MI.getOpcode(), Size)); + MIRBuilder.getMF().getFrameInfo().setHasCalls(true); CLI.lowerCall( MIRBuilder, MachineOperand::CreateES(Name), {MI.getOperand(0).getReg(), Ty}, diff --git a/test/CodeGen/AArch64/GlobalISel/call-translator.ll b/test/CodeGen/AArch64/GlobalISel/call-translator.ll index a4cc4633ce3..f8d95c88cc8 100644 --- a/test/CodeGen/AArch64/GlobalISel/call-translator.ll +++ b/test/CodeGen/AArch64/GlobalISel/call-translator.ll @@ -96,6 +96,7 @@ define {double, i64, i32} @test_struct_return({double, i64, i32}* %addr) { } ; CHECK-LABEL: name: test_arr_call +; CHECK: hasCalls: true ; CHECK: [[ARG:%[0-9]+]](s256) = G_LOAD ; CHECK: [[E0:%[0-9]+]](s64) = G_EXTRACT [[ARG]](s256), 0 diff --git a/test/CodeGen/AArch64/GlobalISel/legalize-pow.mir b/test/CodeGen/AArch64/GlobalISel/legalize-pow.mir index a25d3951e1a..2becc2e134b 100644 --- a/test/CodeGen/AArch64/GlobalISel/legalize-pow.mir +++ b/test/CodeGen/AArch64/GlobalISel/legalize-pow.mir @@ -15,6 +15,9 @@ body: | bb.0.entry: liveins: %d0, %d1, %s2, %s3 + ; CHECK-LABEL: name: test_pow + ; CHECK: hasCalls: true + %0:_(s64) = COPY %d0 %1:_(s64) = COPY %d1 %2:_(s32) = COPY %s2