forked from OSchip/llvm-project
Specify MachinePointerInfo as refering to the argument value and offset of the
store when handling byval arguments. Thus preventing reordering of the store with load with post-RA scheduler. llvm-svn: 164553
This commit is contained in:
parent
317be45091
commit
ca10389bfe
|
@ -2048,7 +2048,8 @@ PPCTargetLowering::LowerFormalArguments_Darwin_Or_64SVR4(
|
|||
|
||||
SmallVector<SDValue, 8> MemOps;
|
||||
unsigned nAltivecParamsAtEnd = 0;
|
||||
for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; ++ArgNo) {
|
||||
Function::const_arg_iterator FuncArg = MF.getFunction()->arg_begin();
|
||||
for (unsigned ArgNo = 0, e = Ins.size(); ArgNo != e; ++ArgNo, ++FuncArg) {
|
||||
SDValue ArgVal;
|
||||
bool needsLoad = false;
|
||||
EVT ObjectVT = Ins[ArgNo].VT;
|
||||
|
@ -2103,7 +2104,8 @@ PPCTargetLowering::LowerFormalArguments_Darwin_Or_64SVR4(
|
|||
EVT ObjType = (ObjSize == 1 ? MVT::i8 :
|
||||
(ObjSize == 2 ? MVT::i16 : MVT::i32));
|
||||
SDValue Store = DAG.getTruncStore(Val.getValue(1), dl, Val, FIN,
|
||||
MachinePointerInfo(),
|
||||
MachinePointerInfo(FuncArg,
|
||||
CurArgOffset),
|
||||
ObjType, false, false, 0);
|
||||
MemOps.push_back(Store);
|
||||
++GPR_idx;
|
||||
|
@ -2136,7 +2138,7 @@ PPCTargetLowering::LowerFormalArguments_Darwin_Or_64SVR4(
|
|||
}
|
||||
|
||||
SDValue Store = DAG.getStore(Val.getValue(1), dl, Shifted, FIN,
|
||||
MachinePointerInfo(),
|
||||
MachinePointerInfo(FuncArg, ArgOffset),
|
||||
false, false, 0);
|
||||
MemOps.push_back(Store);
|
||||
++GPR_idx;
|
||||
|
|
|
@ -0,0 +1,27 @@
|
|||
; RUN: llc < %s | FileCheck %s
|
||||
target datalayout = "E-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v128:128:128-n32:64"
|
||||
target triple = "powerpc64-unknown-linux-gnu"
|
||||
|
||||
%struct.foo = type { i8, i8 }
|
||||
|
||||
define void @_Z5check3foos(%struct.foo* nocapture byval %f, i16 signext %i) noinline {
|
||||
; CHECK: _Z5check3foos:
|
||||
; CHECK: sth 3, {{[0-9]+}}(1)
|
||||
; CHECK: lha {{[0-9]+}}, {{[0-9]+}}(1)
|
||||
entry:
|
||||
%0 = bitcast %struct.foo* %f to i16*
|
||||
%1 = load i16* %0, align 2
|
||||
%bf.val.sext = ashr i16 %1, 8
|
||||
%cmp = icmp eq i16 %bf.val.sext, %i
|
||||
br i1 %cmp, label %if.end, label %if.then
|
||||
|
||||
if.then: ; preds = %entry
|
||||
%conv = sext i16 %bf.val.sext to i32
|
||||
tail call void @exit(i32 %conv)
|
||||
br label %if.end
|
||||
|
||||
if.end: ; preds = %entry, %if.then
|
||||
ret void
|
||||
}
|
||||
|
||||
declare void @exit(i32)
|
Loading…
Reference in New Issue