Test Failure: Transforms/PhaseOrdering/X86/vec-load-combine.ll

Test source: git

Log:

Source: <stdin>
-- 1. Annotation2MetadataPass
-- 2. Annotation2MetadataPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 3. ForceFunctionAttrsPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 4. ForceFunctionAttrsPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 5. InferFunctionAttrsPass : Skipping unsupported
-- 6. InferFunctionAttrsPass : Skipping unsupported
-- 7. CoroEarlyPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 8. CoroEarlyPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 9. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 1. PassManager<Function> : Skipping NOP
-- 2. LowerExpectIntrinsicPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 3. LowerExpectIntrinsicPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 4. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 5. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 6. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 7. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = alloca i64 8, align 8
  %3 = alloca i64 16, align 16
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %4 = load ptr, ptr %2, align 8
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %4) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 0) noundef
  %7 = insertelement <4 x float> undef, float %6, i32 0
  %8 = load ptr, ptr %2, align 8
  %9 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %8) dereferenceable(16) nonnull noundef align(16)
  %10 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %9, noundef i32 1) noundef
  %11 = insertelement <4 x float> %7, float %10, i32 1
  %12 = load ptr, ptr %2, align 8
  %13 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %12) dereferenceable(16) nonnull noundef align(16)
  %14 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %13, noundef i32 2) noundef
  %15 = insertelement <4 x float> %11, float %14, i32 2
  %16 = load ptr, ptr %2, align 8
  %17 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr %16) dereferenceable(16) nonnull noundef align(16)
  %18 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %17, noundef i32 2) noundef
  %19 = insertelement <4 x float> %15, float %18, i32 3
  store <4 x float> %19, ptr %3, align 16
  %20 = load <4 x float>, ptr %3, align 16
  ret <4 x float> %20
}
=>
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct!

-- 8. EarlyCSEPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 9. EarlyCSEPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 10. CallSiteSplittingPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 11. CallSiteSplittingPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 12. PassManager<Function> : Skipping NOP
-- 13. PassManager<Function> : Skipping NOP
-- 14. LowerExpectIntrinsicPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 15. LowerExpectIntrinsicPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 16. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 17. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 18. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
Transformation seems to be correct! (syntactically equal)

-- 19. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %V.addr = alloca i64 8, align 8
  %.compoundliteral = alloca i64 16, align 16
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  store ptr nonnull dereferenceable(16) noundef align(16) %V, ptr %V.addr, align 8
  start_lifetime ptr %ref.tmp
  %0 = load ptr, ptr %V.addr, align 8
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %0)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %1 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %2 = extractvalue {double, double} %call, 0
  store double %2, ptr %1, align 16
  %3 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %4 = extractvalue {double, double} %call, 1
  store double %4, ptr %3, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %5 = load ptr, ptr %V.addr, align 8
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %5)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %7 = extractvalue {double, double} %call3, 0
  store double %7, ptr %6, align 16
  %8 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %9 = extractvalue {double, double} %call3, 1
  store double %9, ptr %8, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %10 = load ptr, ptr %V.addr, align 8
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %10)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %11 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %12 = extractvalue {double, double} %call8, 0
  store double %12, ptr %11, align 16
  %13 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %14 = extractvalue {double, double} %call8, 1
  store double %14, ptr %13, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %15 = load ptr, ptr %V.addr, align 8
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr %15)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %16 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %17 = extractvalue {double, double} %call13, 0
  store double %17, ptr %16, align 16
  %18 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %19 = extractvalue {double, double} %call13, 1
  store double %19, ptr %18, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  store <4 x float> %vecinit16, ptr %.compoundliteral, align 16
  %20 = load <4 x float>, ptr %.compoundliteral, align 16
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %20
}
=>
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %0 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %1 = extractvalue {double, double} %call, 0
  store double %1, ptr %0, align 16
  %2 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %3 = extractvalue {double, double} %call, 1
  store double %3, ptr %2, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %4 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %5 = extractvalue {double, double} %call3, 0
  store double %5, ptr %4, align 16
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %7 = extractvalue {double, double} %call3, 1
  store double %7, ptr %6, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %8 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %9 = extractvalue {double, double} %call8, 0
  store double %9, ptr %8, align 16
  %10 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call8, 1
  store double %11, ptr %10, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %12 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %13 = extractvalue {double, double} %call13, 0
  store double %13, ptr %12, align 16
  %14 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %15 = extractvalue {double, double} %call13, 1
  store double %15, ptr %14, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct!

