; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 6 ; RUN: llc -mtriple=x86_64-- < %s | FileCheck %s define void @sjlj_do_not_merge_stack_slots() nounwind { ; CHECK-LABEL: sjlj_do_not_merge_stack_slots: ; CHECK: # %bb.0: # %entry ; CHECK-NEXT: subq $40, %rsp ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; CHECK-NEXT: callq setjmp@PLT ; CHECK-NEXT: testl %eax, %eax ; CHECK-NEXT: je .LBB0_1 ; CHECK-NEXT: # %bb.2: # %else ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; CHECK-NEXT: callq opaque@PLT ; CHECK-NEXT: addq $40, %rsp ; CHECK-NEXT: retq ; CHECK-NEXT: .LBB0_1: # %then ; CHECK-NEXT: leaq {{[0-9]+}}(%rsp), %rdi ; CHECK-NEXT: callq escape@PLT ; CHECK-NEXT: addq $40, %rsp ; CHECK-NEXT: retq entry: %obj = alloca [8 x i8], align 4 %buf = alloca [12 x i8], align 4 %obj.1 = alloca [8 x i8], align 4 call void @llvm.lifetime.start.p0(ptr %obj) call void @llvm.lifetime.start.p0(ptr %buf) %rv = call i32 @setjmp(ptr %buf) %c = icmp eq i32 %rv, 0 br i1 %c, label %then, label %else then: call void @escape(ptr %obj) br label %exit else: call void @llvm.lifetime.start.p0(ptr %obj.1) call void @opaque(ptr %obj.1) call void @llvm.lifetime.end.p0(ptr %obj.1) br label %exit exit: call void @llvm.lifetime.end.p0(ptr %buf) call void @llvm.lifetime.end.p0(ptr %obj) ret void } declare i32 @setjmp(ptr) returns_twice declare void @escape(ptr) declare void @opaque(ptr)