declare hidden coldcc void @expensive_func(i8* noalias %ptr0, i32 %offset, i32 %hindex, i64 %adr, i32* noalias %ptr1, i64* noalias %ptr2)

define <4 x i32> @sillysaverestore(i8* noalias %ptr0, <4 x i32> %offset, <4 x i32> %hindex, i64 %adr, i32* noalias %ptr1, i64* noalias %ptr2, <4 x i32> %index2) {
entry:
  %0 = extractelement <4 x i32> %offset, i32 0
  %1 = zext i32 %0 to i64
  %2 = add i64 %1, %adr
  %3 = extractelement <4 x i32> %hindex, i32 0
  %4 = getelementptr i64* %ptr2, i32 %3
  %5 = load i64* %4
  %6 = icmp ne i64 %5, %2
  br i1 %6, label %if-true-block, label %endif-block

if-true-block:                                    ; preds = %entry
  call coldcc void @expensive_func(i8* %ptr0, i32 %0, i32 %3, i64 %2, i32* %ptr1, i64* %ptr2)
  br label %endif-block

endif-block:                                      ; preds = %entry, %if-true-block
  %7 = extractelement <4 x i32> %index2, i32 0
  %8 = mul i32 %3, 16
  %9 = add i32 %8, %7
  %10 = getelementptr i32* %ptr1, i32 %9
  %11 = load i32* %10
  %12 = insertelement <4 x i32> undef, i32 %11, i32 0
  %13 = extractelement <4 x i32> %offset, i32 1
  %14 = zext i32 %13 to i64
  %15 = add i64 %14, %adr
  %16 = extractelement <4 x i32> %hindex, i32 1
  %17 = getelementptr i64* %ptr2, i32 %16
  %18 = load i64* %17
  %19 = icmp ne i64 %18, %15
  br i1 %19, label %if-true-block2, label %endif-block1

if-true-block2:                                   ; preds = %endif-block
  call coldcc void @expensive_func(i8* %ptr0, i32 %13, i32 %16, i64 %15, i32* %ptr1, i64* %ptr2)
  br label %endif-block1

endif-block1:                                     ; preds = %endif-block, %if-true-block2
  %20 = extractelement <4 x i32> %index2, i32 1
  %21 = mul i32 %16, 16
  %22 = add i32 %21, %20
  %23 = getelementptr i32* %ptr1, i32 %22
  %24 = load i32* %23
  %25 = insertelement <4 x i32> %12, i32 %24, i32 1
  %26 = extractelement <4 x i32> %offset, i32 2
  %27 = zext i32 %26 to i64
  %28 = add i64 %27, %adr
  %29 = extractelement <4 x i32> %hindex, i32 2
  %30 = getelementptr i64* %ptr2, i32 %29
  %31 = load i64* %30
  %32 = icmp ne i64 %31, %28
  br i1 %32, label %if-true-block4, label %endif-block3

if-true-block4:                                   ; preds = %endif-block1
  call coldcc void @expensive_func(i8* %ptr0, i32 %26, i32 %29, i64 %28, i32* %ptr1, i64* %ptr2)
  br label %endif-block3

endif-block3:                                     ; preds = %endif-block1, %if-true-block4
  %33 = extractelement <4 x i32> %index2, i32 2
  %34 = mul i32 %29, 16
  %35 = add i32 %34, %33
  %36 = getelementptr i32* %ptr1, i32 %35
  %37 = load i32* %36
  %38 = insertelement <4 x i32> %25, i32 %37, i32 2
  %39 = extractelement <4 x i32> %offset, i32 3
  %40 = zext i32 %39 to i64
  %41 = add i64 %40, %adr
  %42 = extractelement <4 x i32> %hindex, i32 3
  %43 = getelementptr i64* %ptr2, i32 %42
  %44 = load i64* %43
  %45 = icmp ne i64 %44, %41
  br i1 %45, label %if-true-block6, label %endif-block5

if-true-block6:                                   ; preds = %endif-block3
  call coldcc void @expensive_func(i8* %ptr0, i32 %39, i32 %42, i64 %41, i32* %ptr1, i64* %ptr2)
  br label %endif-block5

endif-block5:                                     ; preds = %endif-block3, %if-true-block6
  %46 = extractelement <4 x i32> %index2, i32 3
  %47 = mul i32 %42, 16
  %48 = add i32 %47, %46
  %49 = getelementptr i32* %ptr1, i32 %48
  %50 = load i32* %49
  %51 = insertelement <4 x i32> %38, i32 %50, i32 3
  ret <4 x i32> %51
}
