[llvm] r296176 - GlobalISel: check for CImm rather than Imm on G_CONSTANTs.
Tim Northover via llvm-commits
llvm-commits at lists.llvm.org
Fri Feb 24 13:21:38 PST 2017
Author: tnorthover
Date: Fri Feb 24 15:21:38 2017
New Revision: 296176
URL: http://llvm.org/viewvc/llvm-project?rev=296176&view=rev
Log:
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.
Modified:
llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp
llvm/trunk/test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-xor.mir
Modified: llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp?rev=296176&r1=296175&r2=296176&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp (original)
+++ llvm/trunk/lib/CodeGen/GlobalISel/InstructionSelect.cpp Fri Feb 24 15:21:38 2017
@@ -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::isOperandImmEq
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;
Modified: llvm/trunk/test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-xor.mir
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-xor.mir?rev=296176&r1=296175&r2=296176&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-xor.mir (original)
+++ llvm/trunk/test/CodeGen/AArch64/GlobalISel/arm64-instructionselect-xor.mir Fri Feb 24 15:21:38 2017
@@ -100,7 +100,7 @@ body: |
liveins: %w0
%0(s32) = COPY %w0
- %1(s32) = G_CONSTANT -1
+ %1(s32) = G_CONSTANT i64 -1
%2(s32) = G_XOR %0, %1
...
@@ -128,7 +128,7 @@ body: |
liveins: %x0
%0(s64) = COPY %x0
- %1(s64) = G_CONSTANT -1
+ %1(s64) = G_CONSTANT i64 -1
%2(s64) = G_XOR %0, %1
...
@@ -157,10 +157,9 @@ body: |
bb.0:
liveins: %w0, %w1
successors: %bb.1
- %1(s32) = G_CONSTANT -1
+ %1(s32) = G_CONSTANT i64 -1
G_BR %bb.1
bb.1:
%0(s32) = COPY %w0
%2(s32) = G_XOR %0, %1
...
-
More information about the llvm-commits
mailing list