aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/Target/X86/InstSelectSimple.cpp5
-rw-r--r--lib/Target/X86/X86ISelSimple.cpp5
2 files changed, 10 insertions, 0 deletions
diff --git a/lib/Target/X86/InstSelectSimple.cpp b/lib/Target/X86/InstSelectSimple.cpp
index 91d3013ecd..6adccb15e8 100644
--- a/lib/Target/X86/InstSelectSimple.cpp
+++ b/lib/Target/X86/InstSelectSimple.cpp
@@ -307,6 +307,11 @@ void ISel::copyConstantToRegister(MachineBasicBlock *MBB,
emitGEPOperation(MBB, IP, CE->getOperand(0),
CE->op_begin()+1, CE->op_end(), R);
return;
+ } else if (CE->getOpcode() == Instruction::Cast &&
+ isa<PointerType>(CE->getType()) &&
+ isa<PointerType>(CE->getOperand(0)->getType())) {
+ copyConstantToRegister(MBB, IP, cast<Constant>(CE->getOperand(0)), R);
+ return;
}
std::cerr << "Offending expr: " << C << "\n";
diff --git a/lib/Target/X86/X86ISelSimple.cpp b/lib/Target/X86/X86ISelSimple.cpp
index 91d3013ecd..6adccb15e8 100644
--- a/lib/Target/X86/X86ISelSimple.cpp
+++ b/lib/Target/X86/X86ISelSimple.cpp
@@ -307,6 +307,11 @@ void ISel::copyConstantToRegister(MachineBasicBlock *MBB,
emitGEPOperation(MBB, IP, CE->getOperand(0),
CE->op_begin()+1, CE->op_end(), R);
return;
+ } else if (CE->getOpcode() == Instruction::Cast &&
+ isa<PointerType>(CE->getType()) &&
+ isa<PointerType>(CE->getOperand(0)->getType())) {
+ copyConstantToRegister(MBB, IP, cast<Constant>(CE->getOperand(0)), R);
+ return;
}
std::cerr << "Offending expr: " << C << "\n";