1*9880d681SAndroid Build Coastguard Worker; RUN: opt -licm -basicaa < %s -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; RUN: opt -aa-pipeline=basic-aa -passes='require<aa>,require<targetir>,require<scalar-evolution>,loop(licm)' < %s -S | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Workerdefine void @f_0(i1 %p) nounwind ssp { 5*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @f_0( 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker br label %for.body 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerfor.body: 10*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then, label %for.cond.backedge 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Workerfor.cond.backedge: 13*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.end104, label %for.body 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerif.then: 16*9880d681SAndroid Build Coastguard Worker br i1 undef, label %if.then27, label %if.end.if.end.split_crit_edge.critedge 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Workerif.then27: 19*9880d681SAndroid Build Coastguard Worker; CHECK: tail call void @llvm.assume 20*9880d681SAndroid Build Coastguard Worker tail call void @llvm.assume(i1 %p) 21*9880d681SAndroid Build Coastguard Worker br label %for.body61.us 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerif.end.if.end.split_crit_edge.critedge: 24*9880d681SAndroid Build Coastguard Worker br label %for.body61 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workerfor.body61.us: 27*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.cond.backedge, label %for.body61.us 28*9880d681SAndroid Build Coastguard Worker 29*9880d681SAndroid Build Coastguard Workerfor.body61: 30*9880d681SAndroid Build Coastguard Worker br i1 undef, label %for.cond.backedge, label %for.body61 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerfor.end104: 33*9880d681SAndroid Build Coastguard Worker ret void 34*9880d681SAndroid Build Coastguard Worker} 35*9880d681SAndroid Build Coastguard Worker 36*9880d681SAndroid Build Coastguard Workerdefine void @f_1(i1 %cond, i32* %ptr) { 37*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @f_1( 38*9880d681SAndroid Build Coastguard Worker; CHECK: %val = load i32, i32* %ptr 39*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: br label %loop 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Workerentry: 42*9880d681SAndroid Build Coastguard Worker br label %loop 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Workerloop: 45*9880d681SAndroid Build Coastguard Worker %x = phi i32 [ 0, %entry ], [ %x.inc, %loop ] 46*9880d681SAndroid Build Coastguard Worker call void @llvm.assume(i1 %cond) 47*9880d681SAndroid Build Coastguard Worker %val = load i32, i32* %ptr 48*9880d681SAndroid Build Coastguard Worker %x.inc = add i32 %x, %val 49*9880d681SAndroid Build Coastguard Worker br label %loop 50*9880d681SAndroid Build Coastguard Worker} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.assume(i1) 53