-- 20. EarlyCSEPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %0 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %1 = extractvalue {double, double} %call, 0
  store double %1, ptr %0, align 16
  %2 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %3 = extractvalue {double, double} %call, 1
  store double %3, ptr %2, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %4 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %5 = extractvalue {double, double} %call3, 0
  store double %5, ptr %4, align 16
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %7 = extractvalue {double, double} %call3, 1
  store double %7, ptr %6, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %8 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %9 = extractvalue {double, double} %call8, 0
  store double %9, ptr %8, align 16
  %10 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call8, 1
  store double %11, ptr %10, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %12 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %13 = extractvalue {double, double} %call13, 0
  store double %13, ptr %12, align 16
  %14 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %15 = extractvalue {double, double} %call13, 1
  store double %15, ptr %14, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 21. EarlyCSEPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 0
  %0 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 0
  %1 = extractvalue {double, double} %call, 0
  store double %1, ptr %0, align 16
  %2 = gep inbounds ptr %coerce.dive, 16 x i32 0, 1 x i64 8
  %3 = extractvalue {double, double} %call, 1
  store double %3, ptr %2, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 0
  %4 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 0
  %5 = extractvalue {double, double} %call3, 0
  store double %5, ptr %4, align 16
  %6 = gep inbounds ptr %coerce.dive4, 16 x i32 0, 1 x i64 8
  %7 = extractvalue {double, double} %call3, 1
  store double %7, ptr %6, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive9 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 0
  %8 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 0
  %9 = extractvalue {double, double} %call8, 0
  store double %9, ptr %8, align 16
  %10 = gep inbounds ptr %coerce.dive9, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call8, 1
  store double %11, ptr %10, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %coerce.dive14 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 0
  %12 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 0
  %13 = extractvalue {double, double} %call13, 0
  store double %13, ptr %12, align 16
  %14 = gep inbounds ptr %coerce.dive14, 16 x i32 0, 1 x i64 8
  %15 = extractvalue {double, double} %call13, 1
  store double %15, ptr %14, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
=>
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct!

-- 22. CallSiteSplittingPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 23. CallSiteSplittingPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 24. PassManager<Function> : Skipping NOP
-- 25. PassManager<Function> : Skipping NOP
-- 26. LowerExpectIntrinsicPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)

-- 27. LowerExpectIntrinsicPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)

-- 28. SimplifyCFGPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)

-- 29. SimplifyCFGPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)

-- 30. SROAPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
Transformation seems to be correct! (syntactically equal)

-- 31. SROAPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval = alloca i64 16, align 16
  %t.addr = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %t, ptr %t.addr, align 8
  %0 = load ptr, ptr %t.addr, align 8
  memcpy ptr %retval align 16, ptr %0 align 16, i64 16
  %coerce.dive = gep inbounds ptr %retval, 16 x i32 0, 1 x i64 0
  %1 = load {double, double}, ptr %coerce.dive, align 16
  ret {double, double} %1
}
=>
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct!

-- 32. EarlyCSEPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 33. EarlyCSEPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 34. CallSiteSplittingPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 35. CallSiteSplittingPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 36. PassManager<Function> : Skipping NOP
-- 37. PassManager<Function> : Skipping NOP
-- 38. LowerExpectIntrinsicPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)

-- 39. LowerExpectIntrinsicPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)

-- 40. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)

-- 41. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)

-- 42. SROAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
Transformation seems to be correct! (syntactically equal)

-- 43. SROAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  %2 = alloca i64 8, align 8
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %2, align 8
  %3 = load ptr, ptr %2, align 8
  ret ptr %3
}
=>
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct!

-- 44. EarlyCSEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 45. EarlyCSEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 46. CallSiteSplittingPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 47. CallSiteSplittingPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 48. PassManager<Function> : Skipping NOP
-- 49. PassManager<Function> : Skipping NOP
-- 50. LowerExpectIntrinsicPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)

-- 51. LowerExpectIntrinsicPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)

-- 52. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)

-- 53. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)

-- 54. SROAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
Transformation seems to be correct! (syntactically equal)

-- 55. SROAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = alloca i64 8, align 8
  %4 = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %0, ptr %3, align 8
  store i32 noundef %1, ptr %4, align 4
  %5 = load ptr, ptr %3, align 8
  %6 = load i32, ptr %4, align 4
  %7 = sext i32 %6 to i64
  %8 = gep inbounds ptr %5, 16 x i64 0, 4 x i64 %7
  %9 = load float, ptr %8, align 4
  ret float %9
}
=>
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct!

-- 56. EarlyCSEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 57. EarlyCSEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 58. CallSiteSplittingPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 59. CallSiteSplittingPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 60. PassManager<Function> : Skipping NOP
-- 61. PassManager<Function> : Skipping NOP
-- 62. LowerExpectIntrinsicPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 63. LowerExpectIntrinsicPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 64. SimplifyCFGPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 65. SimplifyCFGPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 66. SROAPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
Transformation seems to be correct! (syntactically equal)

-- 67. SROAPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %this.addr = alloca i64 8, align 8
  %i.addr = alloca i64 4, align 4
  store ptr nonnull dereferenceable(16) noundef align(16) %this, ptr %this.addr, align 8
  store i32 noundef %i, ptr %i.addr, align 4
  %this1 = load ptr, ptr %this.addr, align 8
  %0 = load i32, ptr %i.addr, align 4
  %idxprom = sext i32 %0 to i64
  %arrayidx = gep inbounds ptr %this1, 16 x i64 0, 4 x i64 %idxprom
  %1 = load float, ptr %arrayidx, align 4
  ret float %1
}
=>
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct!

-- 68. EarlyCSEPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 69. EarlyCSEPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 70. CallSiteSplittingPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 71. CallSiteSplittingPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 72. PassManager<Function> : Skipping NOP
-- 10. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 11. OpenMPOptPass : Skipping unsupported
-- 12. OpenMPOptPass : Skipping unsupported
-- 13. IPSCCPPass : Skipping unsupported
-- 14. IPSCCPPass : Skipping unsupported
-- 15. CalledValuePropagationPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 16. CalledValuePropagationPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 17. GlobalOptPass : Skipping unsupported
-- 18. GlobalOptPass : Skipping unsupported
-- 19. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 73. PromotePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 74. PromotePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 75. PromotePass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 76. PromotePass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 77. PromotePass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 78. PromotePass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 79. PromotePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 80. PromotePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 81. PromotePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 82. PromotePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 83. PromotePass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 84. PromotePass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 20. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 21. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 85. PassManager<Function> : Skipping NOP
-- 86. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 87. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i32 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i32 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i32 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i32 3
  ret <4 x float> %13
}
=>
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct!

-- 88. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 89. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)

-- 90. PassManager<Function> : Skipping NOP
-- 91. PassManager<Function> : Skipping NOP
-- 92. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 93. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i32 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i32 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i32 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i32 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i32 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i32 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i32 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i32 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
=>
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct!

-- 94. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 95. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)

-- 96. PassManager<Function> : Skipping NOP
-- 97. PassManager<Function> : Skipping NOP
-- 98. InstCombinePass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 99. InstCombinePass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 100. SimplifyCFGPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 101. SimplifyCFGPass

----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)

-- 102. PassManager<Function> : Skipping NOP
-- 103. PassManager<Function> : Skipping NOP
-- 104. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 105. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 106. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 107. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)

-- 108. PassManager<Function> : Skipping NOP
-- 109. PassManager<Function> : Skipping NOP
-- 110. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 111. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 112. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 113. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 114. PassManager<Function> : Skipping NOP
-- 115. PassManager<Function> : Skipping NOP
-- 116. InstCombinePass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 117. InstCombinePass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 118. SimplifyCFGPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 119. SimplifyCFGPass

