Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add vcreate for non-tuple types and vundefine for tuple types #288

Merged
merged 6 commits into from
Oct 30, 2023

Conversation

eopXD
Copy link
Collaborator

@eopXD eopXD commented Oct 25, 2023

Although this use case [0] is SIMD style and not that ideal for RVV, they can benefit from this syntax sugar.
On the other hand, vundefined for tuple types will help declaration under -Winitialized to avoid using a vcreate with numbers of vundefined non-tuple members in it.

Resolves #286.

For the vcreate addition, variants of an assembling a fractional LMUL type with smaller fractional LMUL, and assembling LMUL>1 type with fractional LMUL is omitted because they are unlikely use cases.

LLVM implementations of the added intrinsics are:

@dzaima
Copy link

dzaima commented Oct 25, 2023

Fractional LMUL inputs should be completely forbidden just like they are with register vset_v_ and vget_v_, as they'd need to reference fractional parts of a single register by a register, which is impossible.

@zhongjuzhe
Copy link

All fractional intrinsics should be removed.

For example:

vint16m1_t test_vcreate_v_i16mf4_i16m1(vint16mf4_t v0, vint16mf4_t v1,
vint16mf4_t v2, vint16mf4_t v3) {
return __riscv_vcreate_v_i16mf4_i16m1(v0, v1, v2, v3);
}

They are not like tuple type vint16mf4x4_t.

vint16m1_t occupies 1 register wheras vint16mf4x4_t occupies 4 registers.

@kito-cheng
Copy link
Collaborator

I could imagine the fraction LMUL version is implement-able but complicate and very low performance (vmerge and/or vslide), so I am +1 on removing that.

Construction associating any fractional LMUL type is omitted because it
will be unlikely cases and we are adding a syntax sugar here.

Signed-off-by: eop Chen <eop.chen@sifive.com>
An undefined value for tuple types allows us to avoid uninitialized
value during variable declaration.

Signed-off-by: eop Chen <eop.chen@sifive.com>
@eopXD eopXD changed the title Add vcreate for non-tuple types Add vcreate for non-tuple types and vundefine for tuple types Oct 26, 2023
eopXD added a commit to eopXD/llvm-project that referenced this pull request Oct 26, 2023
Copy link
Collaborator

@kito-cheng kito-cheng left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@eopXD eopXD merged commit a798393 into main Oct 30, 2023
9 checks passed
@eopXD eopXD deleted the eopc/vcreate-for-non-tuple branch October 30, 2023 07:03
vathpela pushed a commit to vathpela/gcc that referenced this pull request Nov 1, 2023
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
nstester pushed a commit to nstester/gcc that referenced this pull request Nov 2, 2023
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Nov 7, 2023
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Nov 7, 2023
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Blackhex pushed a commit to Windows-on-ARM-Experiments/gcc-woarm64 that referenced this pull request Dec 18, 2023
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Feb 28, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Feb 28, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Mar 8, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Mar 8, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 12, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 12, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 13, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 13, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 13, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 13, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 15, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/ruyi-gcc that referenced this pull request Mar 15, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
yulong18 pushed a commit to yulong18/ruyisdk-gcc that referenced this pull request Mar 17, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
yulong18 pushed a commit to yulong18/ruyisdk-gcc that referenced this pull request Mar 17, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 19, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 19, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 21, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 21, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 25, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 25, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Mar 25, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
XYenChi pushed a commit to XYenChi/gcc that referenced this pull request Mar 25, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 27, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.
Liaoshihua pushed a commit to Liaoshihua/gcc that referenced this pull request Mar 27, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.
fanghuaqi pushed a commit to riscv-mcu/riscv-gcc that referenced this pull request May 29, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-functions.def (vundefined): Add vundefine
	intrinsics for tuple types.
	* config/riscv/riscv-vector-builtins.cc: Ditto.
	* config/riscv/vector.md (@vundefined<mode>): Ditto.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_vundefined.c: New test.

(cherry picked from commit 084ea7e)
fanghuaqi pushed a commit to riscv-mcu/riscv-gcc that referenced this pull request May 29, 2024
riscv-non-isa/rvv-intrinsic-doc#288

gcc/ChangeLog:

	* config/riscv/riscv-vector-builtins-bases.cc: Expand non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-functions.def (vcreate): Define non-tuple intrinsics.
	* config/riscv/riscv-vector-builtins-shapes.cc (struct vcreate_def): Ditto.
	* config/riscv/riscv-vector-builtins.cc: Add arg types.

gcc/testsuite/ChangeLog:

	* gcc.target/riscv/rvv/base/tuple_create.c: Rename to vcreate.c.
	* gcc.target/riscv/rvv/base/vcreate.c: New test.

(cherry picked from commit d508a94)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

vcreate intrinsics for LMUL > 1
4 participants