summaryrefslogtreecommitdiffstats
path: root/llvm
diff options
context:
space:
mode:
authorAndrew Lenharth <andrewl@lenharth.org>2005-02-02 00:51:15 +0000
committerAndrew Lenharth <andrewl@lenharth.org>2005-02-02 00:51:15 +0000
commitae88b6a8a852fe21d0b8994ae1caa19d11371aa7 (patch)
treeccc69b91b72f2f31ead95e6265904217a4d20800 /llvm
parent7c04a3ddb649daf2eff6dbd5637d4ead0b0164f9 (diff)
downloadbcm5719-llvm-ae88b6a8a852fe21d0b8994ae1caa19d11371aa7.tar.gz
bcm5719-llvm-ae88b6a8a852fe21d0b8994ae1caa19d11371aa7.zip
better constant handling, should fix many remaining cases
llvm-svn: 19984
Diffstat (limited to 'llvm')
-rw-r--r--llvm/lib/Target/Alpha/AlphaISelPattern.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/llvm/lib/Target/Alpha/AlphaISelPattern.cpp b/llvm/lib/Target/Alpha/AlphaISelPattern.cpp
index dcd2407084a..e8de3c8bd7b 100644
--- a/llvm/lib/Target/Alpha/AlphaISelPattern.cpp
+++ b/llvm/lib/Target/Alpha/AlphaISelPattern.cpp
@@ -1021,8 +1021,17 @@ unsigned ISel::SelectExpr(SDOperand N) {
case ISD::Constant:
{
- long val = cast<ConstantSDNode>(N)->getValue();
- BuildMI(BB, Alpha::LOAD_IMM, 1, Result).addImm(val);
+ unsigned long val = cast<ConstantSDNode>(N)->getValue();
+ if (val < 32000 && (long)val > -32000)
+ BuildMI(BB, Alpha::LOAD_IMM, 1, Result).addImm(val);
+ else
+ {
+ MachineConstantPool *CP = BB->getParent()->getConstantPool();
+ ConstantUInt *C = ConstantUInt::get(Type::getPrimitiveType(Type::ULongTyID) , val);
+ unsigned CPI = CP->getConstantPoolIndex(C);
+ AlphaLowering.restoreGP(BB);
+ BuildMI(BB, Alpha::LOAD, 1, Result).addConstantPoolIndex(CPI);
+ }
return Result;
}
OpenPOWER on IntegriCloud