----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 120. PassManager<Function> : Skipping NOP
-- 22. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 23. ModuleInlinerWrapperPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 24. RequireAnalysisPass<GlobalsAA, Module> : Skipping unsupported
-- 25. RequireAnalysisPass<GlobalsAA, Module> : Skipping unsupported
-- 26. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 121. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 122. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 123. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 124. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 125. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 126. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 127. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 128. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 129. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 130. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 131. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 132. InvalidateAnalysisPass<AAManager> : Skipping NOP
-- 27. ModuleToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 28. RequireAnalysisPass<ProfileSummaryAnalysis, Module> : Skipping NOP
-- 29. RequireAnalysisPass<ProfileSummaryAnalysis, Module> : Skipping NOP
-- 30. ModuleToPostOrderCGSCCPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 31. DevirtSCCRepeatedPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  %2 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  %5 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  %8 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  %11 = call ptr @castToElementWiseAccess_ByRef(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16)
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull noundef align(16) {
%1:
  ret ptr nonnull dereferenceable(16) noundef align(16) %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 32. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP
-- 33. InlinerPass : Skipping unsupported
-- 34. InlinerPass : Skipping unsupported
-- 35. InlinerPass : Skipping unsupported
-- 36. InlinerPass : Skipping unsupported
-- 37. PostOrderFunctionAttrsPass : Skipping unsupported
-- 38. PostOrderFunctionAttrsPass : Skipping unsupported
-- 39. ArgumentPromotionPass : Skipping unsupported
-- 40. ArgumentPromotionPass : Skipping unsupported
-- 41. OpenMPOptCGSCCPass : Skipping unsupported
-- 42. OpenMPOptCGSCCPass : Skipping unsupported
-- 43. CGSCCToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 133. PassManager<Function> : Skipping NOP
-- 134. SROAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 135. SROAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 136. EarlyCSEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 137. EarlyCSEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 138. SpeculativeExecutionPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 139. SpeculativeExecutionPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 140. JumpThreadingPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 141. JumpThreadingPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 142. CorrelatedValuePropagationPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 143. CorrelatedValuePropagationPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 144. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 145. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 146. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 147. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 148. AggressiveInstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 149. AggressiveInstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 150. ConstraintEliminationPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 151. ConstraintEliminationPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 152. LibCallsShrinkWrapPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 153. LibCallsShrinkWrapPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 154. TailCallElimPass : Skipping unsupported
-- 155. TailCallElimPass : Skipping unsupported
-- 156. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 157. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 158. ReassociatePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 159. ReassociatePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 160. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP
-- 161. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP
-- 162. FunctionToLoopPassAdaptor

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 163. PassManager<Function> : Skipping NOP
-- 164. LoopSimplifyPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 165. LoopSimplifyPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 166. LCSSAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 167. LCSSAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 168. PassManager<Function> : Skipping NOP
-- 169. FunctionToLoopPassAdaptor

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 170. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 171. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 172. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 173. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 174. FunctionToLoopPassAdaptor

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 175. PassManager<Function> : Skipping NOP
-- 176. LoopSimplifyPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 177. LoopSimplifyPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 178. LCSSAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 179. LCSSAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 180. PassManager<Function> : Skipping NOP
-- 181. FunctionToLoopPassAdaptor

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 182. SROAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 183. SROAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 184. VectorCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 185. VectorCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 186. MergedLoadStoreMotionPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 187. MergedLoadStoreMotionPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 188. GVNPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 189. GVNPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 190. SCCPPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 191. SCCPPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 192. BDCEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 193. BDCEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 194. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 195. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 196. JumpThreadingPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 197. JumpThreadingPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 198. CorrelatedValuePropagationPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 199. CorrelatedValuePropagationPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 200. ADCEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 201. ADCEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 202. MemCpyOptPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 203. MemCpyOptPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 204. DSEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 205. DSEPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 206. FunctionToLoopPassAdaptor

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 207. PassManager<Function> : Skipping NOP
-- 208. LoopSimplifyPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 209. LoopSimplifyPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 210. LCSSAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 211. LCSSAPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 212. PassManager<Function> : Skipping NOP
-- 213. FunctionToLoopPassAdaptor

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 214. CoroElidePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 215. CoroElidePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 216. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 217. SimplifyCFGPass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 218. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 219. InstCombinePass

----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)

