; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+avx < %s | FileCheck %s

; Check that this does not fail to combine concat_vectors of a value from
; merge_values through a bitcast.
define void @d() personality i8* undef {
; CHECK-LABEL: d:
; CHECK:       # %bb.0: # %entry
; CHECK-NEXT:    pushq %rax
; CHECK-NEXT:    .cfi_def_cfa_offset 16
; CHECK-NEXT:  .Ltmp0:
; CHECK-NEXT:    callq *%rax
; CHECK-NEXT:  .Ltmp1:
; CHECK-NEXT:  # %bb.1: # %bar
; CHECK-NEXT:  .Ltmp2:
; CHECK-NEXT:    callq *%rax
; CHECK-NEXT:  .Ltmp3:
; CHECK-NEXT:  # %bb.2: # %baz
; CHECK-NEXT:  .LBB1_3: # %foo
; CHECK-NEXT:  .Ltmp4:
entry:
  %call16 = invoke { i8, double } undef()
          to label %bar unwind label %foo

foo:                                              ; preds = %bar, %entry
  %0 = landingpad { i8*, i32 }
          cleanup
  br label %bazr

bar:                                              ; preds = %entry
  %1 = extractvalue { i8, double } %call16, 1
  %2 = bitcast double %1 to <2 x float>
  invoke void undef()
          to label %baz unwind label %foo

baz:                                              ; preds = %bar
  %3 = extractelement <2 x float> %2, i64 0
  br label %bazr

bazr:                                             ; preds = %baz, %foo
  %exn.obj = extractvalue { i8*, i32 } undef, 0
  unreachable
}


Simplify test case from r348759
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
; RUN: llc -mtriple=x86_64-unknown-unknown -mattr=+avx < %s | FileCheck %s

declare { i8, double } @fun()

; Check that this does not fail to combine concat_vectors of a value from
; merge_values through a bitcast.
define void @d(i1 %cmp) {
; CHECK-LABEL: d:
; CHECK:       # %bb.0: # %bar
; CHECK-NEXT:    pushq %rax
; CHECK-NEXT:    .cfi_def_cfa_offset 16
; CHECK-NEXT:    callq fun
bar:
  %val = call { i8, double } @fun()
  %extr = extractvalue { i8, double } %val, 1
  %bc = bitcast double %extr to <2 x float>
  br label %baz

baz:
  %extr1 = extractelement <2 x float> %bc, i64 0
  unreachable
}