diff options
-rw-r--r-- | llvm/lib/Target/SystemZ/SystemZISelLowering.cpp | 6 | ||||
-rw-r--r-- | llvm/test/CodeGen/SystemZ/cmpxchg-01.ll | 3 | ||||
-rw-r--r-- | llvm/test/CodeGen/SystemZ/cmpxchg-02.ll | 3 |
3 files changed, 10 insertions, 2 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; } diff --git a/llvm/test/CodeGen/SystemZ/cmpxchg-01.ll b/llvm/test/CodeGen/SystemZ/cmpxchg-01.ll index 8257a36ddde..afcf3463255 100644 --- a/llvm/test/CodeGen/SystemZ/cmpxchg-01.ll +++ b/llvm/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/llvm/test/CodeGen/SystemZ/cmpxchg-02.ll b/llvm/test/CodeGen/SystemZ/cmpxchg-02.ll index 48e1e18db9b..dd7db09d947 100644 --- a/llvm/test/CodeGen/SystemZ/cmpxchg-02.ll +++ b/llvm/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]]) |