forked from OSchip/llvm-project
chagne interface to SelectionDAG::getAtomic to take a MachinePointerInfo,
eliminating some weird "infer a frame address" logic which was dead. llvm-svn: 114396
This commit is contained in:
parent
3b5dc0cdad
commit
15d84c460a
|
|
@ -587,8 +587,8 @@ public:
|
||||||
/// getAtomic - Gets a node for an atomic op, produces result and chain and
|
/// getAtomic - Gets a node for an atomic op, produces result and chain and
|
||||||
/// takes 3 operands
|
/// takes 3 operands
|
||||||
SDValue getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT, SDValue Chain,
|
SDValue getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT, SDValue Chain,
|
||||||
SDValue Ptr, SDValue Cmp, SDValue Swp, const Value* PtrVal,
|
SDValue Ptr, SDValue Cmp, SDValue Swp,
|
||||||
unsigned Alignment=0);
|
MachinePointerInfo PtrInfo, unsigned Alignment=0);
|
||||||
SDValue getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT, SDValue Chain,
|
SDValue getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT, SDValue Chain,
|
||||||
SDValue Ptr, SDValue Cmp, SDValue Swp,
|
SDValue Ptr, SDValue Cmp, SDValue Swp,
|
||||||
MachineMemOperand *MMO);
|
MachineMemOperand *MMO);
|
||||||
|
|
|
||||||
|
|
@ -3669,19 +3669,12 @@ SDValue SelectionDAG::getMemset(SDValue Chain, DebugLoc dl, SDValue Dst,
|
||||||
}
|
}
|
||||||
|
|
||||||
SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
|
SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
|
||||||
SDValue Chain,
|
SDValue Chain, SDValue Ptr, SDValue Cmp,
|
||||||
SDValue Ptr, SDValue Cmp,
|
SDValue Swp, MachinePointerInfo PtrInfo,
|
||||||
SDValue Swp, const Value *PtrVal,
|
|
||||||
unsigned Alignment) {
|
unsigned Alignment) {
|
||||||
if (Alignment == 0) // Ensure that codegen never sees alignment 0
|
if (Alignment == 0) // Ensure that codegen never sees alignment 0
|
||||||
Alignment = getEVTAlignment(MemVT);
|
Alignment = getEVTAlignment(MemVT);
|
||||||
|
|
||||||
// Check if the memory reference references a frame index
|
|
||||||
if (!PtrVal)
|
|
||||||
if (const FrameIndexSDNode *FI =
|
|
||||||
dyn_cast<const FrameIndexSDNode>(Ptr.getNode()))
|
|
||||||
PtrVal = PseudoSourceValue::getFixedStack(FI->getIndex());
|
|
||||||
|
|
||||||
MachineFunction &MF = getMachineFunction();
|
MachineFunction &MF = getMachineFunction();
|
||||||
unsigned Flags = MachineMemOperand::MOLoad | MachineMemOperand::MOStore;
|
unsigned Flags = MachineMemOperand::MOLoad | MachineMemOperand::MOStore;
|
||||||
|
|
||||||
|
|
@ -3689,8 +3682,7 @@ SDValue SelectionDAG::getAtomic(unsigned Opcode, DebugLoc dl, EVT MemVT,
|
||||||
Flags |= MachineMemOperand::MOVolatile;
|
Flags |= MachineMemOperand::MOVolatile;
|
||||||
|
|
||||||
MachineMemOperand *MMO =
|
MachineMemOperand *MMO =
|
||||||
MF.getMachineMemOperand(MachinePointerInfo(PtrVal), Flags,
|
MF.getMachineMemOperand(PtrInfo, Flags, MemVT.getStoreSize(), Alignment);
|
||||||
MemVT.getStoreSize(), Alignment);
|
|
||||||
|
|
||||||
return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Cmp, Swp, MMO);
|
return getAtomic(Opcode, dl, MemVT, Chain, Ptr, Cmp, Swp, MMO);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4550,7 +4550,7 @@ SelectionDAGBuilder::visitIntrinsicCall(const CallInst &I, unsigned Intrinsic) {
|
||||||
getValue(I.getArgOperand(0)),
|
getValue(I.getArgOperand(0)),
|
||||||
getValue(I.getArgOperand(1)),
|
getValue(I.getArgOperand(1)),
|
||||||
getValue(I.getArgOperand(2)),
|
getValue(I.getArgOperand(2)),
|
||||||
I.getArgOperand(0));
|
MachinePointerInfo(I.getArgOperand(0)));
|
||||||
setValue(&I, L);
|
setValue(&I, L);
|
||||||
DAG.setRoot(L.getValue(1));
|
DAG.setRoot(L.getValue(1));
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue