diff options
author | Tim Northover <tnorthover@apple.com> | 2017-02-24 21:21:38 +0000 |
---|---|---|
committer | Tim Northover <tnorthover@apple.com> | 2017-02-24 21:21:38 +0000 |
commit | ef29e7284b355e5ca8931e73bf6312d33a549c23 (patch) | |
tree | 97527a76f6ea7a01ec8d543b86b620f5068c61cb /llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp | |
parent | cd72f156d693aa61a93c1369daf51e43b9982c78 (diff) | |
download | bcm5719-llvm-ef29e7284b355e5ca8931e73bf6312d33a549c23.tar.gz bcm5719-llvm-ef29e7284b355e5ca8931e73bf6312d33a549c23.zip |
GlobalISel: check for CImm rather than Imm on G_CONSTANTs.
All G_CONSTANTS created by the MachineIRBuilder have an operand of type CImm
(i.e. a ConstantInt), so that's what the selector needs to look for.
llvm-svn: 296176
Diffstat (limited to 'llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp')
-rw-r--r-- | llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp index a38ff00ed41..c1e4a8661a2 100644 --- a/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp +++ b/llvm/lib/CodeGen/GlobalISel/InstructionSelect.cpp @@ -20,6 +20,7 @@ #include "llvm/CodeGen/MachineOptimizationRemarkEmitter.h" #include "llvm/CodeGen/MachineRegisterInfo.h" #include "llvm/CodeGen/TargetPassConfig.h" +#include "llvm/IR/Constants.h" #include "llvm/IR/Function.h" #include "llvm/Support/CommandLine.h" #include "llvm/Support/Debug.h" @@ -187,8 +188,10 @@ bool InstructionSelector::isOperandImmEqual( MachineInstr *Def = MRI.getVRegDef(MO.getReg()); if (Def->getOpcode() != TargetOpcode::G_CONSTANT) return false; - assert(Def->getOperand(1).isImm() && "G_CONSTANT values must be constants"); - return Def->getOperand(1).getImm() == Value; + assert(Def->getOperand(1).isCImm() && + "G_CONSTANT values must be constants"); + const ConstantInt &Imm = *Def->getOperand(1).getCImm(); + return Imm.getBitWidth() <= 64 && Imm.getSExtValue() == Value; } return false; |