[PATCH] D91218: [SystemZ] Prevent fentry reordering

Ilya Leoshkevich via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Nov 11 04:53:11 PST 2020


iii updated this revision to Diff 304484.
iii added a comment.

- Add isCall to FENTRY_CALL in Target.td.


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/FEntryInserter.cpp
  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,20 @@
+; 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
+; CHECK-NEXT: # %bb.1: # %entry
Index: llvm/lib/CodeGen/FEntryInserter.cpp
===================================================================
--- llvm/lib/CodeGen/FEntryInserter.cpp
+++ llvm/lib/CodeGen/FEntryInserter.cpp
@@ -41,9 +41,12 @@
     return false;
 
   auto &FirstMBB = *MF.begin();
+  auto *FEntryMBB = MF.CreateMachineBasicBlock();
+  MF.push_front(FEntryMBB);
   auto *TII = MF.getSubtarget().getInstrInfo();
-  BuildMI(FirstMBB, FirstMBB.begin(), DebugLoc(),
+  BuildMI(*FEntryMBB, FEntryMBB->begin(), DebugLoc(),
           TII->get(TargetOpcode::FENTRY_CALL));
+  FEntryMBB->addSuccessor(&FirstMBB);
   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.304484.patch
Type: text/x-patch
Size: 2038 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20201111/41f5ccc8/attachment.bin>


More information about the llvm-commits mailing list