1*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -gvn -S | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; This testcase tests insertion of no-cost phis. That is, 3*9880d681SAndroid Build Coastguard Worker; when the value is already available in every predecessor, 4*9880d681SAndroid Build Coastguard Worker; and we just need to insert a phi node to merge the available values. 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker@c = global i32 0, align 4 7*9880d681SAndroid Build Coastguard Worker@d = global i32 0, align 4 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine i32 @mai(i32 %foo, i32 %a, i32 %b) { 11*9880d681SAndroid Build Coastguard Worker %1 = icmp ne i32 %foo, 0 12*9880d681SAndroid Build Coastguard Worker br i1 %1, label %bb1, label %bb2 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerbb1: 15*9880d681SAndroid Build Coastguard Worker %2 = add nsw i32 %a, %b 16*9880d681SAndroid Build Coastguard Worker store i32 %2, i32* @c, align 4 17*9880d681SAndroid Build Coastguard Worker br label %mergeblock 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workerbb2: 20*9880d681SAndroid Build Coastguard Worker %3 = add nsw i32 %a, %b 21*9880d681SAndroid Build Coastguard Worker store i32 %3, i32* @d, align 4 22*9880d681SAndroid Build Coastguard Worker br label %mergeblock 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workermergeblock: 25*9880d681SAndroid Build Coastguard Worker; CHECK: pre-phi = phi i32 [ %3, %bb2 ], [ %2, %bb1 ] 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i32 %.pre-phi 27*9880d681SAndroid Build Coastguard Worker %4 = add nsw i32 %a, %b 28*9880d681SAndroid Build Coastguard Worker ret i32 %4 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Worker 32