diff options
| author | Tim Northover <tnorthover@apple.com> | 2014-04-17 20:00:24 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2014-04-17 20:00:24 +0000 |
| commit | 0129f298c49d2361143d55a5d4408ad9da29b549 (patch) | |
| tree | 6ef66800542b99864f630b041594c780889cacbd /llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp | |
| parent | 6e4dea2bb79471e5ff6d1caa95efc0bed5c37de3 (diff) | |
| download | bcm5719-llvm-0129f298c49d2361143d55a5d4408ad9da29b549.tar.gz bcm5719-llvm-0129f298c49d2361143d55a5d4408ad9da29b549.zip | |
ARM64: add acquire/release versions of the existing atomic intrinsics.
These will be needed to support IR-level lowering of atomic
operations.
llvm-svn: 206489
Diffstat (limited to 'llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp b/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp index 956f61148ee..9e5b5af0d92 100644 --- a/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp +++ b/llvm/lib/Target/ARM64/ARM64ISelDAGToDAG.cpp @@ -1969,12 +1969,15 @@ SDNode *ARM64DAGToDAGISel::Select(SDNode *Node) { switch (IntNo) { default: break; + case Intrinsic::arm64_ldaxp: case Intrinsic::arm64_ldxp: { + unsigned Op = + IntNo == Intrinsic::arm64_ldaxp ? ARM64::LDAXPX : ARM64::LDXPX; SDValue MemAddr = Node->getOperand(2); SDLoc DL(Node); SDValue Chain = Node->getOperand(0); - SDNode *Ld = CurDAG->getMachineNode(ARM64::LDXPX, DL, MVT::i64, MVT::i64, + SDNode *Ld = CurDAG->getMachineNode(Op, DL, MVT::i64, MVT::i64, MVT::Other, MemAddr, Chain); // Transfer memoperands. @@ -1983,7 +1986,10 @@ SDNode *ARM64DAGToDAGISel::Select(SDNode *Node) { cast<MachineSDNode>(Ld)->setMemRefs(MemOp, MemOp + 1); return Ld; } + case Intrinsic::arm64_stlxp: case Intrinsic::arm64_stxp: { + unsigned Op = + IntNo == Intrinsic::arm64_stlxp ? ARM64::STLXPX : ARM64::STXPX; SDLoc DL(Node); SDValue Chain = Node->getOperand(0); SDValue ValLo = Node->getOperand(2); @@ -1997,8 +2003,7 @@ SDNode *ARM64DAGToDAGISel::Select(SDNode *Node) { Ops.push_back(MemAddr); Ops.push_back(Chain); - SDNode *St = - CurDAG->getMachineNode(ARM64::STXPX, DL, MVT::i32, MVT::Other, Ops); + SDNode *St = CurDAG->getMachineNode(Op, DL, MVT::i32, MVT::Other, Ops); // Transfer memoperands. MachineSDNode::mmo_iterator MemOp = MF->allocateMemRefsArray(1); MemOp[0] = cast<MemIntrinsicSDNode>(Node)->getMemOperand(); |

