ManuelJBrito added a comment. In D149548#4405173 <https://reviews.llvm.org/D149548#4405173>, @qiucf wrote:
> Why this changes IR output of following case? > > // RUN: clang vecpromote.c -S -o - -O0 -target s390x-linux-gnu -fzvector > -emit-llvm > #include <vecintrin.h> > > vector int si; > int g; > int i; > > void foo() { > si = vec_promote(g, i); > } > > // store <4 x i32> undef, ptr %__vec.i, align 16, !noalias !6 ; this undef > becomes poison after this patch > // %2 = load i32, ptr %__scalar.addr.i, align 4, !noalias !6 > // %3 = load i32, ptr %__index.addr.i, align 4, !noalias !6 > // %4 = load <4 x i32>, ptr %__vec.i, align 16, !noalias !6 > // %vecins.i = insertelement <4 x i32> %4, i32 %2, i32 %and.i I think it's because vec_promote is implemented in clang using a shufflevector with an undefined mask (-1). ConstantFold sees that we have a fully undefined mask and it folds the shufflevector to poison.(previously undef) My concern : is it Ok to have the undefined values of the vector be poison or was the undef used to abide to some specific semantics? Hope this makes sense. > I see no PowerPC related case changes. Maybe adding SystemZ folks for > comments @uweigand @jonpa My bad I pinged the wrong people, thanks for adding SystemZ folks. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D149548/new/ https://reviews.llvm.org/D149548 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits