-
Notifications
You must be signed in to change notification settings - Fork 6.2k
8357554: Enable vectorization of Bool -> CMove with different type size (on riscv) #28231
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
base: master
Are you sure you want to change the base?
Changes from all commits
86350bb
58a7f7a
e967fea
e27247b
4a75e87
4ee1df1
0ff5e42
924c4c9
75dee02
57973f4
4b058ce
b73a502
8eba0c0
7f36f23
3089ec9
2238d76
c0358cf
f54562f
6635678
bd5599b
2ba466b
2a0e1ad
9e5f137
736425c
bc0c9b3
5b85c74
81996cf
56b6e02
cfbe0a6
a89d26c
a336b52
8e84017
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -236,4 +236,8 @@ | |
| } | ||
| } | ||
|
|
||
| static bool supports_vector_different_use_def_size() { | ||
| return false; | ||
| } | ||
|
|
||
| #endif // CPU_X86_MATCHER_X86_HPP | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -406,6 +406,10 @@ bool VectorNode::is_populate_index_supported(BasicType bt) { | |
| return Matcher::match_rule_supported_vector(Op_PopulateIndex, vlen, bt); | ||
| } | ||
|
|
||
| bool VectorNode::is_different_use_def_size_supported() { | ||
| return Matcher::supports_vector_different_use_def_size(); | ||
| } | ||
|
Comment on lines
+409
to
+411
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this only a forwarding? What's the point of this? |
||
|
|
||
| bool VectorNode::is_shift_opcode(int opc) { | ||
| switch (opc) { | ||
| case Op_LShiftI: | ||
|
|
@@ -2302,6 +2306,7 @@ Node* VectorBlendNode::Identity(PhaseGVN* phase) { | |
| } | ||
| return this; | ||
| } | ||
|
|
||
| static bool is_replicate_uint_constant(const Node* n) { | ||
| return n->Opcode() == Op_Replicate && | ||
| n->in(1)->is_Con() && | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -110,6 +110,9 @@ class VectorNode : public TypeNode { | |
| static bool is_vector_rotate_supported(int opc, uint vlen, BasicType bt); | ||
| static bool is_vector_integral_negate_supported(int opc, uint vlen, BasicType bt, bool use_predicate); | ||
| static bool is_populate_index_supported(BasicType bt); | ||
| // Return true if every bit in this vector is 1, e.g. based on the comparison | ||
| // result of 2 floats, set a double result. | ||
| static bool is_different_use_def_size_supported(); | ||
|
Comment on lines
+113
to
+115
Contributor
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'm a bit confused about your description here. It sounds like this method is looking at a specific vector, and returns results based on that. But that's not what's happening here, is it? |
||
| // Return true if every bit in this vector is 1. | ||
| static bool is_all_ones_vector(Node* n); | ||
| // Return true if every bit in this vector is 0. | ||
|
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This sounds extremely vague. Is this supposed to only be about
CMove? Because we already have all sorts of instructions that allow different use and def types, such as conversion vectors. Those are already in use onaarch64andx64.