From: Vikram S. Adve Date: Wed, 14 Nov 2001 17:24:49 +0000 (+0000) Subject: Don't need to load a NULL pointer constant from memory! X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=c81174515659e15f2907ec8ced09c6f775738dfa;p=oota-llvm.git Don't need to load a NULL pointer constant from memory! git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@1305 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp index cb3f9a15822..7fe3e60f7fc 100644 --- a/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp +++ b/lib/CodeGen/InstrSelection/InstrSelectionSupport.cpp @@ -241,14 +241,22 @@ ChooseRegOrImmed(Value* val, return MachineOperand::MO_SignExtendedImmed; } - if (!CPV->getType()->isIntegral()) return opType; - + // Otherwise it needs to be an integer or a NULL pointer + if (! CPV->getType()->isIntegral() && + ! (CPV->getType()->isPointerType() && + CPV->isNullValue())) + return opType; + // Now get the constant value and check if it fits in the IMMED field. // Take advantage of the fact that the max unsigned value will rarely // fit into any IMMED field and ignore that case (i.e., cast smaller // unsigned constants to signed). // int64_t intValue; + if (CPV->getType()->isPointerType()) + { + intValue = 0; + } if (CPV->getType()->isSigned()) { intValue = ((ConstPoolSInt*)CPV)->getValue(); diff --git a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp index cb3f9a15822..7fe3e60f7fc 100644 --- a/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp +++ b/lib/Target/SparcV9/InstrSelection/InstrSelectionSupport.cpp @@ -241,14 +241,22 @@ ChooseRegOrImmed(Value* val, return MachineOperand::MO_SignExtendedImmed; } - if (!CPV->getType()->isIntegral()) return opType; - + // Otherwise it needs to be an integer or a NULL pointer + if (! CPV->getType()->isIntegral() && + ! (CPV->getType()->isPointerType() && + CPV->isNullValue())) + return opType; + // Now get the constant value and check if it fits in the IMMED field. // Take advantage of the fact that the max unsigned value will rarely // fit into any IMMED field and ignore that case (i.e., cast smaller // unsigned constants to signed). // int64_t intValue; + if (CPV->getType()->isPointerType()) + { + intValue = 0; + } if (CPV->getType()->isSigned()) { intValue = ((ConstPoolSInt*)CPV)->getValue();