diff options
| author | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2019-06-18 12:10:02 +0000 | 
|---|---|---|
| committer | Jonas Paulsson <paulsson@linux.vnet.ibm.com> | 2019-06-18 12:10:02 +0000 | 
| commit | 5c64a8c4c6942cd8b36ccd84cc8bb59060892e9a (patch) | |
| tree | 274835a3d3ae056726cdb99589bfef581c87944a | |
| parent | 8d41294c18930edb3f46f1e9d721ce6930bf9b99 (diff) | |
| download | bcm5719-llvm-5c64a8c4c6942cd8b36ccd84cc8bb59060892e9a.tar.gz bcm5719-llvm-5c64a8c4c6942cd8b36ccd84cc8bb59060892e9a.zip  | |
[SystemZ]  Fix AHIMuxK pseudo expansion.
Do not emit a copy if the source and destination registers are the same.
Review: Ulrich Weigand
llvm-svn: 363665
| -rw-r--r-- | llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp | 10 | ||||
| -rw-r--r-- | llvm/test/CodeGen/SystemZ/int-add-18.mir | 20 | 
2 files changed, 26 insertions, 4 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp b/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp index 865ce0320e5..adb96fa15cb 100644 --- a/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp +++ b/llvm/lib/Target/SystemZ/SystemZInstrInfo.cpp @@ -168,11 +168,13 @@ void SystemZInstrInfo::expandRIEPseudo(MachineInstr &MI, unsigned LowOpcode,    if (!DestIsHigh && !SrcIsHigh)      MI.setDesc(get(LowOpcodeK));    else { -    emitGRX32Move(*MI.getParent(), MI, MI.getDebugLoc(), DestReg, SrcReg, -                  SystemZ::LR, 32, MI.getOperand(1).isKill(), -                  MI.getOperand(1).isUndef()); +    if (DestReg != SrcReg) { +      emitGRX32Move(*MI.getParent(), MI, MI.getDebugLoc(), DestReg, SrcReg, +                    SystemZ::LR, 32, MI.getOperand(1).isKill(), +                    MI.getOperand(1).isUndef()); +      MI.getOperand(1).setReg(DestReg); +    }      MI.setDesc(get(DestIsHigh ? HighOpcode : LowOpcode)); -    MI.getOperand(1).setReg(DestReg);      MI.tieOperands(0, 1);    }  } diff --git a/llvm/test/CodeGen/SystemZ/int-add-18.mir b/llvm/test/CodeGen/SystemZ/int-add-18.mir new file mode 100644 index 00000000000..0137be95c51 --- /dev/null +++ b/llvm/test/CodeGen/SystemZ/int-add-18.mir @@ -0,0 +1,20 @@ +# RUN: llc -mtriple=s390x-linux-gnu -mcpu=z13 -start-before=postrapseudos \ +# RUN:   %s -o - | FileCheck %s +# +# Test that an AHIMuxK pseudo does not result in a COPY (risbhg) if the +# source and destination registers are the same. + +--- +name:             fun +tracksRegLiveness: true +body:             | +  bb.0: +    $r1h = IIHF 0 +    renamable $r1h = nuw nsw AHIMuxK killed renamable $r1h, 4, implicit-def dead $cc + +    ; CHECK-LABEL: fun +    ; CHECK-NOT: risbhg +    ; CHECK: aih %r1, 4 +... + +  | 

