From: Misha Brukman Date: Fri, 7 Nov 2003 21:07:30 +0000 (+0000) Subject: Implement branching to a PC-relative constant (not a BasicBlock). X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=52709450c826efea71d6d94661e47d002b770ea1;p=oota-llvm.git Implement branching to a PC-relative constant (not a BasicBlock). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9793 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/SparcV9/SparcV9CodeEmitter.cpp b/lib/Target/SparcV9/SparcV9CodeEmitter.cpp index a674d8a00cc..5863fd67b46 100644 --- a/lib/Target/SparcV9/SparcV9CodeEmitter.cpp +++ b/lib/Target/SparcV9/SparcV9CodeEmitter.cpp @@ -593,8 +593,13 @@ int64_t SparcV9CodeEmitter::getMachineOpValue(MachineInstr &MI, unsigned* CurrPC = (unsigned*)(intptr_t)MCE.getCurrentPCValue(); BBRefs.push_back(std::make_pair(BB, std::make_pair(CurrPC, &MI))); } else if (const Constant *C = dyn_cast(V)) { - std::cerr << "ERROR: constants should not appear in PcRel:" << MO << "\n"; - abort(); + if (const ConstantInt *CI = dyn_cast(C)) { + rv = CI->getRawValue() - MCE.getCurrentPCValue(); + } else { + std::cerr << "Cannot have non-integral const in instruction: " + << *C; + abort(); + } } else if (GlobalValue *GV = dyn_cast(V)) { // same as MO.isGlobalAddress() DEBUG(std::cerr << "GlobalValue: "); @@ -797,11 +802,6 @@ void* SparcV9CodeEmitter::getGlobalAddress(GlobalValue *V, MachineInstr &MI, // Delayed resolution... return (void*)(intptr_t)TheJITResolver->getLazyResolver(cast(V)); - - } else if (Constant *C = ConstantPointerRef::get(V)) { - // no longer applicable - std::cerr << "Unhandled Constant: " << *C << "\n"; - abort(); } else { std::cerr << "Unhandled global: " << *V << "\n"; abort();