[llvm-commits] CVS: llvm/lib/Target/X86/InstSelectSimple.cpp
Chris Lattner
lattner at cs.uiuc.edu
Sun Feb 22 11:36:01 PST 2004
Changes in directory llvm/lib/Target/X86:
InstSelectSimple.cpp updated: 1.166 -> 1.167
---
Log message:
Reduce the number of pointless copies inserted due to constant pointer refs.
Also, make an assertion actually fireable!
---
Diffs of the changes: (+12 -6)
Index: llvm/lib/Target/X86/InstSelectSimple.cpp
diff -u llvm/lib/Target/X86/InstSelectSimple.cpp:1.166 llvm/lib/Target/X86/InstSelectSimple.cpp:1.167
--- llvm/lib/Target/X86/InstSelectSimple.cpp:1.166 Sun Feb 22 11:05:38 2004
+++ llvm/lib/Target/X86/InstSelectSimple.cpp Sun Feb 22 11:35:42 2004
@@ -461,8 +461,7 @@
// Copy zero (null pointer) to the register.
BMI(MBB, IP, X86::MOVri32, 1, R).addZImm(0);
} else if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(C)) {
- unsigned SrcReg = getReg(CPR->getValue(), MBB, IP);
- BMI(MBB, IP, X86::MOVrr32, 1, R).addReg(SrcReg);
+ BMI(MBB, IP, X86::MOVri32, 1, R).addGlobalAddress(CPR->getValue());
} else {
std::cerr << "Offending constant: " << C << "\n";
assert(0 && "Type not handled yet!");
@@ -2048,7 +2047,7 @@
break;
}
case Type::ULongTyID:
- assert("FIXME: not implemented: cast ulong X to fp type!");
+ assert(0 && "FIXME: not implemented: cast ulong X to fp type!");
default: // No promotion needed...
break;
}
@@ -2212,6 +2211,9 @@
User::op_iterator IdxEnd, unsigned TargetReg) {
const TargetData &TD = TM.getTargetData();
+ if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(Src))
+ Src = CPR->getValue();
+
std::vector<Value*> GEPOps;
GEPOps.resize(IdxEnd-IdxBegin+1);
GEPOps[0] = Src;
@@ -2229,9 +2231,13 @@
// The getGEPIndex operation didn't want to build an LEA. Check to see if
// all operands are consumed but the base pointer. If so, just load it
// into the register.
- unsigned BaseReg = getReg(GEPOps[0], MBB, IP);
- BMI(MBB, IP, X86::MOVrr32, 1, TargetReg).addReg(BaseReg);
- return; // we are now done
+ if (GlobalValue *GV = dyn_cast<GlobalValue>(GEPOps[0])) {
+ BMI(MBB, IP, X86::MOVri32, 1, TargetReg).addGlobalAddress(GV);
+ } else {
+ unsigned BaseReg = getReg(GEPOps[0], MBB, IP);
+ BMI(MBB, IP, X86::MOVrr32, 1, TargetReg).addReg(BaseReg);
+ }
+ break; // we are now done
} else if (const StructType *StTy = dyn_cast<StructType>(GEPTypes.back())) {
// It's a struct access. CUI is the index into the structure,
// which names the field. This index must have unsigned type.
More information about the llvm-commits
mailing list