summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
diff options
context:
space:
mode:
authorUlrich Weigand <ulrich.weigand@de.ibm.com>2017-09-28 22:08:25 +0000
committerUlrich Weigand <ulrich.weigand@de.ibm.com>2017-09-28 22:08:25 +0000
commitdf86855f61bb6ad41f683a5d615f77ab207fade4 (patch)
tree54dd7b2a42bcc2a677c4061134e472bc8d79e4f8 /llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
parente8c0e558a40a68aa6db8b6436f391c42329b0481 (diff)
downloadbcm5719-llvm-df86855f61bb6ad41f683a5d615f77ab207fade4.tar.gz
bcm5719-llvm-df86855f61bb6ad41f683a5d615f77ab207fade4.zip
[SystemZ] Fix fall-out from r314428
The expensive-checks build bot found a problem with the r314428 commit: if CC is live after a ATOMIC_CMP_SWAPW instruction, it needs to be marked as live-in to the block after the loop the pseudo gets expanded to. This actually fixes a code-gen bug as well, since if the CC isn't live, the CR and JLH are merged to a CRJLH which doesn't actually set the condition code any more. llvm-svn: 314465
Diffstat (limited to 'llvm/lib/Target/SystemZ/SystemZISelLowering.cpp')
-rw-r--r--llvm/lib/Target/SystemZ/SystemZISelLowering.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
index be7c5e430fc..d49d7316e68 100644
--- a/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
+++ b/llvm/lib/Target/SystemZ/SystemZISelLowering.cpp
@@ -6027,6 +6027,12 @@ SystemZTargetLowering::emitAtomicCmpSwapW(MachineInstr &MI,
MBB->addSuccessor(LoopMBB);
MBB->addSuccessor(DoneMBB);
+ // If the CC def wasn't dead in the ATOMIC_CMP_SWAPW, mark CC as live-in
+ // to the block after the loop. At this point, CC may have been defined
+ // either by the CR in LoopMBB or by the CS in SetMBB.
+ if (!MI.registerDefIsDead(SystemZ::CC))
+ DoneMBB->addLiveIn(SystemZ::CC);
+
MI.eraseFromParent();
return DoneMBB;
}
OpenPOWER on IntegriCloud