-- 220. PassManager<Function> : Skipping NOP
-- 44. CGSCCToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 45. CoroSplitPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 46. CoroSplitPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 47. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP
-- 48. DevirtSCCRepeatedPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 49. DevirtSCCRepeatedPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 50. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP
-- 51. InlinerPass : Skipping unsupported
-- 52. InlinerPass : Skipping unsupported
-- 53. InlinerPass : Skipping unsupported
-- 54. InlinerPass : Skipping unsupported
-- 55. PostOrderFunctionAttrsPass : Skipping unsupported
-- 56. PostOrderFunctionAttrsPass : Skipping unsupported
-- 57. ArgumentPromotionPass : Skipping unsupported
-- 58. ArgumentPromotionPass : Skipping unsupported
-- 59. OpenMPOptCGSCCPass : Skipping unsupported
-- 60. OpenMPOptCGSCCPass : Skipping unsupported
-- 61. CGSCCToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 221. PassManager<Function> : Skipping NOP
-- 222. SROAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 223. SROAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 224. EarlyCSEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 225. EarlyCSEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 226. SpeculativeExecutionPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 227. SpeculativeExecutionPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 228. JumpThreadingPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 229. JumpThreadingPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 230. CorrelatedValuePropagationPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 231. CorrelatedValuePropagationPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 232. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 233. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 234. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 235. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 236. AggressiveInstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 237. AggressiveInstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 238. ConstraintEliminationPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 239. ConstraintEliminationPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 240. LibCallsShrinkWrapPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 241. LibCallsShrinkWrapPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 242. TailCallElimPass : Skipping unsupported
-- 243. TailCallElimPass : Skipping unsupported
-- 244. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 245. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 246. ReassociatePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 247. ReassociatePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 248. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP
-- 249. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP
-- 250. FunctionToLoopPassAdaptor

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 251. PassManager<Function> : Skipping NOP
-- 252. LoopSimplifyPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 253. LoopSimplifyPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 254. LCSSAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 255. LCSSAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 256. PassManager<Function> : Skipping NOP
-- 257. FunctionToLoopPassAdaptor

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 258. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 259. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 260. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 261. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 262. FunctionToLoopPassAdaptor

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 263. PassManager<Function> : Skipping NOP
-- 264. LoopSimplifyPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 265. LoopSimplifyPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 266. LCSSAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 267. LCSSAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 268. PassManager<Function> : Skipping NOP
-- 269. FunctionToLoopPassAdaptor

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 270. SROAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 271. SROAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 272. VectorCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 273. VectorCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 274. MergedLoadStoreMotionPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 275. MergedLoadStoreMotionPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 276. GVNPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 277. GVNPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 278. SCCPPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 279. SCCPPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 280. BDCEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 281. BDCEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 282. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 283. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 284. JumpThreadingPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 285. JumpThreadingPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 286. CorrelatedValuePropagationPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 287. CorrelatedValuePropagationPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 288. ADCEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 289. ADCEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 290. MemCpyOptPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 291. MemCpyOptPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 292. DSEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 293. DSEPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 294. FunctionToLoopPassAdaptor

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 295. PassManager<Function> : Skipping NOP
-- 296. LoopSimplifyPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 297. LoopSimplifyPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 298. LCSSAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 299. LCSSAPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 300. PassManager<Function> : Skipping NOP
-- 301. FunctionToLoopPassAdaptor

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 302. CoroElidePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 303. CoroElidePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 304. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 305. SimplifyCFGPass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 306. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 307. InstCombinePass

----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)

-- 308. PassManager<Function> : Skipping NOP
-- 62. CGSCCToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 63. CoroSplitPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 64. CoroSplitPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 65. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP
-- 66. DevirtSCCRepeatedPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 67. DevirtSCCRepeatedPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef {
%1:
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %2 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %3 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %2, noundef i32 0) noundef
  %4 = insertelement <4 x float> undef, float %3, i64 0
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %5 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %6 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %5, noundef i32 1) noundef
  %7 = insertelement <4 x float> %4, float %6, i64 1
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %8 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %9 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %8, noundef i32 2) noundef
  %10 = insertelement <4 x float> %7, float %9, i64 2
  call void @castToElementWiseAccess_ByRef(nonnull noread nowrite dereferenceable(16) noundef align(16) returned ptr nonnull dereferenceable(16) noundef align(16) %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none)
  %11 = ptr nonnull dereferenceable(16) noundef align(16) %0
  %12 = call float @getAt(nonnull dereferenceable(16) noundef align(16) ptr %11, noundef i32 2) noundef
  %13 = insertelement <4 x float> %10, float %12, i64 3
  ret <4 x float> %13
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define ptr @castToElementWiseAccess_ByRef(ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0) dereferenceable(16) nonnull nofree noundef align(16) willreturn memory(none) {
%1:
  ret ptr nonnull noread nowrite dereferenceable(16) noundef align(16) returned %0
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @getAt(ptr nonnull dereferenceable(16) noundef align(16) %0, i32 noundef %1) noundef {
%2:
  %3 = sext i32 noundef %1 to i64
  %4 = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 %3
  %5 = load float, ptr %4, align 4
  ret float %5
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 68. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP
-- 69. InlinerPass : Skipping unsupported
-- 70. InlinerPass : Skipping unsupported
-- 71. InlinerPass : Skipping unsupported
-- 72. InlinerPass : Skipping unsupported
-- 73. PostOrderFunctionAttrsPass : Skipping unsupported
-- 74. PostOrderFunctionAttrsPass : Skipping unsupported
-- 75. ArgumentPromotionPass : Skipping unsupported
-- 76. ArgumentPromotionPass : Skipping unsupported
-- 77. OpenMPOptCGSCCPass : Skipping unsupported
-- 78. OpenMPOptCGSCCPass : Skipping unsupported
-- 79. CGSCCToFunctionPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %11 = load float, ptr %10, align 4
  %12 = insertelement <4 x float> %9, float %11, i64 3
  ret <4 x float> %12
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define <4 x float> @ConvertVectors_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %V) noundef {
%entry:
  %ref.tmp = alloca i64 16, align 16, dead
  %ref.tmp2 = alloca i64 16, align 16, dead
  %ref.tmp7 = alloca i64 16, align 16, dead
  %ref.tmp12 = alloca i64 16, align 16, dead
  start_lifetime ptr %ref.tmp
  %call = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %0 = extractvalue {double, double} %call, 0
  store double %0, ptr %ref.tmp, align 16
  %1 = gep inbounds ptr %ref.tmp, 16 x i64 0, 1 x i64 8
  %2 = extractvalue {double, double} %call, 1
  store double %2, ptr %1, align 8
  %call1 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp, noundef i32 0) noundef
  %vecinit = insertelement <4 x float> undef, float %call1, i64 0
  start_lifetime ptr %ref.tmp2
  %call3 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %3 = extractvalue {double, double} %call3, 0
  store double %3, ptr %ref.tmp2, align 16
  %4 = gep inbounds ptr %ref.tmp2, 16 x i64 0, 1 x i64 8
  %5 = extractvalue {double, double} %call3, 1
  store double %5, ptr %4, align 8
  %call5 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp2, noundef i32 1) noundef
  %vecinit6 = insertelement <4 x float> %vecinit, float %call5, i64 1
  start_lifetime ptr %ref.tmp7
  %call8 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %6 = extractvalue {double, double} %call8, 0
  store double %6, ptr %ref.tmp7, align 16
  %7 = gep inbounds ptr %ref.tmp7, 16 x i64 0, 1 x i64 8
  %8 = extractvalue {double, double} %call8, 1
  store double %8, ptr %7, align 8
  %call10 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp7, noundef i32 2) noundef
  %vecinit11 = insertelement <4 x float> %vecinit6, float %call10, i64 2
  start_lifetime ptr %ref.tmp12
  %call13 = call {double, double} @castToElementWiseAccess_ByVal(nonnull dereferenceable(16) noundef align(16) ptr nonnull dereferenceable(16) noundef align(16) %V)
  %9 = extractvalue {double, double} %call13, 0
  store double %9, ptr %ref.tmp12, align 16
  %10 = gep inbounds ptr %ref.tmp12, 16 x i64 0, 1 x i64 8
  %11 = extractvalue {double, double} %call13, 1
  store double %11, ptr %10, align 8
  %call15 = call float @ElementWiseAccess5getAt(nonnull dereferenceable(16) noundef align(16) ptr %ref.tmp12, noundef i32 2) noundef
  %vecinit16 = insertelement <4 x float> %vecinit11, float %call15, i64 3
  end_lifetime ptr %ref.tmp12
  end_lifetime ptr %ref.tmp7
  end_lifetime ptr %ref.tmp2
  end_lifetime ptr %ref.tmp
  ret <4 x float> %vecinit16
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define {double, double} @castToElementWiseAccess_ByVal(ptr nonnull dereferenceable(16) noundef align(16) %t) {
%entry:
  %retval.sroa.0.0.copyload = load double, ptr nonnull dereferenceable(16) noundef align(16) %t, align 16
  %retval.sroa.2.0.t.addr.0..sroa_idx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %t, 1 x i64 8
  %retval.sroa.2.0.copyload = load double, ptr %retval.sroa.2.0.t.addr.0..sroa_idx, align 8
  %.fca.0.insert = insertvalue {double, double} poison, double %retval.sroa.0.0.copyload, 0
  %.fca.1.insert = insertvalue {double, double} %.fca.0.insert, double %retval.sroa.2.0.copyload, 1
  ret {double, double} %.fca.1.insert
}
Transformation seems to be correct! (syntactically equal)


