[PATCH] D33452: [MSP430] Fix PR33050: Don't use ADD16ri to lower FrameIndex.
Vadzim Dambrouski via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue May 23 11:24:55 PDT 2017
pftbest created this revision.
Use ADDframe pseudo instruction instead.
This will fix machine verifier error, and will help to fix PR32146.
https://reviews.llvm.org/D33452
Files:
lib/Target/MSP430/MSP430ISelDAGToDAG.cpp
lib/Target/MSP430/MSP430InstrInfo.td
lib/Target/MSP430/MSP430RegisterInfo.cpp
test/CodeGen/MSP430/vararg.ll
Index: test/CodeGen/MSP430/vararg.ll
===================================================================
--- test/CodeGen/MSP430/vararg.ll
+++ test/CodeGen/MSP430/vararg.ll
@@ -1,4 +1,4 @@
-; RUN: llc < %s | FileCheck %s
+; RUN: llc -verify-machineinstrs < %s | FileCheck %s
target datalayout = "e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16"
target triple = "msp430---elf"
Index: lib/Target/MSP430/MSP430RegisterInfo.cpp
===================================================================
--- lib/Target/MSP430/MSP430RegisterInfo.cpp
+++ lib/Target/MSP430/MSP430RegisterInfo.cpp
@@ -127,7 +127,7 @@
// Fold imm into offset
Offset += MI.getOperand(FIOperandNum + 1).getImm();
- if (MI.getOpcode() == MSP430::ADD16ri) {
+ if (MI.getOpcode() == MSP430::ADDframe) {
// This is actually "load effective address" of the stack slot
// instruction. We have only two-address instructions, thus we need to
// expand it into mov + add
Index: lib/Target/MSP430/MSP430InstrInfo.td
===================================================================
--- lib/Target/MSP430/MSP430InstrInfo.td
+++ lib/Target/MSP430/MSP430InstrInfo.td
@@ -122,6 +122,11 @@
[(MSP430callseq_end timm:$amt1, timm:$amt2)]>;
}
+let Defs = [SR], Uses = [SP] in {
+def ADDframe : Pseudo<(outs GR16:$dst), (ins i16imm:$base, i16imm:$offset),
+ "# ADDframe PSEUDO", []>;
+}
+
let usesCustomInserter = 1 in {
let Uses = [SR] in {
def Select8 : Pseudo<(outs GR8:$dst), (ins GR8:$src, GR8:$src2, i8imm:$cc),
Index: lib/Target/MSP430/MSP430ISelDAGToDAG.cpp
===================================================================
--- lib/Target/MSP430/MSP430ISelDAGToDAG.cpp
+++ lib/Target/MSP430/MSP430ISelDAGToDAG.cpp
@@ -403,12 +403,12 @@
int FI = cast<FrameIndexSDNode>(Node)->getIndex();
SDValue TFI = CurDAG->getTargetFrameIndex(FI, MVT::i16);
if (Node->hasOneUse()) {
- CurDAG->SelectNodeTo(Node, MSP430::ADD16ri, MVT::i16, TFI,
+ CurDAG->SelectNodeTo(Node, MSP430::ADDframe, MVT::i16, TFI,
CurDAG->getTargetConstant(0, dl, MVT::i16));
return;
}
ReplaceNode(Node, CurDAG->getMachineNode(
- MSP430::ADD16ri, dl, MVT::i16, TFI,
+ MSP430::ADDframe, dl, MVT::i16, TFI,
CurDAG->getTargetConstant(0, dl, MVT::i16)));
return;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D33452.99957.patch
Type: text/x-patch
Size: 2424 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170523/12ba05e0/attachment.bin>
More information about the llvm-commits
mailing list