diff options
author | Jim Grosbach <grosbach@apple.com> | 2010-06-17 02:00:53 +0000 |
---|---|---|
committer | Jim Grosbach <grosbach@apple.com> | 2010-06-17 02:00:53 +0000 |
commit | bbfc0d22a9a8e197a5ea428f14d37366a1fadd5f (patch) | |
tree | 1653295b5632477aef59064c5436b92868ae1025 | |
parent | 477bf62048238950338421d1b6bd1ed0a82d35ea (diff) | |
download | external_llvm-bbfc0d22a9a8e197a5ea428f14d37366a1fadd5f.zip external_llvm-bbfc0d22a9a8e197a5ea428f14d37366a1fadd5f.tar.gz external_llvm-bbfc0d22a9a8e197a5ea428f14d37366a1fadd5f.tar.bz2 |
ISD::MEMBARRIER should lower to a libcall (__sync_synchronize) if the target
sets the legalize action to Expand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@106203 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/CodeGen/SelectionDAG/LegalizeDAG.cpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp index 5cb89f2..6ae7668 100644 --- a/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp +++ b/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp @@ -2359,10 +2359,22 @@ void SelectionDAGLegalize::ExpandNode(SDNode *Node, case ISD::EH_RETURN: case ISD::EH_LABEL: case ISD::PREFETCH: - case ISD::MEMBARRIER: case ISD::VAEND: Results.push_back(Node->getOperand(0)); break; + case ISD::MEMBARRIER: { + // If the target didn't lower this, lower it to '__sync_synchronize()' call + TargetLowering::ArgListTy Args; + std::pair<SDValue, SDValue> CallResult = + TLI.LowerCallTo(Node->getOperand(0), Type::getVoidTy(*DAG.getContext()), + false, false, false, false, 0, CallingConv::C, false, + /*isReturnValueUsed=*/true, + DAG.getExternalSymbol("__sync_synchronize", + TLI.getPointerTy()), + Args, DAG, dl); + Results.push_back(CallResult.second); + break; + } case ISD::DYNAMIC_STACKALLOC: ExpandDYNAMIC_STACKALLOC(Node, Results); break; |