1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2025-01-31 20:51:52 +01:00

[MSP430] Fix PR33050: Don't use ADD16ri to lower FrameIndex.

Use ADDframe pseudo instruction instead.
This will fix machine verifier error, and will help to fix PR32146.

Differential Revision: https://reviews.llvm.org/D33452

llvm-svn: 303758
This commit is contained in:
Vadzim Dambrouski 2017-05-24 15:08:30 +00:00
parent 49b8ffb260
commit a6f62bac86
4 changed files with 9 additions and 4 deletions

View File

@ -403,12 +403,12 @@ void MSP430DAGToDAGISel::Select(SDNode *Node) {
int FI = cast<FrameIndexSDNode>(Node)->getIndex(); int FI = cast<FrameIndexSDNode>(Node)->getIndex();
SDValue TFI = CurDAG->getTargetFrameIndex(FI, MVT::i16); SDValue TFI = CurDAG->getTargetFrameIndex(FI, MVT::i16);
if (Node->hasOneUse()) { 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)); CurDAG->getTargetConstant(0, dl, MVT::i16));
return; return;
} }
ReplaceNode(Node, CurDAG->getMachineNode( ReplaceNode(Node, CurDAG->getMachineNode(
MSP430::ADD16ri, dl, MVT::i16, TFI, MSP430::ADDframe, dl, MVT::i16, TFI,
CurDAG->getTargetConstant(0, dl, MVT::i16))); CurDAG->getTargetConstant(0, dl, MVT::i16)));
return; return;
} }

View File

@ -122,6 +122,11 @@ def ADJCALLSTACKUP : Pseudo<(outs), (ins i16imm:$amt1, i16imm:$amt2),
[(MSP430callseq_end timm:$amt1, timm:$amt2)]>; [(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 usesCustomInserter = 1 in {
let Uses = [SR] in { let Uses = [SR] in {
def Select8 : Pseudo<(outs GR8:$dst), (ins GR8:$src, GR8:$src2, i8imm:$cc), def Select8 : Pseudo<(outs GR8:$dst), (ins GR8:$src, GR8:$src2, i8imm:$cc),

View File

@ -127,7 +127,7 @@ MSP430RegisterInfo::eliminateFrameIndex(MachineBasicBlock::iterator II,
// Fold imm into offset // Fold imm into offset
Offset += MI.getOperand(FIOperandNum + 1).getImm(); 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 // This is actually "load effective address" of the stack slot
// instruction. We have only two-address instructions, thus we need to // instruction. We have only two-address instructions, thus we need to
// expand it into mov + add // expand it into mov + add

View File

@ -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 datalayout = "e-p:16:16:16-i8:8:8-i16:16:16-i32:16:32-n8:16"
target triple = "msp430---elf" target triple = "msp430---elf"