diff options
| author | Hal Finkel <hfinkel@anl.gov> | 2014-08-16 00:17:05 +0000 |
|---|---|---|
| committer | Hal Finkel <hfinkel@anl.gov> | 2014-08-16 00:17:05 +0000 |
| commit | 41a55ad0a5c71af70dfe8b7a4f934e2063a52f06 (patch) | |
| tree | 288a52ab62fbb8d5ae9d73f340f483eb97da4369 /llvm/lib | |
| parent | 0815a05fd77d2ee71eb552c91e7351242d1b6aa8 (diff) | |
| download | bcm5719-llvm-41a55ad0a5c71af70dfe8b7a4f934e2063a52f06.tar.gz bcm5719-llvm-41a55ad0a5c71af70dfe8b7a4f934e2063a52f06.zip | |
[PowerPC] Mark fixed-offset byvals as pointed-to by IR values
A byval object, even if allocated at a fixed offset (prescribed by the ABI) is
pointed to by IR values. Most fixed-offset stack objects are not pointed-to by
IR values, so the default is to assume this is not possible. However, we need
to override the default in this case (instruction scheduling can cause
miscompiles otherwise).
Fixes PR20280.
llvm-svn: 215795
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/PowerPC/PPCISelLowering.cpp | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp index 42e724d3f1e..3badab60aa1 100644 --- a/llvm/lib/Target/PowerPC/PPCISelLowering.cpp +++ b/llvm/lib/Target/PowerPC/PPCISelLowering.cpp @@ -2700,7 +2700,7 @@ PPCTargetLowering::LowerFormalArguments_64SVR4( int FI; if (HasParameterArea || ArgSize + ArgOffset > LinkageSize + Num_GPR_Regs * PtrByteSize) - FI = MFI->CreateFixedObject(ArgSize, ArgOffset, false); + FI = MFI->CreateFixedObject(ArgSize, ArgOffset, false, true); else FI = MFI->CreateStackObject(ArgSize, Align, false); SDValue FIN = DAG.getFrameIndex(FI, PtrVT); @@ -3066,7 +3066,7 @@ PPCTargetLowering::LowerFormalArguments_Darwin( CurArgOffset = CurArgOffset + (4 - ObjSize); } // The value of the object is its address. - int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, false); + int FI = MFI->CreateFixedObject(ObjSize, CurArgOffset, false, true); SDValue FIN = DAG.getFrameIndex(FI, PtrVT); InVals.push_back(FIN); if (ObjSize==1 || ObjSize==2) { |

