1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-24 11:42:57 +01:00

CPR fixes

llvm-svn: 14960
This commit is contained in:
Chris Lattner 2004-07-18 07:26:17 +00:00
parent a68de99e30
commit b56b3b5eeb
2 changed files with 5 additions and 6 deletions

View File

@ -288,14 +288,13 @@ void V8ISel::copyConstantToRegister(MachineBasicBlock *MBB,
} else if (isa<ConstantPointerNull>(C)) { } else if (isa<ConstantPointerNull>(C)) {
// Copy zero (null pointer) to the register. // Copy zero (null pointer) to the register.
BuildMI (*MBB, IP, V8::ORri, 2, R).addReg (V8::G0).addSImm (0); BuildMI (*MBB, IP, V8::ORri, 2, R).addReg (V8::G0).addSImm (0);
} else if (ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(C)) { } else if (GlobalValue *GV = dyn_cast<GlobalValue>(C)) {
// Copy it with a SETHI/OR pair; the JIT + asmwriter should recognize // Copy it with a SETHI/OR pair; the JIT + asmwriter should recognize
// that SETHI %reg,global == SETHI %reg,%hi(global) and // that SETHI %reg,global == SETHI %reg,%hi(global) and
// OR %reg,global,%reg == OR %reg,%lo(global),%reg. // OR %reg,global,%reg == OR %reg,%lo(global),%reg.
unsigned TmpReg = makeAnotherReg (C->getType ()); unsigned TmpReg = makeAnotherReg (C->getType ());
BuildMI (*MBB, IP, V8::SETHIi, 1, TmpReg).addGlobalAddress (CPR->getValue()); BuildMI (*MBB, IP, V8::SETHIi, 1, TmpReg).addGlobalAddress(GV);
BuildMI (*MBB, IP, V8::ORri, 2, R).addReg (TmpReg) BuildMI (*MBB, IP, V8::ORri, 2, R).addReg(TmpReg).addGlobalAddress(GV);
.addGlobalAddress (CPR->getValue ());
} else { } else {
std::cerr << "Offending constant: " << *C << "\n"; std::cerr << "Offending constant: " << *C << "\n";
assert (0 && "Can't copy this kind of constant into register yet"); assert (0 && "Can't copy this kind of constant into register yet");

View File

@ -143,10 +143,10 @@ void V8Printer::emitConstantValueOnly(const Constant *CV) {
O << (unsigned long long)CI->getValue(); O << (unsigned long long)CI->getValue();
else if (const ConstantUInt *CI = dyn_cast<ConstantUInt>(CV)) else if (const ConstantUInt *CI = dyn_cast<ConstantUInt>(CV))
O << CI->getValue(); O << CI->getValue();
else if (const ConstantPointerRef *CPR = dyn_cast<ConstantPointerRef>(CV)) else if (const GlobalValue *GV = dyn_cast<GlobalValue>(CV))
// This is a constant address for a global variable or function. Use the // This is a constant address for a global variable or function. Use the
// name of the variable or function as the address value. // name of the variable or function as the address value.
O << Mang->getValueName(CPR->getValue()); O << Mang->getValueName(GV);
else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) { else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CV)) {
const TargetData &TD = TM.getTargetData(); const TargetData &TD = TM.getTargetData();
switch(CE->getOpcode()) { switch(CE->getOpcode()) {