]> granicus.if.org Git - llvm/commitdiff
GlobalISel: inform FrameLowering when we emit a function call.
authorTim Northover <tnorthover@apple.com>
Thu, 9 Mar 2017 22:00:39 +0000 (22:00 +0000)
committerTim Northover <tnorthover@apple.com>
Thu, 9 Mar 2017 22:00:39 +0000 (22:00 +0000)
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

lib/CodeGen/GlobalISel/IRTranslator.cpp
lib/CodeGen/GlobalISel/LegalizerHelper.cpp
test/CodeGen/AArch64/GlobalISel/call-translator.ll
test/CodeGen/AArch64/GlobalISel/legalize-pow.mir

index b6ce59dc1205e8a2d7d78947879b96b071bf1f15..e170b762ab890674c031c178a42575074e05e410 100644 (file)
@@ -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());
     });
index b4decb18999a44049e4cae35764f1a2811f0e7dc..da7e9595eed7db3ec0976744db97fe67f3353ef0 100644 (file)
@@ -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},
index a4cc4633ce3fb199114d41ed11d3ecfed4b27113..f8d95c88cc8f3eec9b9ae18c63cd58da0c7efa2a 100644 (file)
@@ -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
index a25d3951e1a2672400c6444621bf1965231ca617..2becc2e134b5091374b03f57e2a76458c735b36b 100644 (file)
@@ -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