[PATCH] D37515: [mips] Generate memory dependencies for byVal arguments

Stefan Maksimovic via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Sep 21 04:37:31 PDT 2017


smaksimovic updated this revision to Diff 116172.
smaksimovic added a comment.

The previous version was found to cause problems elsewhere, the reason being different underlying objects which resulted in wrong ordering of two instructions.
This way we can keep the parameters in MachinePointerInfo() for the stores that are created in MipsTargetLowering::copyByValRegs().
Setting the frame object as isAliased clears the underlying objects vector in ScheduleDAGInstrs::buildSchedGraph() resulting in addition of all stores as dependenies for loads. The desired dependency is there now, the problem being the other ones which are not are there as well.


https://reviews.llvm.org/D37515

Files:
  lib/Target/Mips/MipsISelLowering.cpp
  test/CodeGen/Mips/fastcc_byval.ll


Index: test/CodeGen/Mips/fastcc_byval.ll
===================================================================
--- test/CodeGen/Mips/fastcc_byval.ll
+++ test/CodeGen/Mips/fastcc_byval.ll
@@ -0,0 +1,24 @@
+; RUN: llc -mtriple=mipsel-linux-gnu -O3 -relocation-model=pic < %s | FileCheck %s
+
+%struct.str = type { i32, i32, [3 x i32*] }
+
+declare fastcc void @_Z1F3str(%struct.str* noalias nocapture sret %agg.result, %struct.str* byval nocapture readonly align 4 %s)
+
+define i32 @_Z1g3str(%struct.str* byval nocapture readonly align 4 %s) {
+; CHECK-LABEL: _Z1g3str:
+; CHECK: sw  $7, [[OFFSET:[0-9]+]]($sp)
+; CHECK: lw  ${{[0-9]+}}, [[OFFSET]]($sp)
+entry:
+  %ref.tmp = alloca %struct.str, align 4
+  %0 = bitcast %struct.str* %ref.tmp to i8*
+  call void @llvm.lifetime.start.p0i8(i64 20, i8* nonnull %0)
+  call fastcc void @_Z1F3str(%struct.str* nonnull sret %ref.tmp, %struct.str* byval nonnull align 4 %s)
+  %cl.sroa.3.0..sroa_idx2 = getelementptr inbounds %struct.str, %struct.str* %ref.tmp, i32 0, i32 1
+  %cl.sroa.3.0.copyload = load i32, i32* %cl.sroa.3.0..sroa_idx2, align 4
+  call void @llvm.lifetime.end.p0i8(i64 20, i8* nonnull %0)
+  ret i32 %cl.sroa.3.0.copyload
+}
+
+declare void @llvm.lifetime.start.p0i8(i64, i8* nocapture)
+
+declare void @llvm.lifetime.end.p0i8(i64, i8* nocapture)
Index: lib/Target/Mips/MipsISelLowering.cpp
===================================================================
--- lib/Target/Mips/MipsISelLowering.cpp
+++ lib/Target/Mips/MipsISelLowering.cpp
@@ -4104,7 +4104,7 @@
 
   // Create frame object.
   EVT PtrTy = getPointerTy(DAG.getDataLayout());
-  int FI = MFI.CreateFixedObject(FrameObjSize, FrameObjOffset, true);
+  int FI = MFI.CreateFixedObject(FrameObjSize, FrameObjOffset, false, true);
   SDValue FIN = DAG.getFrameIndex(FI, PtrTy);
   InVals.push_back(FIN);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D37515.116172.patch
Type: text/x-patch
Size: 1828 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170921/519807ae/attachment.bin>


More information about the llvm-commits mailing list