; RUN: opt -S -winehprepare < %s | FileCheck %s

target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-pc-windows-msvc"

declare void @might_crash(i8* %ehptr)
declare i32 @filt()
declare void @cleanup()
declare i32 @__C_specific_handler(...)
declare i32 @llvm.eh.typeid.for(i8*)

define void @resume_phi() personality i32 (...)* @__C_specific_handler {
entry:
  invoke void @might_crash(i8* null)
          to label %return unwind label %lpad1

lpad1:
  %ehvals1 = landingpad { i8*, i32 }
          catch i32 ()* @filt
  %ehptr1 = extractvalue { i8*, i32 } %ehvals1, 0
  %ehsel1 = extractvalue { i8*, i32 } %ehvals1, 1
  %filt_sel = tail call i32 @llvm.eh.typeid.for(i8* bitcast (i32 ()* @filt to i8*))
  %matches = icmp eq i32 %ehsel1, %filt_sel
  br i1 %matches, label %__except, label %eh.resume

__except:
  invoke void @might_crash(i8* %ehptr1)
          to label %return unwind label %lpad2

lpad2:
  %ehvals2 = landingpad { i8*, i32 }
          cleanup
  %ehptr2 = extractvalue { i8*, i32 } %ehvals2, 0
  %ehsel2 = extractvalue { i8*, i32 } %ehvals2, 1
  call void @cleanup()
  br label %eh.resume

return:
  ret void

eh.resume:
  %ehptr.phi = phi i8* [ %ehptr1, %lpad1 ], [ %ehptr2, %lpad2 ]
  %ehsel.phi = phi i32 [ %ehsel1, %lpad1 ], [ %ehsel2, %lpad2 ]
  %ehval.phi1 = insertvalue { i8*, i32 } undef, i8* %ehptr.phi, 0
  %ehval.phi2 = insertvalue { i8*, i32 } %ehval.phi1, i32 %ehsel.phi, 1
  resume { i8*, i32 } %ehval.phi2
}

; CHECK-LABEL: define void @resume_phi()
; CHECK: invoke void @might_crash(i8* null)
; CHECK: landingpad { i8*, i32 }
; CHECK-NEXT: catch i32 ()* @filt
; CHECK-NEXT: call i8* (...) @llvm.eh.actions(
; CHECK-SAME: i32 1, i8* bitcast (i32 ()* @filt to i8*), i32 -1, i8* blockaddress(@resume_phi, %__except))
; CHECK-NEXT: indirectbr {{.*}} [label %__except]
;
; CHECK: __except:
; CHECK: call i32 @llvm.eh.exceptioncode()
; CHECK: invoke void @might_crash(i8* %{{.*}})
; CHECK: landingpad { i8*, i32 }
; CHECK-NEXT: cleanup
; CHECK-NEXT: call i8* (...) @llvm.eh.actions(i32 0, void (i8*, i8*)* @resume_phi.cleanup)
; CHECK-NEXT: indirectbr {{.*}} []

; CHECK-LABEL: define internal void @resume_phi.cleanup(i8*, i8*)
; CHECK: call void @cleanup()
