From: Ulrich Weigand Date: Thu, 28 Sep 2017 22:08:25 +0000 (+0000) Subject: [SystemZ] Fix fall-out from r314428 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a4828c8a028045a0c4429f8b551d9b404969cf18;p=llvm [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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@314465 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/SystemZ/SystemZISelLowering.cpp b/lib/Target/SystemZ/SystemZISelLowering.cpp index be7c5e430fc..d49d7316e68 100644 --- a/lib/Target/SystemZ/SystemZISelLowering.cpp +++ b/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; } diff --git a/test/CodeGen/SystemZ/cmpxchg-01.ll b/test/CodeGen/SystemZ/cmpxchg-01.ll index 8257a36ddde..afcf3463255 100644 --- a/test/CodeGen/SystemZ/cmpxchg-01.ll +++ b/test/CodeGen/SystemZ/cmpxchg-01.ll @@ -65,7 +65,8 @@ define i32 @f3(i8 %dummy, i8 *%src, i8 %cmp, i8 %swap) { ; CHECK-MAIN: [[LOOP:\.[^ ]*]]: ; CHECK-MAIN: rll [[TMP:%r[0-9]+]], [[OLD]], 8(%r3) ; CHECK-MAIN: risbg %r4, [[TMP]], 32, 55, 0 -; CHECK-MAIN: crjlh [[TMP]], %r4, [[EXIT:\.[^ ]*]] +; CHECK-MAIN: cr [[TMP]], %r4 +; CHECK-MAIN: jlh [[EXIT:\.[^ ]*]] ; CHECK-MAIN: risbg %r5, [[TMP]], 32, 55, 0 ; CHECK-MAIN: rll [[NEW:%r[0-9]+]], %r5, -8({{%r[1-9]+}}) ; CHECK-MAIN: cs [[OLD]], [[NEW]], 0([[RISBG]]) diff --git a/test/CodeGen/SystemZ/cmpxchg-02.ll b/test/CodeGen/SystemZ/cmpxchg-02.ll index 48e1e18db9b..dd7db09d947 100644 --- a/test/CodeGen/SystemZ/cmpxchg-02.ll +++ b/test/CodeGen/SystemZ/cmpxchg-02.ll @@ -65,7 +65,8 @@ define i32 @f3(i16 %dummy, i16 *%src, i16 %cmp, i16 %swap) { ; CHECK-MAIN: [[LOOP:\.[^ ]*]]: ; CHECK-MAIN: rll [[TMP:%r[0-9]+]], [[OLD]], 16(%r3) ; CHECK-MAIN: risbg %r4, [[TMP]], 32, 47, 0 -; CHECK-MAIN: crjlh [[TMP]], %r4, [[EXIT:\.[^ ]*]] +; CHECK-MAIN: cr [[TMP]], %r4 +; CHECK-MAIN: jlh [[EXIT:\.[^ ]*]] ; CHECK-MAIN: risbg %r5, [[TMP]], 32, 47, 0 ; CHECK-MAIN: rll [[NEW:%r[0-9]+]], %r5, -16({{%r[1-9]+}}) ; CHECK-MAIN: cs [[OLD]], [[NEW]], 0([[RISBG]])