From ece48185168ab130b1777feb86d9e3fe80eb87d2 Mon Sep 17 00:00:00 2001 From: Jakob Stoklund Olesen Date: Sun, 2 Aug 2009 19:13:03 +0000 Subject: [PATCH] Never add a kill flag to a constrained physical register in a two-addr instruction. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77906 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/MachineInstr.cpp | 3 +++ test/CodeGen/Blackfin/cmp-small-imm.ll | 3 --- test/CodeGen/Blackfin/promote-setcc.ll | 3 --- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/lib/CodeGen/MachineInstr.cpp b/lib/CodeGen/MachineInstr.cpp index 4ac2896d370..006a10a0ce6 100644 --- a/lib/CodeGen/MachineInstr.cpp +++ b/lib/CodeGen/MachineInstr.cpp @@ -1041,6 +1041,9 @@ bool MachineInstr::addRegisterKilled(unsigned IncomingReg, if (MO.isKill()) // The register is already marked kill. return true; + if (isPhysReg && isRegTiedToDefOperand(i)) + // Two-address uses of physregs must not be marked kill. + return true; MO.setIsKill(); Found = true; } diff --git a/test/CodeGen/Blackfin/cmp-small-imm.ll b/test/CodeGen/Blackfin/cmp-small-imm.ll index 7d87cb07f3b..ed285a76036 100644 --- a/test/CodeGen/Blackfin/cmp-small-imm.ll +++ b/test/CodeGen/Blackfin/cmp-small-imm.ll @@ -1,7 +1,4 @@ ; RUN: llvm-as < %s | llc -march=bfin > %t -; XFAIL: * -; Assertion failed: (isUsed(Reg) && "Using an undefined register!") -; function forward, file RegisterScavenging.cpp, line 259. define i1 @cmp3(i32 %A) { %R = icmp uge i32 %A, 2 diff --git a/test/CodeGen/Blackfin/promote-setcc.ll b/test/CodeGen/Blackfin/promote-setcc.ll index b686c542717..585532521e7 100644 --- a/test/CodeGen/Blackfin/promote-setcc.ll +++ b/test/CodeGen/Blackfin/promote-setcc.ll @@ -1,7 +1,4 @@ ; RUN: llvm-as < %s | llc -march=bfin > %t -; XFAIL: * -; Assertion failed: (isUsed(Reg) && "Using an undefined register!"), -; function forward, file RegisterScavenging.cpp, line 259. ; The DAG combiner may sometimes create illegal i16 SETCC operations when run ; after LegalizeOps. Try to tease out all the optimizations in -- 2.34.1