[PATCH] D91218: Prevent FENTRY_CALL reordering

Ilya Leoshkevich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 11 10:27:42 PST 2020


iii updated this revision to Diff 304573.
iii edited the summary of this revision.
iii added a comment.

- Do not use FileCheck in fentry-debug-info.ll.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D91218/new/

https://reviews.llvm.org/D91218

Files:
  llvm/include/llvm/Target/Target.td
  llvm/lib/CodeGen/MachineInstr.cpp
  llvm/test/CodeGen/SystemZ/fentry-debug-info.ll
  llvm/test/CodeGen/SystemZ/fentry-no-reorder.ll


Index: llvm/test/CodeGen/SystemZ/fentry-no-reorder.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/SystemZ/fentry-no-reorder.ll
@@ -0,0 +1,19 @@
+; RUN: llc %s -mtriple=s390x-linux-gnu -mcpu=zEC12 -o - -verify-machineinstrs \
+; RUN:   | FileCheck %s
+
+ at PawnTT = dso_local local_unnamed_addr global [2048 x i8] zeroinitializer, align 2
+
+define dso_local void @clear_pawn_tt() local_unnamed_addr #0 {
+entry:
+  call void @llvm.memset.p0i8.i64(i8* nonnull align 2 dereferenceable(2048) getelementptr inbounds ([2048 x i8], [2048 x i8]* @PawnTT, i64 0, i64 0), i8 0, i64 2048, i1 false)
+  ret void
+}
+
+declare void @llvm.memset.p0i8.i64(i8* nocapture writeonly, i8, i64, i1 immarg) #1
+
+attributes #0 = { nofree nounwind writeonly "fentry-call"="true" }
+attributes #1 = { argmemonly nofree nosync nounwind willreturn writeonly }
+
+; CHECK: clear_pawn_tt: # @clear_pawn_tt
+; CHECK-NEXT: # %bb.0:
+; CHECK-NEXT: brasl %r0, __fentry__ at PLT
Index: llvm/test/CodeGen/SystemZ/fentry-debug-info.ll
===================================================================
--- /dev/null
+++ llvm/test/CodeGen/SystemZ/fentry-debug-info.ll
@@ -0,0 +1,22 @@
+; Test that compliling with fentry and debuginfo works.
+;
+; RUN: llc %s -mtriple=s390x-linux-gnu -o - -verify-machineinstrs
+
+define dso_local void @_Z1av() local_unnamed_addr #0 !dbg !7 {
+entry:
+  ret void
+}
+
+attributes #0 = { norecurse nounwind readnone "fentry-call"="true" }
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_14, file: !1, producer: "clang version 12.0.0", isOptimized: true, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, splitDebugInlining: false, nameTableKind: None)
+!1 = !DIFile(filename: "a.cpp", directory: "/tmp")
+!2 = !{}
+!3 = !{i32 7, !"Dwarf Version", i32 4}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!7 = distinct !DISubprogram(name: "a", linkageName: "_Z1av", scope: !1, file: !1, line: 1, type: !8, scopeLine: 1, flags: DIFlagPrototyped | DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
+!8 = !DISubroutineType(types: !9)
+!9 = !{null}
Index: llvm/lib/CodeGen/MachineInstr.cpp
===================================================================
--- llvm/lib/CodeGen/MachineInstr.cpp
+++ llvm/lib/CodeGen/MachineInstr.cpp
@@ -712,6 +712,7 @@
   case TargetOpcode::PATCHPOINT:
   case TargetOpcode::STACKMAP:
   case TargetOpcode::STATEPOINT:
+  case TargetOpcode::FENTRY_CALL:
     return false;
   }
   return true;
Index: llvm/include/llvm/Target/Target.td
===================================================================
--- llvm/include/llvm/Target/Target.td
+++ llvm/include/llvm/Target/Target.td
@@ -1275,6 +1275,7 @@
   let InOperandList = (ins);
   let AsmString = "# FEntry call";
   let usesCustomInserter = 1;
+  let isCall = 1;
   let mayLoad = 1;
   let mayStore = 1;
   let hasSideEffects = 1;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D91218.304573.patch
Type: text/x-patch
Size: 2998 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201111/ab36a816/attachment.bin>


More information about the llvm-commits mailing list