Test source: git
Comments: LLVM PR44185
Source: <stdin> -- 1. ModuleToFunctionPassAdaptor -- 1. PassManager<Function> : Skipping NOP -- 2. SLPVectorizerPass ---------------------------------------- define <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) { %0: %a0 = extractelement <2 x double> %a, i32 0 %a1 = extractelement <2 x double> %a, i32 1 %b0 = extractelement <2 x double> %b, i32 0 %b1 = extractelement <2 x double> %b, i32 1 %r0 = fadd double %a0, %a1 %r1 = fadd double %b0, %b1 %r00 = insertelement <2 x double> undef, double %r0, i32 0 %r01 = insertelement <2 x double> %r00, double %r1, i32 1 ret <2 x double> %r01 } Transformation seems to be correct! (syntactically equal) -- 3. SLPVectorizerPass ---------------------------------------- define <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) { %0: %a0 = extractelement <2 x double> %a, i32 0 %a1 = extractelement <2 x double> %a, i32 1 %b0 = extractelement <2 x double> %b, i32 0 %b1 = extractelement <2 x double> %b, i32 1 %r0 = fadd double %a0, %a1 %r1 = fadd double %b0, %b1 %r00 = insertelement <2 x double> undef, double %r0, i32 0 %r01 = insertelement <2 x double> %r00, double %r1, i32 1 ret <2 x double> %r01 } => define <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) { %0: %1 = shufflevector <2 x double> %a, <2 x double> %b, 0, 2 %2 = shufflevector <2 x double> %a, <2 x double> %b, 1, 3 %3 = fadd <2 x double> %1, %2 ret <2 x double> %3 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 4. InstCombinePass ---------------------------------------- define <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) { %0: %1 = shufflevector <2 x double> %a, <2 x double> %b, 0, 2 %2 = shufflevector <2 x double> %a, <2 x double> %b, 1, 3 %3 = fadd <2 x double> %1, %2 ret <2 x double> %3 } Transformation seems to be correct! (syntactically equal) -- 5. InstCombinePass ---------------------------------------- define <2 x double> @test_v2f64(<2 x double> %a, <2 x double> %b) { %0: %1 = shufflevector <2 x double> %a, <2 x double> %b, 0, 2 %2 = shufflevector <2 x double> %a, <2 x double> %b, 1, 3 %3 = fadd <2 x double> %1, %2 ret <2 x double> %3 } Transformation seems to be correct! (syntactically equal) -- 6. PassManager<Function> : Skipping NOP -- 7. PassManager<Function> : Skipping NOP -- 8. SLPVectorizerPass ---------------------------------------- define <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) { %0: %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %a2 = extractelement <4 x float> %a, i32 2 %a3 = extractelement <4 x float> %a, i32 3 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %b2 = extractelement <4 x float> %b, i32 2 %b3 = extractelement <4 x float> %b, i32 3 %r0 = fadd float %a0, %a1 %r1 = fadd float %a2, %a3 %r2 = fadd float %b0, %b1 %r3 = fadd float %b2, %b3 %r00 = insertelement <4 x float> undef, float %r0, i32 0 %r01 = insertelement <4 x float> %r00, float %r1, i32 1 %r02 = insertelement <4 x float> %r01, float %r2, i32 2 %r03 = insertelement <4 x float> %r02, float %r3, i32 3 ret <4 x float> %r03 } Transformation seems to be correct! (syntactically equal) -- 9. SLPVectorizerPass ---------------------------------------- define <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) { %0: %a0 = extractelement <4 x float> %a, i32 0 %a1 = extractelement <4 x float> %a, i32 1 %a2 = extractelement <4 x float> %a, i32 2 %a3 = extractelement <4 x float> %a, i32 3 %b0 = extractelement <4 x float> %b, i32 0 %b1 = extractelement <4 x float> %b, i32 1 %b2 = extractelement <4 x float> %b, i32 2 %b3 = extractelement <4 x float> %b, i32 3 %r0 = fadd float %a0, %a1 %r1 = fadd float %a2, %a3 %r2 = fadd float %b0, %b1 %r3 = fadd float %b2, %b3 %r00 = insertelement <4 x float> undef, float %r0, i32 0 %r01 = insertelement <4 x float> %r00, float %r1, i32 1 %r02 = insertelement <4 x float> %r01, float %r2, i32 2 %r03 = insertelement <4 x float> %r02, float %r3, i32 3 ret <4 x float> %r03 } => define <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) { %0: %1 = shufflevector <4 x float> %a, <4 x float> %b, 0, 2, 4, 6 %2 = shufflevector <4 x float> %a, <4 x float> %b, 1, 3, 5, 7 %3 = fadd <4 x float> %1, %2 ret <4 x float> %3 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 10. InstCombinePass ---------------------------------------- define <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) { %0: %1 = shufflevector <4 x float> %a, <4 x float> %b, 0, 2, 4, 6 %2 = shufflevector <4 x float> %a, <4 x float> %b, 1, 3, 5, 7 %3 = fadd <4 x float> %1, %2 ret <4 x float> %3 } Transformation seems to be correct! (syntactically equal) -- 11. InstCombinePass ---------------------------------------- define <4 x float> @test_v4f32(<4 x float> %a, <4 x float> %b) { %0: %1 = shufflevector <4 x float> %a, <4 x float> %b, 0, 2, 4, 6 %2 = shufflevector <4 x float> %a, <4 x float> %b, 1, 3, 5, 7 %3 = fadd <4 x float> %1, %2 ret <4 x float> %3 } Transformation seems to be correct! (syntactically equal) -- 12. PassManager<Function> : Skipping NOP -- 13. PassManager<Function> : Skipping NOP -- 14. SLPVectorizerPass ---------------------------------------- define <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) { %0: %a0 = extractelement <2 x i64> %a, i32 0 %a1 = extractelement <2 x i64> %a, i32 1 %b0 = extractelement <2 x i64> %b, i32 0 %b1 = extractelement <2 x i64> %b, i32 1 %r0 = add i64 %a0, %a1 %r1 = add i64 %b0, %b1 %r00 = insertelement <2 x i64> undef, i64 %r0, i32 0 %r01 = insertelement <2 x i64> %r00, i64 %r1, i32 1 ret <2 x i64> %r01 } Transformation seems to be correct! (syntactically equal) -- 15. SLPVectorizerPass ---------------------------------------- define <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) { %0: %a0 = extractelement <2 x i64> %a, i32 0 %a1 = extractelement <2 x i64> %a, i32 1 %b0 = extractelement <2 x i64> %b, i32 0 %b1 = extractelement <2 x i64> %b, i32 1 %r0 = add i64 %a0, %a1 %r1 = add i64 %b0, %b1 %r00 = insertelement <2 x i64> undef, i64 %r0, i32 0 %r01 = insertelement <2 x i64> %r00, i64 %r1, i32 1 ret <2 x i64> %r01 } => define <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) { %0: %1 = shufflevector <2 x i64> %a, <2 x i64> %b, 0, 2 %2 = shufflevector <2 x i64> %a, <2 x i64> %b, 1, 3 %3 = add <2 x i64> %1, %2 ret <2 x i64> %3 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 16. InstCombinePass ---------------------------------------- define <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) { %0: %1 = shufflevector <2 x i64> %a, <2 x i64> %b, 0, 2 %2 = shufflevector <2 x i64> %a, <2 x i64> %b, 1, 3 %3 = add <2 x i64> %1, %2 ret <2 x i64> %3 } Transformation seems to be correct! (syntactically equal) -- 17. InstCombinePass ---------------------------------------- define <2 x i64> @test_v2i64(<2 x i64> %a, <2 x i64> %b) { %0: %1 = shufflevector <2 x i64> %a, <2 x i64> %b, 0, 2 %2 = shufflevector <2 x i64> %a, <2 x i64> %b, 1, 3 %3 = add <2 x i64> %1, %2 ret <2 x i64> %3 } Transformation seems to be correct! (syntactically equal) -- 18. PassManager<Function> : Skipping NOP -- 19. PassManager<Function> : Skipping NOP -- 20. SLPVectorizerPass ---------------------------------------- define <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) { %0: %a0 = extractelement <4 x i32> %a, i32 0 %a1 = extractelement <4 x i32> %a, i32 1 %a2 = extractelement <4 x i32> %a, i32 2 %a3 = extractelement <4 x i32> %a, i32 3 %b0 = extractelement <4 x i32> %b, i32 0 %b1 = extractelement <4 x i32> %b, i32 1 %b2 = extractelement <4 x i32> %b, i32 2 %b3 = extractelement <4 x i32> %b, i32 3 %r0 = add i32 %a0, %a1 %r1 = add i32 %a2, %a3 %r2 = add i32 %b0, %b1 %r3 = add i32 %b2, %b3 %r00 = insertelement <4 x i32> undef, i32 %r0, i32 0 %r01 = insertelement <4 x i32> %r00, i32 %r1, i32 1 %r02 = insertelement <4 x i32> %r01, i32 %r2, i32 2 %r03 = insertelement <4 x i32> %r02, i32 %r3, i32 3 ret <4 x i32> %r03 } Transformation seems to be correct! (syntactically equal) -- 21. SLPVectorizerPass ---------------------------------------- define <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) { %0: %a0 = extractelement <4 x i32> %a, i32 0 %a1 = extractelement <4 x i32> %a, i32 1 %a2 = extractelement <4 x i32> %a, i32 2 %a3 = extractelement <4 x i32> %a, i32 3 %b0 = extractelement <4 x i32> %b, i32 0 %b1 = extractelement <4 x i32> %b, i32 1 %b2 = extractelement <4 x i32> %b, i32 2 %b3 = extractelement <4 x i32> %b, i32 3 %r0 = add i32 %a0, %a1 %r1 = add i32 %a2, %a3 %r2 = add i32 %b0, %b1 %r3 = add i32 %b2, %b3 %r00 = insertelement <4 x i32> undef, i32 %r0, i32 0 %r01 = insertelement <4 x i32> %r00, i32 %r1, i32 1 %r02 = insertelement <4 x i32> %r01, i32 %r2, i32 2 %r03 = insertelement <4 x i32> %r02, i32 %r3, i32 3 ret <4 x i32> %r03 } => define <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) { %0: %1 = shufflevector <4 x i32> %a, <4 x i32> %b, 0, 2, 4, 6 %2 = shufflevector <4 x i32> %a, <4 x i32> %b, 1, 3, 5, 7 %3 = add <4 x i32> %1, %2 ret <4 x i32> %3 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 22. InstCombinePass ---------------------------------------- define <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) { %0: %1 = shufflevector <4 x i32> %a, <4 x i32> %b, 0, 2, 4, 6 %2 = shufflevector <4 x i32> %a, <4 x i32> %b, 1, 3, 5, 7 %3 = add <4 x i32> %1, %2 ret <4 x i32> %3 } Transformation seems to be correct! (syntactically equal) -- 23. InstCombinePass ---------------------------------------- define <4 x i32> @test_v4i32(<4 x i32> %a, <4 x i32> %b) { %0: %1 = shufflevector <4 x i32> %a, <4 x i32> %b, 0, 2, 4, 6 %2 = shufflevector <4 x i32> %a, <4 x i32> %b, 1, 3, 5, 7 %3 = add <4 x i32> %1, %2 ret <4 x i32> %3 } Transformation seems to be correct! (syntactically equal) -- 24. PassManager<Function> : Skipping NOP -- 25. PassManager<Function> : Skipping NOP -- 26. SLPVectorizerPass ---------------------------------------- define <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) { %0: %a0 = extractelement <8 x i16> %a, i32 0 %a1 = extractelement <8 x i16> %a, i32 1 %a2 = extractelement <8 x i16> %a, i32 2 %a3 = extractelement <8 x i16> %a, i32 3 %a4 = extractelement <8 x i16> %a, i32 4 %a5 = extractelement <8 x i16> %a, i32 5 %a6 = extractelement <8 x i16> %a, i32 6 %a7 = extractelement <8 x i16> %a, i32 7 %b0 = extractelement <8 x i16> %b, i32 0 %b1 = extractelement <8 x i16> %b, i32 1 %b2 = extractelement <8 x i16> %b, i32 2 %b3 = extractelement <8 x i16> %b, i32 3 %b4 = extractelement <8 x i16> %b, i32 4 %b5 = extractelement <8 x i16> %b, i32 5 %b6 = extractelement <8 x i16> %b, i32 6 %b7 = extractelement <8 x i16> %b, i32 7 %r0 = add i16 %a0, %a1 %r1 = add i16 %a2, %a3 %r2 = add i16 %a4, %a5 %r3 = add i16 %a6, %a7 %r4 = add i16 %b0, %b1 %r5 = add i16 %b2, %b3 %r6 = add i16 %b4, %b5 %r7 = add i16 %b6, %b7 %r00 = insertelement <8 x i16> undef, i16 %r0, i32 0 %r01 = insertelement <8 x i16> %r00, i16 %r1, i32 1 %r02 = insertelement <8 x i16> %r01, i16 %r2, i32 2 %r03 = insertelement <8 x i16> %r02, i16 %r3, i32 3 %r04 = insertelement <8 x i16> %r03, i16 %r4, i32 4 %r05 = insertelement <8 x i16> %r04, i16 %r5, i32 5 %r06 = insertelement <8 x i16> %r05, i16 %r6, i32 6 %r07 = insertelement <8 x i16> %r06, i16 %r7, i32 7 ret <8 x i16> %r07 } Transformation seems to be correct! (syntactically equal) -- 27. SLPVectorizerPass ---------------------------------------- define <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) { %0: %a0 = extractelement <8 x i16> %a, i32 0 %a1 = extractelement <8 x i16> %a, i32 1 %a2 = extractelement <8 x i16> %a, i32 2 %a3 = extractelement <8 x i16> %a, i32 3 %a4 = extractelement <8 x i16> %a, i32 4 %a5 = extractelement <8 x i16> %a, i32 5 %a6 = extractelement <8 x i16> %a, i32 6 %a7 = extractelement <8 x i16> %a, i32 7 %b0 = extractelement <8 x i16> %b, i32 0 %b1 = extractelement <8 x i16> %b, i32 1 %b2 = extractelement <8 x i16> %b, i32 2 %b3 = extractelement <8 x i16> %b, i32 3 %b4 = extractelement <8 x i16> %b, i32 4 %b5 = extractelement <8 x i16> %b, i32 5 %b6 = extractelement <8 x i16> %b, i32 6 %b7 = extractelement <8 x i16> %b, i32 7 %r0 = add i16 %a0, %a1 %r1 = add i16 %a2, %a3 %r2 = add i16 %a4, %a5 %r3 = add i16 %a6, %a7 %r4 = add i16 %b0, %b1 %r5 = add i16 %b2, %b3 %r6 = add i16 %b4, %b5 %r7 = add i16 %b6, %b7 %r00 = insertelement <8 x i16> undef, i16 %r0, i32 0 %r01 = insertelement <8 x i16> %r00, i16 %r1, i32 1 %r02 = insertelement <8 x i16> %r01, i16 %r2, i32 2 %r03 = insertelement <8 x i16> %r02, i16 %r3, i32 3 %r04 = insertelement <8 x i16> %r03, i16 %r4, i32 4 %r05 = insertelement <8 x i16> %r04, i16 %r5, i32 5 %r06 = insertelement <8 x i16> %r05, i16 %r6, i32 6 %r07 = insertelement <8 x i16> %r06, i16 %r7, i32 7 ret <8 x i16> %r07 } => define <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) { %0: %1 = shufflevector <8 x i16> %a, <8 x i16> %b, 0, 2, 4, 6, 8, 10, 12, 14 %2 = shufflevector <8 x i16> %a, <8 x i16> %b, 1, 3, 5, 7, 9, 11, 13, 15 %3 = add <8 x i16> %1, %2 ret <8 x i16> %3 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 28. InstCombinePass ---------------------------------------- define <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) { %0: %1 = shufflevector <8 x i16> %a, <8 x i16> %b, 0, 2, 4, 6, 8, 10, 12, 14 %2 = shufflevector <8 x i16> %a, <8 x i16> %b, 1, 3, 5, 7, 9, 11, 13, 15 %3 = add <8 x i16> %1, %2 ret <8 x i16> %3 } Transformation seems to be correct! (syntactically equal) -- 29. InstCombinePass ---------------------------------------- define <8 x i16> @test_v8i16(<8 x i16> %a, <8 x i16> %b) { %0: %1 = shufflevector <8 x i16> %a, <8 x i16> %b, 0, 2, 4, 6, 8, 10, 12, 14 %2 = shufflevector <8 x i16> %a, <8 x i16> %b, 1, 3, 5, 7, 9, 11, 13, 15 %3 = add <8 x i16> %1, %2 ret <8 x i16> %3 } Transformation seems to be correct! (syntactically equal) -- 30. PassManager<Function> : Skipping NOP -- 31. PassManager<Function> : Skipping NOP -- 32. SLPVectorizerPass ---------------------------------------- define void @test_v4f32_v2f32_store(<4 x float> %f, ptr %p) { %0: %x0 = extractelement <4 x float> %f, i64 0 %x1 = extractelement <4 x float> %f, i64 1 %add01 = fadd float %x0, %x1 store float %add01, ptr %p, align 4 %x2 = extractelement <4 x float> %f, i64 2 %x3 = extractelement <4 x float> %f, i64 3 %add23 = fadd float %x2, %x3 %p23 = gep inbounds ptr %p, 4 x i64 1 store float %add23, ptr %p23, align 4 ret void } Transformation seems to be correct! (syntactically equal) -- 33. SLPVectorizerPass ---------------------------------------- define void @test_v4f32_v2f32_store(<4 x float> %f, ptr %p) { %0: %x0 = extractelement <4 x float> %f, i64 0 %x1 = extractelement <4 x float> %f, i64 1 %add01 = fadd float %x0, %x1 store float %add01, ptr %p, align 4 %x2 = extractelement <4 x float> %f, i64 2 %x3 = extractelement <4 x float> %f, i64 3 %add23 = fadd float %x2, %x3 %p23 = gep inbounds ptr %p, 4 x i64 1 store float %add23, ptr %p23, align 4 ret void } => define void @test_v4f32_v2f32_store(<4 x float> %f, ptr %p) { %0: %1 = shufflevector <4 x float> %f, <4 x float> poison, 1, 2 %2 = shufflevector <4 x float> %f, <4 x float> poison, 0, 3 %3 = fadd <2 x float> %1, %2 store <2 x float> %3, ptr %p, align 4 ret void } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 34. InstCombinePass ---------------------------------------- define void @test_v4f32_v2f32_store(<4 x float> %f, ptr %p) { %0: %1 = shufflevector <4 x float> %f, <4 x float> poison, 1, 2 %2 = shufflevector <4 x float> %f, <4 x float> poison, 0, 3 %3 = fadd <2 x float> %1, %2 store <2 x float> %3, ptr %p, align 4 ret void } Transformation seems to be correct! (syntactically equal) -- 35. InstCombinePass ---------------------------------------- define void @test_v4f32_v2f32_store(<4 x float> %f, ptr %p) { %0: %1 = shufflevector <4 x float> %f, <4 x float> poison, 1, 2 %2 = shufflevector <4 x float> %f, <4 x float> poison, 0, 3 %3 = fadd <2 x float> %1, %2 store <2 x float> %3, ptr %p, align 4 ret void } Transformation seems to be correct! (syntactically equal) -- 36. PassManager<Function> : Skipping NOP -- 37. PassManager<Function> : Skipping NOP -- 38. SLPVectorizerPass ---------------------------------------- define <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { %0: %a0 = extractelement <4 x double> %a, i32 0 %a1 = extractelement <4 x double> %a, i32 1 %a2 = extractelement <4 x double> %a, i32 2 %a3 = extractelement <4 x double> %a, i32 3 %b0 = extractelement <4 x double> %b, i32 0 %b1 = extractelement <4 x double> %b, i32 1 %b2 = extractelement <4 x double> %b, i32 2 %b3 = extractelement <4 x double> %b, i32 3 %r0 = fadd double %a0, %a1 %r1 = fadd double %b0, %b1 %r2 = fadd double %a2, %a3 %r3 = fadd double %b2, %b3 %r00 = insertelement <4 x double> undef, double %r0, i32 0 %r01 = insertelement <4 x double> %r00, double %r1, i32 1 %r02 = insertelement <4 x double> %r01, double %r2, i32 2 %r03 = insertelement <4 x double> %r02, double %r3, i32 3 ret <4 x double> %r03 } Transformation seems to be correct! (syntactically equal) -- 39. SLPVectorizerPass ---------------------------------------- define <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { %0: %a0 = extractelement <4 x double> %a, i32 0 %a1 = extractelement <4 x double> %a, i32 1 %a2 = extractelement <4 x double> %a, i32 2 %a3 = extractelement <4 x double> %a, i32 3 %b0 = extractelement <4 x double> %b, i32 0 %b1 = extractelement <4 x double> %b, i32 1 %b2 = extractelement <4 x double> %b, i32 2 %b3 = extractelement <4 x double> %b, i32 3 %r0 = fadd double %a0, %a1 %r1 = fadd double %b0, %b1 %r2 = fadd double %a2, %a3 %r3 = fadd double %b2, %b3 %r00 = insertelement <4 x double> undef, double %r0, i32 0 %r01 = insertelement <4 x double> %r00, double %r1, i32 1 %r02 = insertelement <4 x double> %r01, double %r2, i32 2 %r03 = insertelement <4 x double> %r02, double %r3, i32 3 ret <4 x double> %r03 } => define <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { %0: %1 = shufflevector <4 x double> %a, <4 x double> %b, 0, 4 %2 = shufflevector <4 x double> %a, <4 x double> %b, 1, 5 %3 = fadd <2 x double> %1, %2 %4 = shufflevector <4 x double> %a, <4 x double> %b, 2, 6 %5 = shufflevector <4 x double> %a, <4 x double> %b, 3, 7 %6 = fadd <2 x double> %4, %5 %7 = shufflevector <2 x double> %3, <2 x double> poison, 0, 1, 4294967295, 4294967295 %8 = shufflevector <2 x double> %6, <2 x double> poison, 0, 1, 4294967295, 4294967295 %r031 = shufflevector <4 x double> %7, <4 x double> %8, 0, 1, 4, 5 ret <4 x double> %r031 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 40. InstCombinePass ---------------------------------------- define <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { %0: %1 = shufflevector <4 x double> %a, <4 x double> %b, 0, 4 %2 = shufflevector <4 x double> %a, <4 x double> %b, 1, 5 %3 = fadd <2 x double> %1, %2 %4 = shufflevector <4 x double> %a, <4 x double> %b, 2, 6 %5 = shufflevector <4 x double> %a, <4 x double> %b, 3, 7 %6 = fadd <2 x double> %4, %5 %7 = shufflevector <2 x double> %3, <2 x double> poison, 0, 1, 4294967295, 4294967295 %8 = shufflevector <2 x double> %6, <2 x double> poison, 0, 1, 4294967295, 4294967295 %r031 = shufflevector <4 x double> %7, <4 x double> %8, 0, 1, 4, 5 ret <4 x double> %r031 } Transformation seems to be correct! (syntactically equal) -- 41. InstCombinePass ---------------------------------------- define <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { %0: %1 = shufflevector <4 x double> %a, <4 x double> %b, 0, 4 %2 = shufflevector <4 x double> %a, <4 x double> %b, 1, 5 %3 = fadd <2 x double> %1, %2 %4 = shufflevector <4 x double> %a, <4 x double> %b, 2, 6 %5 = shufflevector <4 x double> %a, <4 x double> %b, 3, 7 %6 = fadd <2 x double> %4, %5 %7 = shufflevector <2 x double> %3, <2 x double> poison, 0, 1, 4294967295, 4294967295 %8 = shufflevector <2 x double> %6, <2 x double> poison, 0, 1, 4294967295, 4294967295 %r031 = shufflevector <4 x double> %7, <4 x double> %8, 0, 1, 4, 5 ret <4 x double> %r031 } => define <4 x double> @test_v4f64(<4 x double> %a, <4 x double> %b) { %0: %1 = shufflevector <4 x double> %a, <4 x double> %b, 0, 4 %2 = shufflevector <4 x double> %a, <4 x double> %b, 1, 5 %3 = fadd <2 x double> %1, %2 %4 = shufflevector <4 x double> %a, <4 x double> %b, 2, 6 %5 = shufflevector <4 x double> %a, <4 x double> %b, 3, 7 %6 = fadd <2 x double> %4, %5 %r031 = shufflevector <2 x double> %3, <2 x double> %6, 0, 1, 2, 3 ret <4 x double> %r031 } Transformation doesn't verify! (not unsound) ERROR: Timeout -- 42. PassManager<Function> : Skipping NOP -- 43. PassManager<Function> : Skipping NOP -- 44. SLPVectorizerPass ---------------------------------------- define <4 x double> @test_v4f64_partial_swizzle(<4 x double> %a, <4 x double> %b) { %0: %a0 = extractelement <4 x double> %a, i64 0 %a1 = extractelement <4 x double> %a, i64 1 %b0 = extractelement <4 x double> %b, i64 0 %b1 = extractelement <4 x double> %b, i64 1 %b2 = extractelement <4 x double> %b, i32 2 %b3 = extractelement <4 x double> %b, i32 3 %r0 = fadd double %a0, %a1 %r2 = fadd double %b0, %b1 %r3 = fadd double %b2, %b3 %r00 = insertelement <4 x double> undef, double %r0, i32 0 %r02 = insertelement <4 x double> %r00, double %r2, i32 2 %r03 = insertelement <4 x double> %r02, double %r3, i32 3 ret <4 x double> %r03 } Transformation seems to be correct! (syntactically equal) -- 45. SLPVectorizerPass ---------------------------------------- define <4 x double> @test_v4f64_partial_swizzle(<4 x double> %a, <4 x double> %b) { %0: %a0 = extractelement <4 x double> %a, i64 0 %a1 = extractelement <4 x double> %a, i64 1 %b0 = extractelement <4 x double> %b, i64 0 %b1 = extractelement <4 x double> %b, i64 1 %b2 = extractelement <4 x double> %b, i32 2 %b3 = extractelement <4 x double> %b, i32 3 %r0 = fadd double %a0, %a1 %r2 = fadd double %b0, %b1 %r3 = fadd double %b2, %b3 %r00 = insertelement <4 x double> undef, double %r0, i32 0 %r02 = insertelement <4 x double> %r00, double %r2, i32 2 %r03 = insertelement <4 x double> %r02, double %r3, i32 3 ret <4 x double> %r03 } => define <4 x double> @test_v4f64_partial_swizzle(<4 x double> %a, <4 x double> %b) { %0: %b2 = extractelement <4 x double> %b, i32 2 %b3 = extractelement <4 x double> %b, i32 3 %1 = shufflevector <4 x double> %a, <4 x double> %b, 0, 4 %2 = shufflevector <4 x double> %a, <4 x double> %b, 1, 5 %3 = fadd <2 x double> %1, %2 %r3 = fadd double %b2, %b3 %4 = shufflevector <2 x double> %3, <2 x double> poison, 0, 4294967295, 1, 4294967295 %r03 = insertelement <4 x double> %4, double %r3, i32 3 ret <4 x double> %r03 } Transformation doesn't verify! (unsound) ERROR: Target is more poisonous than source Example: <4 x double> %a = < poison, poison, poison, poison > <4 x double> %b = < poison, poison, poison, poison > Source: double %a0 = poison double %a1 = poison double %b0 = poison double %b1 = poison double %b2 = poison double %b3 = poison double %r0 = poison double %r2 = poison double %r3 = poison <4 x double> %r00 = < poison, #x0000000000000000 (+0.0) [based on undef value], #x0000000000000000 (+0.0), #x0000000000000000 (+0.0) > <4 x double> %r02 = < poison, #x0000000000000000 (+0.0), poison, #x0000000000000000 (+0.0) > <4 x double> %r03 = < poison, #x0000000000000000 (+0.0), poison, poison > Target: double %b2 = poison double %b3 = poison <2 x double> %1 = < poison, poison > <2 x double> %2 = < poison, poison > <2 x double> %3 = < poison, poison > double %r3 = poison <4 x double> %4 = < poison, poison, poison, poison > <4 x double> %r03 = < poison, poison, poison, poison > Source value: < poison, #x0000000000000000 (+0.0), poison, poison > Target value: < poison, poison, poison, poison > Pass: SLPVectorizerPass 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' '-mtriple=x86_64-unknown' '-passes=slp-vectorizer,instcombine' '-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_Nn2z0GhV_ZxG6.bc" ------------------- SMT STATS ------------------- Num queries: 89 Num invalid: 0 Num skips: 0 Num trivial: 28 (23.9%) Num timeout: 8 (9.0%) Num errors: 0 (0.0%) Num SAT: 71 (79.8%) Num UNSAT: 10 (11.2%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -mtriple=x86_64-unknown -passes=slp-vectorizer,instcombine -S + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/hadd.ll --check-prefix=CHECK --check-prefix=SSE FileCheck error: '<stdin>' is empty. FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/SLPVectorizer/X86/hadd.ll --check-prefix=CHECK --check-prefix=SSE