[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