1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -simplifycfg -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker; This test checks that the SimplifyCFG pass won't duplicate a call to a 4*9880d681SAndroid Build Coastguard Worker; function marked noduplicate. 5*9880d681SAndroid Build Coastguard Worker; 6*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @noduplicate 7*9880d681SAndroid Build Coastguard Worker; CHECK: call void @barrier 8*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: call void @barrier 9*9880d681SAndroid Build Coastguard Workerdefine void @noduplicate(i32 %cond, i32* %out) { 10*9880d681SAndroid Build Coastguard Workerentry: 11*9880d681SAndroid Build Coastguard Worker %out1 = getelementptr i32, i32* %out, i32 1 12*9880d681SAndroid Build Coastguard Worker %out2 = getelementptr i32, i32* %out, i32 2 13*9880d681SAndroid Build Coastguard Worker %cmp = icmp eq i32 %cond, 0 14*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %if.then, label %if.end 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerif.then: 17*9880d681SAndroid Build Coastguard Worker store i32 5, i32* %out 18*9880d681SAndroid Build Coastguard Worker br label %if.end 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerif.end: 21*9880d681SAndroid Build Coastguard Worker call void @barrier() #0 22*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %cond.end, label %cond.false 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workercond.false: 25*9880d681SAndroid Build Coastguard Worker store i32 5, i32* %out1 26*9880d681SAndroid Build Coastguard Worker br label %cond.end 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workercond.end: 29*9880d681SAndroid Build Coastguard Worker %value = phi i32 [ 1, %cond.false ], [ 0, %if.end ] 30*9880d681SAndroid Build Coastguard Worker store i32 %value, i32* %out2 31*9880d681SAndroid Build Coastguard Worker ret void 32*9880d681SAndroid Build Coastguard Worker} 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Worker; Function Attrs: noduplicate nounwind 35*9880d681SAndroid Build Coastguard Workerdeclare void @barrier() #0 36*9880d681SAndroid Build Coastguard Worker 37*9880d681SAndroid Build Coastguard Workerattributes #0 = { noduplicate nounwind } 38