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
diff --git a/lib/Target/CBackend/Writer.cpp b/lib/Target/CBackend/Writer.cpp
index cb831ae..adac8e2 100644
--- a/lib/Target/CBackend/Writer.cpp
+++ b/lib/Target/CBackend/Writer.cpp
@@ -1655,12 +1655,27 @@
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));
}