diff options
Diffstat (limited to 'llvm/test/CodeGen/ARM/atomic-op.ll')
-rw-r--r-- | llvm/test/CodeGen/ARM/atomic-op.ll | 26 |
1 files changed, 16 insertions, 10 deletions
diff --git a/llvm/test/CodeGen/ARM/atomic-op.ll b/llvm/test/CodeGen/ARM/atomic-op.ll index 79138945661..f7ef492cd50 100644 --- a/llvm/test/CodeGen/ARM/atomic-op.ll +++ b/llvm/test/CodeGen/ARM/atomic-op.ll @@ -272,31 +272,37 @@ define i32 @test_cmpxchg_fail_order(i32 *%addr, i32 %desired, i32 %new) { %pair = cmpxchg i32* %addr, i32 %desired, i32 %new seq_cst monotonic %oldval = extractvalue { i32, i1 } %pair, 0 -; CHECK-ARMV7: dmb ish -; CHECK-ARMV7: [[LOOP_BB:\.?LBB[0-9]+_1]]: ; CHECK-ARMV7: ldrex [[OLDVAL:r[0-9]+]], [r[[ADDR:[0-9]+]]] ; CHECK-ARMV7: cmp [[OLDVAL]], r1 ; CHECK-ARMV7: bne [[FAIL_BB:\.?LBB[0-9]+_[0-9]+]] +; CHECK-ARMV7: dmb ish +; CHECK-ARMV7: [[LOOP_BB:\.?LBB.*]]: ; CHECK-ARMV7: strex [[SUCCESS:r[0-9]+]], r2, [r[[ADDR]]] ; CHECK-ARMV7: cmp [[SUCCESS]], #0 -; CHECK-ARMV7: bne [[LOOP_BB]] -; CHECK-ARMV7: dmb ish -; CHECK-ARMV7: bx lr +; CHECK-ARMV7: beq [[SUCCESS_BB:\.?LBB.*]] +; CHECK-ARMV7: ldrex [[OLDVAL]], [r[[ADDR]]] +; CHECK-ARMV7: cmp [[OLDVAL]], r1 +; CHECK-ARMV7: beq [[LOOP_BB]] ; CHECK-ARMV7: [[FAIL_BB]]: ; CHECK-ARMV7: clrex ; CHECK-ARMV7: bx lr +; CHECK-ARMV7: [[SUCCESS_BB]]: +; CHECK-ARMV7: dmb ish +; CHECK-ARMV7: bx lr -; CHECK-T2: dmb ish -; CHECK-T2: [[LOOP_BB:\.?LBB[0-9]+_1]]: ; CHECK-T2: ldrex [[OLDVAL:r[0-9]+]], [r[[ADDR:[0-9]+]]] ; CHECK-T2: cmp [[OLDVAL]], r1 -; CHECK-T2: clrexne -; CHECK-T2: bxne lr +; CHECK-T2: bne [[FAIL_BB:\.?LBB.*]] +; CHECK-T2: dmb ish +; CHECK-T2: [[LOOP_BB:\.?LBB.*]]: ; CHECK-T2: strex [[SUCCESS:r[0-9]+]], r2, [r[[ADDR]]] ; CHECK-T2: cmp [[SUCCESS]], #0 ; CHECK-T2: dmbeq ish ; CHECK-T2: bxeq lr -; CHECK-T2: b [[LOOP_BB]] +; CHECK-T2: ldrex [[OLDVAL]], [r[[ADDR]]] +; CHECK-T2: cmp [[OLDVAL]], r1 +; CHECK-T2: beq [[LOOP_BB]] +; CHECK-T2: clrex ret i32 %oldval } |