1*9880d681SAndroid Build Coastguard Worker; RUN: llc -mtriple=aarch64-none-linux-gnu -verify-machineinstrs < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine i32 @foo(i32* %var, i1 %cond) { 4*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: foo: 5*9880d681SAndroid Build Coastguard Worker br i1 %cond, label %atomic_ver, label %simple_ver 6*9880d681SAndroid Build Coastguard Workersimple_ver: 7*9880d681SAndroid Build Coastguard Worker %oldval = load i32, i32* %var 8*9880d681SAndroid Build Coastguard Worker %newval = add nsw i32 %oldval, -1 9*9880d681SAndroid Build Coastguard Worker store i32 %newval, i32* %var 10*9880d681SAndroid Build Coastguard Worker br label %somewhere 11*9880d681SAndroid Build Coastguard Workeratomic_ver: 12*9880d681SAndroid Build Coastguard Worker fence seq_cst 13*9880d681SAndroid Build Coastguard Worker %val = atomicrmw add i32* %var, i32 -1 monotonic 14*9880d681SAndroid Build Coastguard Worker fence seq_cst 15*9880d681SAndroid Build Coastguard Worker br label %somewhere 16*9880d681SAndroid Build Coastguard Worker; CHECK: dmb 17*9880d681SAndroid Build Coastguard Worker; CHECK: ldxr 18*9880d681SAndroid Build Coastguard Worker; CHECK: dmb 19*9880d681SAndroid Build Coastguard Worker ; The key point here is that the second dmb isn't immediately followed by the 20*9880d681SAndroid Build Coastguard Worker ; simple_ver basic block, which LLVM attempted to do when DMB had been marked 21*9880d681SAndroid Build Coastguard Worker ; with isBarrier. For now, look for something that looks like "somewhere". 22*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: mov 23*9880d681SAndroid Build Coastguard Workersomewhere: 24*9880d681SAndroid Build Coastguard Worker %combined = phi i32 [ %val, %atomic_ver ], [ %newval, %simple_ver] 25*9880d681SAndroid Build Coastguard Worker ret i32 %combined 26*9880d681SAndroid Build Coastguard Worker} 27