From 436e7ea464665201747c1cfe5135339d6638a62b Mon Sep 17 00:00:00 2001 From: Jonas Paulsson Date: Mon, 26 Oct 2015 15:03:07 +0000 Subject: [PATCH] [SystemZ] Tie operands in SystemZShorteInst if MI becomes 2-address. Discovered by testing fp-add-02.ll with -verify-machineinstrs. Test case updated to always run with -verify-machineinstrs. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@251296 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/SystemZ/SystemZShortenInst.cpp | 11 ++++++++++- test/CodeGen/SystemZ/fp-add-02.ll | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/Target/SystemZ/SystemZShortenInst.cpp b/lib/Target/SystemZ/SystemZShortenInst.cpp index 87db4f46fcd..846edd51341 100644 --- a/lib/Target/SystemZ/SystemZShortenInst.cpp +++ b/lib/Target/SystemZ/SystemZShortenInst.cpp @@ -59,6 +59,13 @@ FunctionPass *llvm::createSystemZShortenInstPass(SystemZTargetMachine &TM) { SystemZShortenInst::SystemZShortenInst(const SystemZTargetMachine &tm) : MachineFunctionPass(ID), TII(nullptr) {} +// Tie operands if MI has become a two-address instruction. +static void tieOpsIfNeeded(MachineInstr &MI) { + if (MI.getDesc().getOperandConstraint(0, MCOI::TIED_TO) && + !MI.getOperand(0).isTied()) + MI.tieOperands(0, 1); +} + // MI loads one word of a GPR using an IIxF instruction and LLIxL and LLIxH // are the halfword immediate loads for the same word. Try to use one of them // instead of IIxF. @@ -113,12 +120,14 @@ bool SystemZShortenInst::shortenOn01(MachineInstr &MI, unsigned Opcode) { } // Change MI's opcode to Opcode if register operands 0, 1 and 2 have a -// 4-bit encoding and if operands 0 and 1 are tied. +// 4-bit encoding and if operands 0 and 1 are tied. Also ties op 0 +// with op 1, if MI becomes 2-address. bool SystemZShortenInst::shortenOn001(MachineInstr &MI, unsigned Opcode) { if (SystemZMC::getFirstReg(MI.getOperand(0).getReg()) < 16 && MI.getOperand(1).getReg() == MI.getOperand(0).getReg() && SystemZMC::getFirstReg(MI.getOperand(2).getReg()) < 16) { MI.setDesc(TII->get(Opcode)); + tieOpsIfNeeded(MI); return true; } return false; diff --git a/test/CodeGen/SystemZ/fp-add-02.ll b/test/CodeGen/SystemZ/fp-add-02.ll index 5be1ad79d45..4f98742197b 100644 --- a/test/CodeGen/SystemZ/fp-add-02.ll +++ b/test/CodeGen/SystemZ/fp-add-02.ll @@ -2,7 +2,7 @@ ; ; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z10 \ ; RUN: | FileCheck -check-prefix=CHECK -check-prefix=CHECK-SCALAR %s -; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 | FileCheck %s +; RUN: llc < %s -mtriple=s390x-linux-gnu -mcpu=z13 -verify-machineinstrs | FileCheck %s declare double @foo() ; Check register addition. -- 2.34.1