[llvm] 5932f7b - [PatchableFunction] Use an empty DebugLoc

Fangrui Song via llvm-commits llvm-commits at lists.llvm.org
Sat Feb 1 14:12:28 PST 2020


Author: Fangrui Song
Date: 2020-02-01T14:12:06-08:00
New Revision: 5932f7b8f2c9a5f3640cffa3e99a45923acb7201

URL: https://github.com/llvm/llvm-project/commit/5932f7b8f2c9a5f3640cffa3e99a45923acb7201
DIFF: https://github.com/llvm/llvm-project/commit/5932f7b8f2c9a5f3640cffa3e99a45923acb7201.diff

LOG: [PatchableFunction] Use an empty DebugLoc

The current FirstMI.getDebugLoc() is actually null in almost all cases.
If it isn't, the generated .loc will be considered initial. The .loc
will have the prologue_end flag and terminate the prologue prematurely.

Also use an overload of BuildMI that will not prepend
PATCHABLE_FUNCTION_ENTRY to a MachineInstr bundle.

Added: 
    

Modified: 
    llvm/lib/CodeGen/PatchableFunction.cpp
    llvm/test/CodeGen/AArch64/patchable-function-entry-empty.mir

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/PatchableFunction.cpp b/llvm/lib/CodeGen/PatchableFunction.cpp
index a8466396f9b8..ca44b7a53982 100644
--- a/llvm/lib/CodeGen/PatchableFunction.cpp
+++ b/llvm/lib/CodeGen/PatchableFunction.cpp
@@ -58,14 +58,9 @@ bool PatchableFunction::runOnMachineFunction(MachineFunction &MF) {
   if (MF.getFunction().hasFnAttribute("patchable-function-entry")) {
     MachineBasicBlock &FirstMBB = *MF.begin();
     const TargetInstrInfo *TII = MF.getSubtarget().getInstrInfo();
-    if (FirstMBB.empty()) {
-      BuildMI(&FirstMBB, DebugLoc(),
-              TII->get(TargetOpcode::PATCHABLE_FUNCTION_ENTER));
-    } else {
-      MachineInstr &FirstMI = *FirstMBB.begin();
-      BuildMI(FirstMBB, FirstMI, FirstMI.getDebugLoc(),
-              TII->get(TargetOpcode::PATCHABLE_FUNCTION_ENTER));
-    }
+    // The initial .loc covers PATCHABLE_FUNCTION_ENTER.
+    BuildMI(FirstMBB, FirstMBB.begin(), DebugLoc(),
+            TII->get(TargetOpcode::PATCHABLE_FUNCTION_ENTER));
     return true;
   }
 

diff  --git a/llvm/test/CodeGen/AArch64/patchable-function-entry-empty.mir b/llvm/test/CodeGen/AArch64/patchable-function-entry-empty.mir
index 032e07aacbcc..36513297edec 100644
--- a/llvm/test/CodeGen/AArch64/patchable-function-entry-empty.mir
+++ b/llvm/test/CodeGen/AArch64/patchable-function-entry-empty.mir
@@ -1,15 +1,11 @@
 # RUN: llc -mtriple=aarch64 -run-pass=patchable-function %s -o - | FileCheck %s
 
+## The initial .loc covers PATCHABLE_FUNCTION_ENTER.
+## Emitting a new .loc may create a prologue_end prematurely.
 # CHECK:    name: empty
 # CHECK:    bb.0.entry
-# CHECK:      PATCHABLE_FUNCTION_ENTER debug-location !DILocation(line: 1,
-# CHECK-NEXT: RET undef $lr, debug-location !DILocation(line: 1,
-
-## Empty entry MBB, no debug location.
-# CHECK:    name: empty_entry
-# CHECK:    bb.0.entry
 # CHECK:      PATCHABLE_FUNCTION_ENTER{{$}}
-# CHECK:    bb.1.here
+# CHECK-NEXT: RET undef $lr, debug-location !DILocation(line: 1,
 
 --- |
   define void @empty() #0 !dbg !7 {
@@ -17,13 +13,6 @@
     ret void, !dbg !10
   }
 
-  define void @empty_entry() #0 !dbg !11 {
-  entry:
-    br label %here
-  here:
-    ret void, !dbg !12
-  }
-
   attributes #0 = { "patchable-function-entry"="1" }
   !0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, producer: "clang version 11.0.0 ", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
   !1 = !DIFile(filename: "a.c", directory: "/tmp")
@@ -36,8 +25,6 @@
   !8 = !DISubroutineType(types: !9)
   !9 = !{null}
   !10 = !DILocation(line: 1, column: 61, scope: !7)
-  !11 = distinct !DISubprogram(name: "empty_entry", scope: !1, file: !1, line: 2, type: !8, scopeLine: 2, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
-  !12 = !DILocation(line: 2, column: 61, scope: !11)
 
 ...
 ---
@@ -50,15 +37,3 @@ body:             |
     RET undef $lr, debug-location !10
 
 ...
----
-name:            empty_entry
-alignment:       4
-tracksRegLiveness: true
-body:             |
-  bb.0.entry:
-    liveins: $lr
-  bb.1.here:
-    liveins: $lr
-    RET undef $lr, debug-location !12
-
-...


        


More information about the llvm-commits mailing list