1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -march=x86-64 | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; CHECK: decq [[X:%rdi|%rcx]] 3*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: testq [[X]], [[X]] 4*9880d681SAndroid Build Coastguard Worker 5*9880d681SAndroid Build Coastguard Workerdefine i64 @fact2(i64 %x) { 6*9880d681SAndroid Build Coastguard Workerentry: 7*9880d681SAndroid Build Coastguard Worker br label %while.body 8*9880d681SAndroid Build Coastguard Worker 9*9880d681SAndroid Build Coastguard Workerwhile.body: 10*9880d681SAndroid Build Coastguard Worker %result.06 = phi i64 [ %mul, %while.body ], [ 1, %entry ] 11*9880d681SAndroid Build Coastguard Worker %x.addr.05 = phi i64 [ %dec, %while.body ], [ %x, %entry ] 12*9880d681SAndroid Build Coastguard Worker %mul = mul nsw i64 %result.06, %x.addr.05 13*9880d681SAndroid Build Coastguard Worker %dec = add nsw i64 %x.addr.05, -1 14*9880d681SAndroid Build Coastguard Worker %cmp = icmp sgt i64 %dec, 0 15*9880d681SAndroid Build Coastguard Worker br i1 %cmp, label %while.body, label %while.end.loopexit 16*9880d681SAndroid Build Coastguard Worker 17*9880d681SAndroid Build Coastguard Workerwhile.end.loopexit: 18*9880d681SAndroid Build Coastguard Worker %mul.lcssa = phi i64 [ %mul, %while.body ] 19*9880d681SAndroid Build Coastguard Worker br label %while.end 20*9880d681SAndroid Build Coastguard Worker 21*9880d681SAndroid Build Coastguard Workerwhile.end: 22*9880d681SAndroid Build Coastguard Worker %result.0.lcssa = phi i64 [ %mul.lcssa, %while.end.loopexit ] 23*9880d681SAndroid Build Coastguard Worker ret i64 %result.0.lcssa 24*9880d681SAndroid Build Coastguard Worker} 25