mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 20:51:52 +01:00
[SystemZ] Fixes in the backend I/R.
expandPostRAPseudo(): STX -> 2 * STD: The first STD should not have the kill flag set for the address. SystemZElimCompare: BRC -> BRCT conversion: Don't forget to remove the CC<use,kill> operand. Needed to make SystemZ/asm-17.ll pass with -verify-machineinstrs, which now runs with this flag. Reviewed by Ulrich Weigand. llvm-svn: 249945
This commit is contained in:
parent
27d6cafd03
commit
4a28de9033
@ -206,9 +206,8 @@ SystemZElimCompare::convertToBRCT(MachineInstr *MI, MachineInstr *Compare,
|
||||
|
||||
// The transformation is OK. Rebuild Branch as a BRCT(G).
|
||||
MachineOperand Target(Branch->getOperand(2));
|
||||
Branch->RemoveOperand(2);
|
||||
Branch->RemoveOperand(1);
|
||||
Branch->RemoveOperand(0);
|
||||
while (Branch->getNumOperands())
|
||||
Branch->RemoveOperand(0);
|
||||
Branch->setDesc(TII->get(BRCT));
|
||||
MachineInstrBuilder(*Branch->getParent()->getParent(), Branch)
|
||||
.addOperand(MI->getOperand(0))
|
||||
|
@ -69,6 +69,9 @@ void SystemZInstrInfo::splitMove(MachineBasicBlock::iterator MI,
|
||||
MachineOperand &LowOffsetOp = MI->getOperand(2);
|
||||
LowOffsetOp.setImm(LowOffsetOp.getImm() + 8);
|
||||
|
||||
// Clear the kill flag for the address reg in the first instruction.
|
||||
EarlierMI->getOperand(1).setIsKill(false);
|
||||
|
||||
// Set the opcodes.
|
||||
unsigned HighOpcode = getOpcodeForOffset(NewOpcode, HighOffsetOp.getImm());
|
||||
unsigned LowOpcode = getOpcodeForOffset(NewOpcode, LowOffsetOp.getImm());
|
||||
|
@ -1,6 +1,7 @@
|
||||
; Test explicit register names.
|
||||
;
|
||||
; RUN: llc < %s -mtriple=s390x-linux-gnu -no-integrated-as | FileCheck %s
|
||||
; RUN: llc < %s -verify-machineinstrs -mtriple=s390x-linux-gnu -no-integrated-as \
|
||||
; RUN: | FileCheck %s
|
||||
|
||||
; Test i32 GPRs.
|
||||
define i32 @f1() {
|
||||
|
Loading…
x
Reference in New Issue
Block a user