[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 04:52:05 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>
----------------
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
```
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