----------------------------------------
define float @ElementWiseAccess5getAt(ptr nonnull dereferenceable(16) noundef align(16) %this, i32 noundef %i) noundef {
%entry:
  %idxprom = sext i32 noundef %i to i64
  %arrayidx = gep inbounds ptr nonnull dereferenceable(16) noundef align(16) %this, 16 x i64 0, 4 x i64 %idxprom
  %0 = load float, ptr %arrayidx, align 4
  ret float %0
}
Transformation seems to be correct! (syntactically equal)

-- 309. PassManager<Function> : Skipping NOP
-- 310. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %11 = load float, ptr %10, align 4
  %12 = insertelement <4 x float> %9, float %11, i64 3
  ret <4 x float> %12
}
Transformation seems to be correct! (syntactically equal)

-- 311. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %11 = load float, ptr %10, align 4
  %12 = insertelement <4 x float> %9, float %11, i64 3
  ret <4 x float> %12
}
Transformation seems to be correct! (syntactically equal)

-- 312. EarlyCSEPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %11 = load float, ptr %10, align 4
  %12 = insertelement <4 x float> %9, float %11, i64 3
  ret <4 x float> %12
}
Transformation seems to be correct! (syntactically equal)

-- 313. EarlyCSEPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %11 = load float, ptr %10, align 4
  %12 = insertelement <4 x float> %9, float %11, i64 3
  ret <4 x float> %12
}
=>
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct!

-- 314. SpeculativeExecutionPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 315. SpeculativeExecutionPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 316. JumpThreadingPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 317. JumpThreadingPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 318. CorrelatedValuePropagationPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 319. CorrelatedValuePropagationPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 320. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 321. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 322. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 323. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 4
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 4
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
=>
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct!

-- 324. AggressiveInstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 325. AggressiveInstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 326. ConstraintEliminationPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 327. ConstraintEliminationPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 328. LibCallsShrinkWrapPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 329. LibCallsShrinkWrapPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 330. TailCallElimPass : Skipping unsupported
-- 331. TailCallElimPass : Skipping unsupported
-- 332. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 333. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 334. ReassociatePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 335. ReassociatePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 336. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP
-- 337. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP
-- 338. FunctionToLoopPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 339. PassManager<Function> : Skipping NOP
-- 340. LoopSimplifyPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 341. LoopSimplifyPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 342. LCSSAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 343. LCSSAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 344. PassManager<Function> : Skipping NOP
-- 345. FunctionToLoopPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 346. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 347. SimplifyCFGPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 348. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 349. InstCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 350. FunctionToLoopPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 351. PassManager<Function> : Skipping NOP
-- 352. LoopSimplifyPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 353. LoopSimplifyPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 354. LCSSAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 355. LCSSAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 356. PassManager<Function> : Skipping NOP
-- 357. FunctionToLoopPassAdaptor

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 358. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 359. SROAPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 360. VectorCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 361. VectorCombinePass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load float, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = insertelement <4 x float> undef, float %2, i64 0
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
=>
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load <4 x float>, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 4294967295, 4294967295
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct!

-- 362. MergedLoadStoreMotionPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load <4 x float>, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 4294967295, 4294967295
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 363. MergedLoadStoreMotionPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load <4 x float>, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 4294967295, 4294967295
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 364. GVNPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load <4 x float>, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 4294967295, 4294967295
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
Transformation seems to be correct! (syntactically equal)

-- 365. GVNPass

----------------------------------------
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load <4 x float>, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 4294967295, 4294967295
  %4 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 1
  %5 = load float, ptr %4, align 4
  %6 = insertelement <4 x float> %3, float %5, i64 1
  %7 = gep inbounds ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, 16 x i64 0, 4 x i64 2
  %8 = load float, ptr %7, align 8
  %9 = insertelement <4 x float> %6, float %8, i64 2
  %10 = insertelement <4 x float> %9, float %8, i64 3
  ret <4 x float> %10
}
=>
define <4 x float> @ConvertVectors_ByRef(ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0) nofree noundef willreturn memory(argmem: read) {
%1:
  %2 = load <4 x float>, ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0, align 16
  %3 = shufflevector <4 x float> %2, <4 x float> poison, 0, 4294967295, 4294967295, 4294967295
  %5 = bitcast <4 x float> %2 to i128
  %6 = lshr i128 %5, 32
  %7 = trunc i128 %6 to i32
  %8 = bitcast i32 %7 to float
  %9 = insertelement <4 x float> %3, float %8, i64 1
  %11 = lshr i128 %5, 64
  %12 = trunc i128 %11 to i32
  %13 = bitcast i32 %12 to float
  %14 = insertelement <4 x float> %9, float %13, i64 2
  %15 = insertelement <4 x float> %14, float %13, i64 3
  ret <4 x float> %15
}
Transformation doesn't verify! (unsound)
ERROR: Source is more defined than target

Example:
ptr nonnull nocapture nowrite dereferenceable(16) noundef align(16) %0 = pointer(non-local, block_id=0, offset=48, attrs=3)

Source:
<4 x float> %2 = < #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), poison >
<4 x float> %3 = < #x00000000 (+0.0), poison, poison, poison >
ptr %4 = pointer(non-local, block_id=0, offset=52, attrs=3)
float %5 = #x00000000 (+0.0)
<4 x float> %6 = < #x00000000 (+0.0), #x00000000 (+0.0), poison, poison >
ptr %7 = pointer(non-local, block_id=0, offset=56, attrs=3)
float %8 = #x00000000 (+0.0)
<4 x float> %9 = < #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), poison >
<4 x float> %10 = < #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0) >

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 128	align: 8589934592	alloc type: 0

Target:
<4 x float> %2 = < #x00000000 (+0.0), #x00000000 (+0.0), #x00000000 (+0.0), poison >
<4 x float> %3 = < #x00000000 (+0.0), poison, poison, poison >
i128 %5 = poison
i128 %6 = poison
i32 %7 = poison
float %8 = poison
<4 x float> %9 = < #x00000000 (+0.0), poison, poison, poison >
i128 %11 = poison
i32 %12 = poison
float %13 = poison
<4 x float> %14 = < #x00000000 (+0.0), poison, poison, poison >
<4 x float> %15 = < #x00000000 (+0.0), poison, poison, poison >


Pass: GVNPass
Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-passes=default<O3>' '-S' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'
Wrote bitcode to: "/home/nlopes/alive2/build/logs/in_aelSf7kX_P66W.bc"


------------------- SMT STATS -------------------
Num queries: 60
Num invalid: 0
Num skips:   0
Num trivial: 77 (56.2%)
Num timeout: 0 (0.0%)
Num errors:  0 (0.0%)
Num SAT:     40 (66.7%)
Num UNSAT:   20 (33.3%)
Alive2: Transform doesn't verify; aborting!

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh '-passes=default<O3>' -S
+ /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/X86/vec-load-combine.ll --check-prefix=SSE

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/PhaseOrdering/X86/vec-load-combine.ll --check-prefix=SSE

 

<-- Back