[PATCH] D157603: [RISCV] Truncate constants to EleSize when combine store of BUILD_VECTOR

Wang Pengcheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Aug 10 05:27:20 PDT 2023


wangpc added inline comments.


================
Comment at: llvm/test/CodeGen/RISCV/rvv/pr64588.ll:10
+; CHECK-NEXT:    ret
+  %v = insertelement <64 x i64> zeroinitializer, i64 0, i32 1
+  %trunc = trunc <64 x i64> %v to <64 x i1>
----------------
wangpc wrote:
> There is still a problem here that this `insertelement` is discarded somehow:
> ```
> Initial selection DAG: %bb.0 'bar:'
> SelectionDAG has 19 nodes:
>   t0: ch,glue = EntryToken
>   t2: i64,ch = CopyFromReg t0, Register:i64 %0
>   t4: i64,ch = CopyFromReg t0, Register:i64 %1
>   t7: i32 = Constant<1>
>             t6: v64i64 = BUILD_VECTOR Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>
>           t9: v64i64 = insert_vector_elt t6, Constant:i64<0>, Constant:i64<1>
>         t10: v64i1 = truncate t9
>       t14: ch = store<(store (s64) into %ir.p11)> t0, t10, t2, undef:i64
>       t16: v8i8 = BUILD_VECTOR Constant:i8<0>, Constant:i8<0>, Constant:i8<0>, Constant:i8<0>, Constant:i8<0>, Constant:i8<0>, Constant:i8<0>, Constant:i8<0>
>       t12: i64 = add t2, Constant:i64<8>
>     t17: ch = store<(store (s64) into %ir.p2)> t14, t16, t12, undef:i64
>   t18: ch = RISCVISD::RET_GLUE t17
> 
> 
> 
> Combining: t18: ch = RISCVISD::RET_GLUE t17
> 
> Combining: t17: ch = store<(store (s64) into %ir.p2)> t14, t16, t12, undef:i64
> Creating new node: t19: ch = store<(store (s64) into %ir.p2)> t0, t16, t12, undef:i64
> Creating new node: t20: ch = TokenFactor t14, t19
> 
> Replacing.1 t17: ch = store<(store (s64) into %ir.p2)> t14, t16, t12, undef:i64
> 
> With: t20: ch = TokenFactor t14, t19
>  and 0 other values
> 
> Combining: t19: ch = store<(store (s64) into %ir.p2)> t0, t16, t12, undef:i64
> Creating new node: t21: ch = store<(store (s64) into %ir.p2)> t0, Constant:i64<0>, t12, undef:i64
>  ... into: t21: ch = store<(store (s64) into %ir.p2)> t0, Constant:i64<0>, t12, undef:i64
> 
> Combining: t21: ch = store<(store (s64) into %ir.p2)> t0, Constant:i64<0>, t12, undef:i64
> 
> Combining: t20: ch = TokenFactor t14, t21
> 
> Combining: t18: ch = RISCVISD::RET_GLUE t20
> 
> Combining: t14: ch = store<(store (s64) into %ir.p11)> t0, t10, t2, undef:i64
> 
> Combining: t13: i64 = undef
> 
> Combining: t12: i64 = add t2, Constant:i64<8>
> 
> Combining: t11: i64 = Constant<8>
> 
> Combining: t10: v64i1 = truncate t9
> Creating new node: t22: v64i1 = BUILD_VECTOR Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>
> 
> Replacing.2 t10: v64i1 = truncate t9
> 
> With: t22: v64i1 = BUILD_VECTOR Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>
> 
> 
> Combining: t22: v64i1 = BUILD_VECTOR Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>, Constant:i64<0>
> 
> Combining: t14: ch = store<(store (s64) into %ir.p11)> t0, t22, t2, undef:i64
> Creating new node: t23: ch = store<(store (s64) into %ir.p11)> t0, Constant:i64<0>, t2, undef:i64
>  ... into: t23: ch = store<(store (s64) into %ir.p11)> t0, Constant:i64<0>, t2, undef:i64
> 
> Combining: t13: i64 = undef
> 
> Combining: t23: ch = store<(store (s64) into %ir.p11)> t0, Constant:i64<0>, t2, undef:i64
> 
> Combining: t20: ch = TokenFactor t23, t21
> 
> Combining: t5: i64 = Constant<0>
> 
> Combining: t2: i64,ch = CopyFromReg t0, Register:i64 %0
> 
> Combining: t1: i64 = Register %0
> 
> Combining: t0: ch,glue = EntryToken
> Optimized lowered selection DAG: %bb.0 'bar:'
> SelectionDAG has 11 nodes:
>   t0: ch,glue = EntryToken
>   t2: i64,ch = CopyFromReg t0, Register:i64 %0
>       t23: ch = store<(store (s64) into %ir.p11)> t0, Constant:i64<0>, t2, undef:i64
>         t12: i64 = add t2, Constant:i64<8>
>       t21: ch = store<(store (s64) into %ir.p2)> t0, Constant:i64<0>, t12, undef:i64
>     t20: ch = TokenFactor t23, t21
>   t18: ch = RISCVISD::RET_GLUE t20
> ```
OK I know, I thought the second operand is index.
Not a problem here and I changed the test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D157603/new/

https://reviews.llvm.org/D157603



More information about the llvm-commits mailing list