[PATCH] D42031: [X86] Legalize v32i1 without BWI via splitting to v16i1 rather than the default of promoting to v32i8.
Craig Topper via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 19 09:40:22 PST 2018
craig.topper added inline comments.
================
Comment at: test/CodeGen/X86/avx512-insert-extract.ll:1068
+; KNL-NEXT: kmovw %k0, %eax
; KNL-NEXT: andb $1, %al
; KNL-NEXT: movb $4, %cl
----------------
RKSimon wrote:
> Is the andb necessary? Are we missing some known bits handling here?
Yeah its unnecessary based on how it gets isel. But I'm not sure the way the DAG is written that we can guarantee it.
```
t0: ch = EntryToken
t2: v64i8,ch = CopyFromReg t0, Register:v64i8 %0
t4: v64i8,ch = CopyFromReg t0, Register:v64i8 %1
t24: v64i1 = X86ISD::CMPMU t2, t4, Constant:i8<6>
t28: v64i1 = X86ISD::KSHIFTR t24, Constant:i8<63>
t30: i32 = extract_vector_elt t28, Constant:i64<0>
t26: i8 = truncate t30
t22: i8 = and t26, Constant:i8<1>
t19: i8 = sub Constant:i8<4>, t22
t13: i32 = zero_extend t19
t16: ch,glue = CopyToReg t0, Register:i32 %eax, t13
t17: ch = X86ISD::RET_FLAG t16, TargetConstant:i32<0>, Register:i32 %eax, t16:1
```
I don't think we can make any assumptions about the upper bits of the input to the extract_vector_elt being passed through.
We could maybe pattern match this out during isel?
Or we could legalize to a DAG that explicitly contains a KMOVW node instead of extract_vector_elt. Then we could probably put out an AssertZExt.
https://reviews.llvm.org/D42031
More information about the llvm-commits
mailing list