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
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));
}
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));
}