Test source: git
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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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 -- 73. PassManager<Function> : Skipping NOP -- 74. LowerExpectIntrinsicPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 75. LowerExpectIntrinsicPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 76. SimplifyCFGPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 77. SimplifyCFGPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 78. SROAPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 79. SROAPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 80. EarlyCSEPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 81. EarlyCSEPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 82. CallSiteSplittingPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 83. CallSiteSplittingPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 84. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 85. PassManager<Function> : Skipping NOP -- 86. 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) -- 87. 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) -- 88. 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) -- 89. 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! -- 90. 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) -- 91. 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) -- 92. PassManager<Function> : Skipping NOP -- 93. PassManager<Function> : Skipping NOP -- 94. 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) -- 95. 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) -- 96. 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) -- 97. 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! -- 98. 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) -- 99. 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) -- 100. PassManager<Function> : Skipping NOP -- 101. PassManager<Function> : Skipping NOP -- 102. 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) -- 103. 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) -- 104. 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) -- 105. 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) -- 106. 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) -- 107. 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) -- 108. PassManager<Function> : Skipping NOP -- 109. PassManager<Function> : Skipping NOP -- 110. 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) -- 111. 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) -- 112. 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) -- 113. 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) -- 114. 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) -- 115. 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) -- 116. PassManager<Function> : Skipping NOP -- 117. PassManager<Function> : Skipping NOP -- 118. 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) -- 119. 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) -- 120. 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) -- 121. 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) -- 122. 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) -- 123. 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) -- 124. PassManager<Function> : Skipping NOP -- 125. PassManager<Function> : Skipping NOP -- 126. 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) -- 127. 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) -- 128. 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) -- 129. 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) -- 130. 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) -- 131. 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) -- 132. PassManager<Function> : Skipping NOP -- 133. PassManager<Function> : Skipping NOP -- 134. PromotePass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 135. PromotePass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 136. InstCombinePass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 137. InstCombinePass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i32 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i32 0 %vecext1 = extractelement <8 x i32> %src, i32 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i32 1 %vecext4 = extractelement <8 x i32> %src, i32 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i32 2 %vecext7 = extractelement <8 x i32> %src, i32 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i32 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } => define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 138. SimplifyCFGPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 139. SimplifyCFGPass ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 140. PassManager<Function> : Skipping NOP -- 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, 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 21. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 22. RequireAnalysisPass<GlobalsAA, Module> : Skipping unsupported -- 23. RequireAnalysisPass<GlobalsAA, Module> : Skipping unsupported -- 24. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 141. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 142. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 143. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 144. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 145. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 146. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 147. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 148. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 149. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 150. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 151. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 152. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 153. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 154. InvalidateAnalysisPass<AAManager> : Skipping NOP -- 25. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 26. RequireAnalysisPass<ProfileSummaryAnalysis, Module> : Skipping NOP -- 27. RequireAnalysisPass<ProfileSummaryAnalysis, Module> : Skipping NOP -- 28. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 29. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 30. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP -- 31. InlinerPass : Skipping unsupported -- 32. InlinerPass : Skipping unsupported -- 33. InlinerPass : Skipping unsupported -- 34. InlinerPass : Skipping unsupported -- 35. PostOrderFunctionAttrsPass : Skipping unsupported -- 36. PostOrderFunctionAttrsPass : Skipping unsupported -- 37. ArgumentPromotionPass : Skipping unsupported -- 38. ArgumentPromotionPass : Skipping unsupported -- 39. OpenMPOptCGSCCPass : Skipping unsupported -- 40. OpenMPOptCGSCCPass : Skipping unsupported -- 41. CGSCCToFunctionPassAdaptor ---------------------------------------- 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 155. PassManager<Function> : Skipping NOP -- 156. SROAPass ---------------------------------------- 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) -- 157. SROAPass ---------------------------------------- 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) -- 158. 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) -- 159. 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) -- 160. SpeculativeExecutionPass ---------------------------------------- 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) -- 161. SpeculativeExecutionPass ---------------------------------------- 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) -- 162. JumpThreadingPass ---------------------------------------- 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) -- 163. JumpThreadingPass ---------------------------------------- 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) -- 164. CorrelatedValuePropagationPass ---------------------------------------- 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) -- 165. CorrelatedValuePropagationPass ---------------------------------------- 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) -- 166. 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) -- 167. 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) -- 168. 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) -- 169. 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) -- 170. AggressiveInstCombinePass ---------------------------------------- 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) -- 171. AggressiveInstCombinePass ---------------------------------------- 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) -- 172. ConstraintEliminationPass ---------------------------------------- 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) -- 173. ConstraintEliminationPass ---------------------------------------- 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) -- 174. LibCallsShrinkWrapPass ---------------------------------------- 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) -- 175. LibCallsShrinkWrapPass ---------------------------------------- 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) -- 176. TailCallElimPass : Skipping unsupported -- 177. TailCallElimPass : Skipping unsupported -- 178. 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) -- 179. 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) -- 180. ReassociatePass ---------------------------------------- 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) -- 181. ReassociatePass ---------------------------------------- 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) -- 182. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP -- 183. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP -- 184. FunctionToLoopPassAdaptor ---------------------------------------- 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) -- 185. PassManager<Function> : Skipping NOP -- 186. LoopSimplifyPass ---------------------------------------- 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) -- 187. LoopSimplifyPass ---------------------------------------- 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) -- 188. LCSSAPass ---------------------------------------- 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) -- 189. LCSSAPass ---------------------------------------- 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) -- 190. PassManager<Function> : Skipping NOP -- 191. FunctionToLoopPassAdaptor ---------------------------------------- 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) -- 192. 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) -- 193. 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) -- 194. 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) -- 195. 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) -- 196. FunctionToLoopPassAdaptor ---------------------------------------- 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) -- 197. PassManager<Function> : Skipping NOP -- 198. LoopSimplifyPass ---------------------------------------- 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) -- 199. LoopSimplifyPass ---------------------------------------- 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) -- 200. LCSSAPass ---------------------------------------- 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) -- 201. LCSSAPass ---------------------------------------- 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) -- 202. PassManager<Function> : Skipping NOP -- 203. FunctionToLoopPassAdaptor ---------------------------------------- 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) -- 204. SROAPass ---------------------------------------- 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) -- 205. SROAPass ---------------------------------------- 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) -- 206. VectorCombinePass ---------------------------------------- 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) -- 207. VectorCombinePass ---------------------------------------- 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) -- 208. MergedLoadStoreMotionPass ---------------------------------------- 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) -- 209. MergedLoadStoreMotionPass ---------------------------------------- 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) -- 210. GVNPass ---------------------------------------- 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) -- 211. GVNPass ---------------------------------------- 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) -- 212. SCCPPass ---------------------------------------- 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) -- 213. SCCPPass ---------------------------------------- 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) -- 214. BDCEPass ---------------------------------------- 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) -- 215. BDCEPass ---------------------------------------- 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) -- 216. 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) -- 217. 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) -- 218. JumpThreadingPass ---------------------------------------- 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) -- 219. JumpThreadingPass ---------------------------------------- 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) -- 220. CorrelatedValuePropagationPass ---------------------------------------- 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) -- 221. CorrelatedValuePropagationPass ---------------------------------------- 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) -- 222. ADCEPass ---------------------------------------- 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) -- 223. ADCEPass ---------------------------------------- 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) -- 224. MemCpyOptPass ---------------------------------------- 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) -- 225. MemCpyOptPass ---------------------------------------- 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) -- 226. DSEPass ---------------------------------------- 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) -- 227. DSEPass ---------------------------------------- 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) -- 228. FunctionToLoopPassAdaptor ---------------------------------------- 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) -- 229. PassManager<Function> : Skipping NOP -- 230. LoopSimplifyPass ---------------------------------------- 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) -- 231. LoopSimplifyPass ---------------------------------------- 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) -- 232. LCSSAPass ---------------------------------------- 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) -- 233. LCSSAPass ---------------------------------------- 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) -- 234. PassManager<Function> : Skipping NOP -- 235. FunctionToLoopPassAdaptor ---------------------------------------- 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) -- 236. CoroElidePass ---------------------------------------- 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) -- 237. CoroElidePass ---------------------------------------- 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) -- 238. 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) -- 239. 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) -- 240. 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) -- 241. 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) -- 242. PassManager<Function> : Skipping NOP -- 42. CGSCCToFunctionPassAdaptor ---------------------------------------- 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 43. PostOrderFunctionAttrsPass : Skipping unsupported -- 44. PostOrderFunctionAttrsPass : Skipping unsupported -- 45. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 243. RequireAnalysisPass<ShouldNotRunFunctionPassesAnalysis, Function> : Skipping NOP -- 244. RequireAnalysisPass<ShouldNotRunFunctionPassesAnalysis, Function> : Skipping NOP -- 46. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 47. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 48. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 49. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP -- 50. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 51. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 52. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP -- 53. InlinerPass : Skipping unsupported -- 54. InlinerPass : Skipping unsupported -- 55. InlinerPass : Skipping unsupported -- 56. InlinerPass : Skipping unsupported -- 57. PostOrderFunctionAttrsPass : Skipping unsupported -- 58. PostOrderFunctionAttrsPass : Skipping unsupported -- 59. ArgumentPromotionPass : Skipping unsupported -- 60. ArgumentPromotionPass : Skipping unsupported -- 61. OpenMPOptCGSCCPass : Skipping unsupported -- 62. OpenMPOptCGSCCPass : Skipping unsupported -- 63. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 245. PassManager<Function> : Skipping NOP -- 246. 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) -- 247. 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) -- 248. 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) -- 249. 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) -- 250. 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) -- 251. 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) -- 252. 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) -- 253. 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) -- 254. 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) -- 255. 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) -- 256. 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) -- 257. 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) -- 258. 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) -- 259. 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) -- 260. 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) -- 261. 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) -- 262. 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) -- 263. 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) -- 264. 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) -- 265. 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) -- 266. TailCallElimPass : Skipping unsupported -- 267. TailCallElimPass : Skipping unsupported -- 268. 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) -- 269. 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) -- 270. 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) -- 271. 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) -- 272. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP -- 273. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP -- 274. 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) -- 275. PassManager<Function> : Skipping NOP -- 276. 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) -- 277. 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) -- 278. 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) -- 279. 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) -- 280. PassManager<Function> : Skipping NOP -- 281. 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) -- 282. 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) -- 283. 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) -- 284. 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) -- 285. 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) -- 286. 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) -- 287. PassManager<Function> : Skipping NOP -- 288. 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) -- 289. 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) -- 290. 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) -- 291. 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) -- 292. PassManager<Function> : Skipping NOP -- 293. 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) -- 294. 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) -- 295. 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) -- 296. 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) -- 297. 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) -- 298. 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) -- 299. 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) -- 300. 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) -- 301. 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) -- 302. 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) -- 303. 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) -- 304. 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) -- 305. 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) -- 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. 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) -- 309. 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) -- 310. 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) -- 311. 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) -- 312. 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) -- 313. 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) -- 314. 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) -- 315. 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) -- 316. 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) -- 317. 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) -- 318. 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) -- 319. PassManager<Function> : Skipping NOP -- 320. 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) -- 321. 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) -- 322. 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) -- 323. 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) -- 324. PassManager<Function> : Skipping NOP -- 325. 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) -- 326. 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) -- 327. 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) -- 328. 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) -- 329. 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) -- 330. 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) -- 331. 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) -- 332. PassManager<Function> : Skipping NOP -- 64. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 65. PostOrderFunctionAttrsPass : Skipping unsupported -- 66. PostOrderFunctionAttrsPass : Skipping unsupported -- 67. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 333. RequireAnalysisPass<ShouldNotRunFunctionPassesAnalysis, Function> : Skipping NOP -- 334. RequireAnalysisPass<ShouldNotRunFunctionPassesAnalysis, Function> : Skipping NOP -- 68. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 69. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 70. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 71. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP -- 72. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 73. 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 74. PassManager<LazyCallGraph::SCC, AnalysisManager<LazyCallGraph::SCC, LazyCallGraph&>, LazyCallGraph&, CGSCCUpdateResult&> : Skipping NOP -- 75. InlinerPass : Skipping unsupported -- 76. InlinerPass : Skipping unsupported -- 77. InlinerPass : Skipping unsupported -- 78. InlinerPass : Skipping unsupported -- 79. PostOrderFunctionAttrsPass : Skipping unsupported -- 80. PostOrderFunctionAttrsPass : Skipping unsupported -- 81. ArgumentPromotionPass : Skipping unsupported -- 82. ArgumentPromotionPass : Skipping unsupported -- 83. OpenMPOptCGSCCPass : Skipping unsupported -- 84. OpenMPOptCGSCCPass : Skipping unsupported -- 85. CGSCCToFunctionPassAdaptor ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 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) ---------------------------------------- define void @PR51397(ptr noundef %dst, ptr noundef %srcp) { %0: %src = load <8 x i32>, ptr noundef %srcp, align 16 %vecext = extractelement <8 x i32> %src, i64 0 %conv = sitofp i32 %vecext to float %vecinit = insertelement <4 x float> undef, float %conv, i64 0 %vecext1 = extractelement <8 x i32> %src, i64 1 %conv2 = sitofp i32 %vecext1 to float %vecinit3 = insertelement <4 x float> %vecinit, float %conv2, i64 1 %vecext4 = extractelement <8 x i32> %src, i64 2 %conv5 = sitofp i32 %vecext4 to float %vecinit6 = insertelement <4 x float> %vecinit3, float %conv5, i64 2 %vecext7 = extractelement <8 x i32> %src, i64 3 %conv8 = sitofp i32 %vecext7 to float %vecinit9 = insertelement <4 x float> %vecinit6, float %conv8, i64 3 store <4 x float> %vecinit9, ptr noundef %dst, align 16 ret void } Transformation seems to be correct! (syntactically equal) -- 335. PassManager<Function> : Skipping NOP -- 336. SROAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 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) -- 337. SROAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 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) -- 338. EarlyCSEPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 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) -- 339. EarlyCSEPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 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 dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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! -- 340. SpeculativeExecutionPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 341. SpeculativeExecutionPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 342. JumpThreadingPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 343. JumpThreadingPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 344. CorrelatedValuePropagationPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 345. CorrelatedValuePropagationPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 346. SimplifyCFGPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 347. SimplifyCFGPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 348. InstCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 349. InstCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 4 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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! -- 350. AggressiveInstCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. AggressiveInstCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 352. ConstraintEliminationPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. ConstraintEliminationPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. LibCallsShrinkWrapPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. LibCallsShrinkWrapPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. TailCallElimPass : Skipping unsupported -- 357. TailCallElimPass : Skipping unsupported -- 358. SimplifyCFGPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. SimplifyCFGPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. ReassociatePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. ReassociatePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 362. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP -- 363. RequireAnalysisPass<OptimizationRemarkEmitterAnalysis, Function> : Skipping NOP -- 364. FunctionToLoopPassAdaptor ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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. PassManager<Function> : Skipping NOP -- 366. LoopSimplifyPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 367. LoopSimplifyPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 368. LCSSAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 369. LCSSAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 370. PassManager<Function> : Skipping NOP -- 371. FunctionToLoopPassAdaptor ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 372. SimplifyCFGPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 373. SimplifyCFGPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 374. InstCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 375. InstCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 376. FunctionToLoopPassAdaptor ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 377. PassManager<Function> : Skipping NOP -- 378. LoopSimplifyPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 379. LoopSimplifyPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 380. LCSSAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 381. LCSSAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 382. PassManager<Function> : Skipping NOP -- 383. FunctionToLoopPassAdaptor ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 384. SROAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 385. SROAPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 386. VectorCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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) -- 387. VectorCombinePass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load float, ptr nonnull dereferenceable(16) noundef align(16) %0, align 16 %3 = insertelement <4 x float> undef, float %2, i64 0 %4 = gep inbounds ptr nonnull 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 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 dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load <4 x float>, ptr nonnull 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 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 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! -- 388. MergedLoadStoreMotionPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load <4 x float>, ptr nonnull 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 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 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) -- 389. MergedLoadStoreMotionPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load <4 x float>, ptr nonnull 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 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 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) -- 390. GVNPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load <4 x float>, ptr nonnull 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 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 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) -- 391. GVNPass ---------------------------------------- define <4 x float> @ConvertVectors_ByRef(ptr nonnull dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load <4 x float>, ptr nonnull 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 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 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 dereferenceable(16) noundef align(16) %0) noundef { %1: %2 = load <4 x float>, ptr nonnull 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 dereferenceable(16) noundef align(16) %0 = pointer(non-local, block_id=0, offset=104) 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=108) 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=112) 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: 161 align: 2 alloc type: 0 address: 8 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_akM71rJ2_vJzU.bc" ------------------- SMT STATS ------------------- Num queries: 67 Num invalid: 0 Num skips: 0 Num trivial: 79 (54.1%) Num timeout: 1 (1.5%) Num errors: 0 (0.0%) Num SAT: 43 (64.2%) Num UNSAT: 23 (34.3%) Alive2: Transform doesn't verify; aborting!
+ : '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