[PATCH] D26556: [InstCombine] don't widen most selects by hoisting an extend
Sanjay Patel via llvm-commits
llvm-commits at lists.llvm.org
Tue Nov 15 16:09:53 PST 2016
spatel added inline comments.
================
Comment at: lib/Transforms/InstCombine/InstructionCombining.cpp:805
+ auto isNonTruncVariable = [](Value *V) {
+ return !isa<Constant>(V) && !match(V, m_Trunc(m_Value()));
+ };
----------------
filcab wrote:
> Do you want to match type sizes, though? Or at least make sure you're truncating more (or the same) as you're extending?
> Like this:
> ```[build-debug]% cat | ./bin/opt -O3 - -o - -S
> define <4 x i64> @g3vec(<4 x i32> %_a, <4 x i1> %cmp) {
> %a = trunc <4 x i32> %_a to <4 x i24>
> %sel = select <4 x i1> %cmp, <4 x i24> %a, <4 x i24> <i24 42, i24 42, i24 42, i24 42>
> %ext = zext <4 x i24> %sel to <4 x i64>
> ret <4 x i64> %ext
> }
>
>
> ; ModuleID = '<stdin>'
> source_filename = "<stdin>"
>
> ; Function Attrs: norecurse nounwind readnone
> define <4 x i64> @g3vec(<4 x i32> %_a, <4 x i1> %cmp) local_unnamed_addr #0 {
> %1 = and <4 x i32> %_a, <i32 16777215, i32 16777215, i32 16777215, i32 16777215>
> %2 = zext <4 x i32> %1 to <4 x i64>
> %ext = select <4 x i1> %cmp, <4 x i64> %2, <4 x i64> <i64 42, i64 42, i64 42, i64 42>
> ret <4 x i64> %ext
> }
>
> attributes #0 = { norecurse nounwind readnone }
> ```
> vs just `select` + `zext` (using `sext` will make it even worse :-)
>
This case would be another improvement over the current behavior, right? Ok if I add a 'TODO' comment in this patch and follow up with another test case plus that refinement?
https://reviews.llvm.org/D26556
More information about the llvm-commits
mailing list