aboutsummaryrefslogtreecommitdiff
path: root/lib/Target/CBackend/CBackend.cpp
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2002-05-09 15:59:50 +0000
committerChris Lattner <sabre@nondot.org>2002-05-09 15:59:50 +0000
commit8c8a37061a738cc435b27e74f2320dae03c06318 (patch)
tree006c8a1a0f7d7b197e72c287553d285100e12fdb /lib/Target/CBackend/CBackend.cpp
parent8c3c4bfcfe52e7eed35031d7271c8d8e5e3bd6f9 (diff)
Emit:
l3_reg109 = l81_this->field0; Instead of: l3_reg109 = l81_this[0u].field0; where possible git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@2579 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/CBackend/CBackend.cpp')
-rw-r--r--lib/Target/CBackend/CBackend.cpp15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/Target/CBackend/CBackend.cpp b/lib/Target/CBackend/CBackend.cpp
index 00b00ab9a8..5da8367a11 100644
--- a/lib/Target/CBackend/CBackend.cpp
+++ b/lib/Target/CBackend/CBackend.cpp
@@ -517,8 +517,19 @@ void CInstPrintVisitor::visitFreeInst(FreeInst *I) {
void CInstPrintVisitor::printIndexingExpr(MemAccessInst *MAI) {
CW.writeOperand(MAI->getPointerOperand());
- for (MemAccessInst::op_iterator I = MAI->idx_begin(), E = MAI->idx_end();
- I != E; ++I)
+ MemAccessInst::op_iterator I = MAI->idx_begin(), E = MAI->idx_end();
+ if (I == E) return;
+
+ // Print out the -> operator if possible...
+ Constant *CI = dyn_cast<Constant>(*I);
+ if (CI && CI->isNullValue() && I+1 != E &&
+ (*(I+1))->getType() == Type::UByteTy) {
+ ++I;
+ Out << "->field" << cast<ConstantUInt>(*I)->getValue();
+ ++I;
+ }
+
+ for (; I != E; ++I)
if ((*I)->getType() == Type::UIntTy) {
Out << "[";
CW.writeOperand(*I);