]> granicus.if.org Git - llvm/commitdiff
[globalisel] Correct G_CONSTANT path of selectArithImmed()
authorDaniel Sanders <daniel_l_sanders@apple.com>
Thu, 16 Mar 2017 18:04:50 +0000 (18:04 +0000)
committerDaniel Sanders <daniel_l_sanders@apple.com>
Thu, 16 Mar 2017 18:04:50 +0000 (18:04 +0000)
Earlier stages of GlobalISel always use ConstantInt in G_CONSTANT so that's
what we should check for.

This fixes a crash introduced in r297782.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@297968 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/AArch64/AArch64InstructionSelector.cpp
test/CodeGen/AArch64/GlobalISel/select-binop.mir

index e4f3fa86c134c69b4982e99050669b5e18ffbea3..6490d88a3c8c7b30cd0dbe7c6af0a30a7d78d501 100644 (file)
@@ -1246,7 +1246,10 @@ bool AArch64InstructionSelector::selectArithImmed(
     MachineInstr *Def = MRI.getVRegDef(Root.getReg());
     if (Def->getOpcode() != TargetOpcode::G_CONSTANT)
       return false;
-    Immed = Def->getOperand(1).getImm();
+    MachineOperand &Op1 = Def->getOperand(1);
+    if (!Op1.isCImm() || Op1.getCImm()->getBitWidth() > 64)
+      return false;
+    Immed = Op1.getCImm()->getZExtValue();
   } else
     return false;
 
index c922af710dcee2dfe2aaee4a8353dbfdb8da7fdc..7821bc0136a56900a55371a89bb52683b65590be 100644 (file)
@@ -137,7 +137,7 @@ body:             |
     liveins: %w0, %w1
 
     %0(s32) = COPY %w0
-    %1(s32) = G_CONSTANT 1
+    %1(s32) = G_CONSTANT i32 1
     %2(s32) = G_ADD %0, %1
 ...
 
@@ -193,7 +193,7 @@ body:             |
     successors: %bb.1
 
     %0(s32) = COPY %w0
-    %1(s32) = G_CONSTANT 1
+    %1(s32) = G_CONSTANT i32 1
     G_BR %bb.1
 
   bb.1: