diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb1InstrInfo.cpp | 17 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/Thumb2InstrInfo.cpp | 17 | 
2 files changed, 28 insertions, 6 deletions
diff --git a/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp b/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp index 4e4561db729..b1ddf05db87 100644 --- a/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp +++ b/llvm/lib/Target/ARM/Thumb1InstrInfo.cpp @@ -16,6 +16,8 @@  #include "ARMConstantPoolValue.h"  #include "ARMGenInstrInfo.inc"  #include "ARMMachineFunctionInfo.h" +#include "llvm/Constants.h" +#include "llvm/Function.h"  #include "llvm/GlobalValue.h"  #include "llvm/CodeGen/MachineConstantPool.h"  #include "llvm/CodeGen/MachineFrameInfo.h" @@ -290,10 +292,19 @@ void Thumb1InstrInfo::reMaterialize(MachineBasicBlock &MBB,             "Expecting a machine constantpool entry!");      ARMConstantPoolValue *ACPV =        static_cast<ARMConstantPoolValue*>(MCPE.Val.MachineCPVal); -    assert(ACPV->isGlobalValue() && "Expecting a GV!");      unsigned PCLabelId = AFI->createConstPoolEntryUId(); -    ARMConstantPoolValue *NewCPV = -      new ARMConstantPoolValue(ACPV->getGV(), PCLabelId, ARMCP::CPValue, 4); +    ARMConstantPoolValue *NewCPV = 0; +    if (ACPV->isGlobalValue()) +      NewCPV = new ARMConstantPoolValue(ACPV->getGV(), PCLabelId, +                                        ARMCP::CPValue, 4); +    else if (ACPV->isExtSymbol()) +      NewCPV = new ARMConstantPoolValue(MF.getFunction()->getContext(), +                                        ACPV->getSymbol(), PCLabelId, 4); +    else if (ACPV->isBlockAddress()) +      NewCPV = new ARMConstantPoolValue(ACPV->getBlockAddress(), PCLabelId, +                                        ARMCP::CPBlockAddress, 4); +    else +      llvm_unreachable("Unexpected ARM constantpool value type!!");      CPI = MCP->getConstantPoolIndex(NewCPV, MCPE.getAlignment());      MachineInstrBuilder MIB = BuildMI(MBB, I, Orig->getDebugLoc(), get(Opcode),                                        DestReg) diff --git a/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp b/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp index da8ceb462b0..6f24bcca11f 100644 --- a/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp +++ b/llvm/lib/Target/ARM/Thumb2InstrInfo.cpp @@ -17,6 +17,8 @@  #include "ARMAddressingModes.h"  #include "ARMGenInstrInfo.inc"  #include "ARMMachineFunctionInfo.h" +#include "llvm/Constants.h" +#include "llvm/Function.h"  #include "llvm/GlobalValue.h"  #include "llvm/CodeGen/MachineConstantPool.h"  #include "llvm/CodeGen/MachineFrameInfo.h" @@ -158,10 +160,19 @@ void Thumb2InstrInfo::reMaterialize(MachineBasicBlock &MBB,             "Expecting a machine constantpool entry!");      ARMConstantPoolValue *ACPV =        static_cast<ARMConstantPoolValue*>(MCPE.Val.MachineCPVal); -    assert(ACPV->isGlobalValue() && "Expecting a GV!");      unsigned PCLabelId = AFI->createConstPoolEntryUId(); -    ARMConstantPoolValue *NewCPV = -      new ARMConstantPoolValue(ACPV->getGV(), PCLabelId, ARMCP::CPValue, 4); +    ARMConstantPoolValue *NewCPV = 0; +    if (ACPV->isGlobalValue()) +      NewCPV = new ARMConstantPoolValue(ACPV->getGV(), PCLabelId, +                                        ARMCP::CPValue, 4); +    else if (ACPV->isExtSymbol()) +      NewCPV = new ARMConstantPoolValue(MF.getFunction()->getContext(), +                                        ACPV->getSymbol(), PCLabelId, 4); +    else if (ACPV->isBlockAddress()) +      NewCPV = new ARMConstantPoolValue(ACPV->getBlockAddress(), PCLabelId, +                                        ARMCP::CPBlockAddress, 4); +    else +      llvm_unreachable("Unexpected ARM constantpool value type!!");      CPI = MCP->getConstantPoolIndex(NewCPV, MCPE.getAlignment());      MachineInstrBuilder MIB = BuildMI(MBB, I, Orig->getDebugLoc(), get(Opcode),                                        DestReg)  | 

