; to minimize live-range.
define i64 @test(i1 %a, i64 %r1, i64 %r2, i64 %s1, i64 %s2, i64 %t1, i64 %t2) {
+; CHECK-LABEL: test:
+; CHECK: # %bb.0: # %entry
+; CHECK-NEXT: pushq %r15
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: pushq %r14
+; CHECK-NEXT: .cfi_def_cfa_offset 24
+; CHECK-NEXT: pushq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 32
+; CHECK-NEXT: .cfi_offset %rbx, -32
+; CHECK-NEXT: .cfi_offset %r14, -24
+; CHECK-NEXT: .cfi_offset %r15, -16
+; CHECK-NEXT: movq %rcx, %r14
+; CHECK-NEXT: movl $4, %r15d
+; CHECK-NEXT: testb $1, %dil
+; CHECK-NEXT: je .LBB0_2
+; CHECK-NEXT: # %bb.1: # %then
+; CHECK-NEXT: movq {{[0-9]+}}(%rsp), %r9
+; CHECK-NEXT: movl $10, %r15d
+; CHECK-NEXT: movq %rdx, %rsi
+; CHECK-NEXT: movq %r8, %r14
+; CHECK-NEXT: .LBB0_2: # %else
+; CHECK-NEXT: addq %r9, %r14
+; CHECK-NEXT: addq %rsi, %r15
+; CHECK-NEXT: callq _Z3foov
+; CHECK-NEXT: movl %eax, %ebx
+; CHECK-NEXT: addq %r15, %rbx
+; CHECK-NEXT: callq _Z3foov
+; CHECK-NEXT: movl %eax, %r15d
+; CHECK-NEXT: addq %rbx, %r15
+; CHECK-NEXT: callq _Z3foov
+; CHECK-NEXT: movl %eax, %eax
+; CHECK-NEXT: addq %r15, %rax
+; CHECK-NEXT: addq %r14, %rax
+; CHECK-NEXT: popq %rbx
+; CHECK-NEXT: .cfi_def_cfa_offset 24
+; CHECK-NEXT: popq %r14
+; CHECK-NEXT: .cfi_def_cfa_offset 16
+; CHECK-NEXT: popq %r15
+; CHECK-NEXT: .cfi_def_cfa_offset 8
+; CHECK-NEXT: retq
entry:
br i1 %a, label %then, label %else
%r = phi i64 [ %r1, %entry ], [ %r2, %then ]
%s = phi i64 [ %s1, %entry ], [ %s2, %then ]
%t = phi i64 [ %t1, %entry ], [ %t2, %then ]
-; CHECK-LABEL: test:
-; CHECK: add
-; CHECK: add
-; CHECK: call
-; CHECK: add
-; CHECK: call
-; CHECK: add
-; CHECK: call
-; CHECK: add
%1 = tail call i32 @_Z3foov()
%2 = zext i32 %1 to i64
%3 = tail call i32 @_Z3foov()