diff options
author | Chris Lattner <sabre@nondot.org> | 2002-05-09 15:59:50 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2002-05-09 15:59:50 +0000 |
commit | 8c8a37061a738cc435b27e74f2320dae03c06318 (patch) | |
tree | 006c8a1a0f7d7b197e72c287553d285100e12fdb /lib/Target/CBackend/CBackend.cpp | |
parent | 8c3c4bfcfe52e7eed35031d7271c8d8e5e3bd6f9 (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.cpp | 15 |
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); |