[PATCH] D117854: [RISCV] Refactor Zve* extensions.
Jianjian Guan via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 20 22:42:28 PST 2022
jacquesguan created this revision.
jacquesguan added reviewers: craig.topper, khchen, eopXD, benshi001.
Herald added subscribers: VincentWu, luke957, achieveartificialintelligence, vkmr, frasercrmck, evandro, luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, hiraditya.
jacquesguan requested review of this revision.
Herald added subscribers: llvm-commits, MaskRay.
Herald added a project: LLVM.
According to the spec, there are some difference between V and Zve64d. For example, the vmulh integer multiply variants that return the high word of the product (vmulh.vv, vmulh.vx, vmulhu.vv, vmulhu.vx, vmulhsu.vv, vmulhsu.vx) are not included for EEW=64 in Zve64*, but V extension does support these instructions. So I think that we could not mixed use Zve64d and the V extension.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D117854
Files:
llvm/lib/Target/RISCV/RISCV.td
llvm/lib/Target/RISCV/RISCVSubtarget.h
Index: llvm/lib/Target/RISCV/RISCVSubtarget.h
===================================================================
--- llvm/lib/Target/RISCV/RISCVSubtarget.h
+++ llvm/lib/Target/RISCV/RISCVSubtarget.h
@@ -179,13 +179,19 @@
}
// Vector codegen related methods.
- bool hasVInstructions() const { return HasStdExtZve32x; }
- bool hasVInstructionsI64() const { return HasStdExtZve64x; }
- bool hasVInstructionsF16() const { return HasStdExtZve32f && HasStdExtZfh; }
+ bool hasVInstructions() const { return HasStdExtV || HasStdExtZve32x; }
+ bool hasVInstructionsI64() const { return HasStdExtV || HasStdExtZve64x; }
+ bool hasVInstructionsF16() const {
+ return HasStdExtV || (HasStdExtZve32f && HasStdExtZfh);
+ }
// FIXME: Consider Zfinx in the future
- bool hasVInstructionsF32() const { return HasStdExtZve32f && HasStdExtF; }
+ bool hasVInstructionsF32() const {
+ return HasStdExtV || (HasStdExtZve32f && HasStdExtF);
+ }
// FIXME: Consider Zdinx in the future
- bool hasVInstructionsF64() const { return HasStdExtZve64d && HasStdExtD; }
+ bool hasVInstructionsF64() const {
+ return HasStdExtV || (HasStdExtZve64d && HasStdExtD);
+ }
// F16 and F64 both require F32.
bool hasVInstructionsAnyF() const { return hasVInstructionsF32(); }
unsigned getMaxInterleaveFactor() const {
Index: llvm/lib/Target/RISCV/RISCV.td
===================================================================
--- llvm/lib/Target/RISCV/RISCV.td
+++ llvm/lib/Target/RISCV/RISCV.td
@@ -193,21 +193,21 @@
def FeatureStdExtV
: SubtargetFeature<"experimental-v", "HasStdExtV", "true",
"'V' (Vector Extension for Application Processors)",
- [FeatureStdExtZvl128b, FeatureStdExtZve64d, FeatureStdExtF, FeatureStdExtD]>;
+ [FeatureStdExtZvl128b, FeatureStdExtF, FeatureStdExtD]>;
def HasVInstructions : Predicate<"Subtarget->hasVInstructions()">,
AssemblerPredicate<
- (any_of FeatureStdExtZve32x),
+ (any_of FeatureStdExtZve32x, FeatureStdExtV),
"'V' (Vector Extension for Application Processors), 'Zve32x' or "
"'Zve64x' (Vector Extensions for Embedded Processors)">;
def HasVInstructionsI64 : Predicate<"Subtarget->hasVInstructionsI64()">,
AssemblerPredicate<
- (any_of FeatureStdExtZve64x),
+ (any_of FeatureStdExtZve64x, FeatureStdExtV),
"'V' (Vector Extension for Application Processors) or 'Zve64x' "
"(Vector Extensions for Embedded Processors)">;
def HasVInstructionsAnyF : Predicate<"Subtarget->hasVInstructionsAnyF()">,
AssemblerPredicate<
- (any_of FeatureStdExtZve32f),
+ (any_of FeatureStdExtZve32f, FeatureStdExtV),
"'V' (Vector Extension for Application Processors), 'Zve32f', "
"'Zve64f' or 'Zve64d' (Vector Extensions for Embedded Processors)">;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D117854.401865.patch
Type: text/x-patch
Size: 2902 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20220121/53c214d6/attachment.bin>
More information about the llvm-commits
mailing list