From 9d30e22da0d6e59cab0813899adaf9e7c109cf5d Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Mon, 14 Feb 2005 16:47:52 +0000 Subject: [PATCH] Implement CodeGen/CBackend/2005-02-14-VolatileOperations.ll Volatile loads and stores need to emit volatile pointer operations in C. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@20177 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/CBackend/CBackend.cpp | 15 +++++++++++++++ lib/Target/CBackend/Writer.cpp | 15 +++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp index cb831ae5d54..adac8e2f334 100644 --- a/lib/Target/CBackend/CBackend.cpp +++ b/lib/Target/CBackend/CBackend.cpp @@ -1655,12 +1655,27 @@ void CWriter::printIndexingExpression(Value *Ptr, gep_type_iterator I, void CWriter::visitLoadInst(LoadInst &I) { Out << "*"; + if (I.isVolatile()) { + Out << "((volatile "; + printType(Out, I.getOperand(0)->getType()); + Out << ")"; + } + writeOperand(I.getOperand(0)); + + if (I.isVolatile()) + Out << ")"; } void CWriter::visitStoreInst(StoreInst &I) { Out << "*"; + if (I.isVolatile()) { + Out << "((volatile "; + printType(Out, I.getPointerOperand()->getType()); + Out << ")"; + } writeOperand(I.getPointerOperand()); + if (I.isVolatile()) Out << ")"; Out << " = "; writeOperand(I.getOperand(0)); } diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp index cb831ae5d54..adac8e2f334 100644 --- a/lib/Target/CBackend/Writer.cpp +++ b/lib/Target/CBackend/Writer.cpp @@ -1655,12 +1655,27 @@ void CWriter::printIndexingExpression(Value *Ptr, gep_type_iterator I, void CWriter::visitLoadInst(LoadInst &I) { Out << "*"; + if (I.isVolatile()) { + Out << "((volatile "; + printType(Out, I.getOperand(0)->getType()); + Out << ")"; + } + writeOperand(I.getOperand(0)); + + if (I.isVolatile()) + Out << ")"; } void CWriter::visitStoreInst(StoreInst &I) { Out << "*"; + if (I.isVolatile()) { + Out << "((volatile "; + printType(Out, I.getPointerOperand()->getType()); + Out << ")"; + } writeOperand(I.getPointerOperand()); + if (I.isVolatile()) Out << ")"; Out << " = "; writeOperand(I.getOperand(0)); } -- 2.34.1