aqjune added a comment. Running Alive2 finds one failure, which is fixed by updating the shufflevector semantics to return poison on undef/poison mask (D93818 <https://reviews.llvm.org/D93818>):
Transforms/InstCombine/shufflevector-div-rem-inseltpoison.ll ---------------------------------------- define <2 x float> @test_fdiv(float %a, float %b, i1 %cmp) { %0: %splatinsert = insertelement <2 x float> poison, float %a, i32 0 %denom = insertelement <2 x float> { 3.000000, poison }, float 1.000000, i32 1 %t1 = fdiv <2 x float> %splatinsert, %denom %splat.op = shufflevector <2 x float> %t1, <2 x float> poison, 4294967295, 0 ; THIS BLOCKS POISON %t2 = select i1 %cmp, <2 x float> { 77.000000, 99.000000 }, <2 x float> %splat.op ret <2 x float> %t2 } => define <2 x float> @test_fdiv(float %a, float %b, i1 %cmp) { %0: %1 = insertelement <2 x float> poison, float %a, i32 1 %2 = fdiv <2 x float> %1, { undef, 3.000000 } %t2 = select i1 %cmp, <2 x float> { 77.000000, 99.000000 }, <2 x float> %2 ret <2 x float> %t2 } Transformation doesn't verify! ERROR: Target is more poisonous than source For the diffs, I checked that all of these are replacements of undef with poison, and there was no larger change. After this patch, there are two places where undef still shows up as a placeholder from llvm tests: I couldn't find where they are coming from. :( If someone points me where they're likely to appear, I'll fix these. $ ag "shufflevector <.*> .*, <.*> undef" | grep inseltpoison Transforms/InstCombine/X86/x86-pshufb-inseltpoison.ll $ ag "insertelement <.*> undef" | grep inseltpoison Transforms/InstCombine/AMDGPU/amdgcn-demanded-vector-elts-inseltpoison.ll Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D93817/new/ https://reviews.llvm.org/D93817 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits