mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-21 06:52:10 +00:00
[RISCV] Recover the implication between Zve* extensions and the V extension.
This revision recover the implication between Zve* extensions and the V extension. Differential Revision: https://reviews.llvm.org/D119210
This commit is contained in:
parent
ce48fe47af
commit
bfb4c0c370
@ -188,7 +188,7 @@ void RISCVTargetInfo::getTargetDefines(const LangOptions &Opts,
|
||||
if (ISAInfo->hasExtension("c"))
|
||||
Builder.defineMacro("__riscv_compressed");
|
||||
|
||||
if (ISAInfo->hasExtension("zve32x") || ISAInfo->hasExtension("v"))
|
||||
if (ISAInfo->hasExtension("zve32x"))
|
||||
Builder.defineMacro("__riscv_vector");
|
||||
}
|
||||
|
||||
|
@ -11,7 +11,7 @@
|
||||
// CHECK-RV64V-NEXT: ret i32 [[CONV]]
|
||||
//
|
||||
|
||||
// CHECK-RV64-ERR: error: builtin requires at least one of the following extensions support to be enabled : 'Zve32x', 'V'
|
||||
// CHECK-RV64-ERR: error: builtin requires at least one of the following extensions support to be enabled : 'Zve32x'
|
||||
|
||||
int test() {
|
||||
return __builtin_rvv_vsetvli(1, 0, 0);
|
||||
|
@ -1040,7 +1040,7 @@ void RVVEmitter::createBuiltins(raw_ostream &OS) {
|
||||
|
||||
OS << "#if defined(TARGET_BUILTIN) && !defined(RISCVV_BUILTIN)\n";
|
||||
OS << "#define RISCVV_BUILTIN(ID, TYPE, ATTRS) TARGET_BUILTIN(ID, TYPE, "
|
||||
"ATTRS, \"zve32x|v\")\n";
|
||||
"ATTRS, \"zve32x\")\n";
|
||||
OS << "#endif\n";
|
||||
for (auto &Def : Defs) {
|
||||
auto P =
|
||||
|
@ -688,11 +688,9 @@ Error RISCVISAInfo::checkDependency() {
|
||||
bool HasE = Exts.count("e") != 0;
|
||||
bool HasD = Exts.count("d") != 0;
|
||||
bool HasF = Exts.count("f") != 0;
|
||||
bool HasZve32x = Exts.count("zve32x") != 0;
|
||||
bool HasVector = Exts.count("zve32x") != 0;
|
||||
bool HasZve32f = Exts.count("zve32f") != 0;
|
||||
bool HasZve64d = Exts.count("zve64d") != 0;
|
||||
bool HasV = Exts.count("v") != 0;
|
||||
bool HasVector = HasZve32x || HasV;
|
||||
bool HasZvl = MinVLen != 0;
|
||||
|
||||
if (HasE && !IsRv32)
|
||||
@ -732,7 +730,7 @@ Error RISCVISAInfo::checkDependency() {
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
static const char *ImpliedExtsV[] = {"zvl128b", "f", "d"};
|
||||
static const char *ImpliedExtsV[] = {"zvl128b", "zve64d", "f", "d"};
|
||||
static const char *ImpliedExtsZfhmin[] = {"f"};
|
||||
static const char *ImpliedExtsZfh[] = {"f"};
|
||||
static const char *ImpliedExtsZve64d[] = {"zve64f"};
|
||||
@ -864,11 +862,6 @@ void RISCVISAInfo::updateMaxELen() {
|
||||
ExtName.getAsInteger(10, ZveELen);
|
||||
MaxELen = std::max(MaxELen, ZveELen);
|
||||
}
|
||||
if (ExtName == "v") {
|
||||
MaxELenFp = 64;
|
||||
MaxELen = 64;
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -340,21 +340,21 @@ def FeatureStdExtZve64d
|
||||
def FeatureStdExtV
|
||||
: SubtargetFeature<"v", "HasStdExtV", "true",
|
||||
"'V' (Vector Extension for Application Processors)",
|
||||
[FeatureStdExtZvl128b, FeatureStdExtF, FeatureStdExtD]>;
|
||||
[FeatureStdExtZvl128b, FeatureStdExtZve64d, FeatureStdExtF, FeatureStdExtD]>;
|
||||
|
||||
def HasVInstructions : Predicate<"Subtarget->hasVInstructions()">,
|
||||
AssemblerPredicate<
|
||||
(any_of FeatureStdExtZve32x, FeatureStdExtV),
|
||||
(any_of FeatureStdExtZve32x),
|
||||
"'V' (Vector Extension for Application Processors), 'Zve32x' or "
|
||||
"'Zve64x' (Vector Extensions for Embedded Processors)">;
|
||||
def HasVInstructionsI64 : Predicate<"Subtarget->hasVInstructionsI64()">,
|
||||
AssemblerPredicate<
|
||||
(any_of FeatureStdExtZve64x, FeatureStdExtV),
|
||||
(any_of FeatureStdExtZve64x),
|
||||
"'V' (Vector Extension for Application Processors) or 'Zve64x' "
|
||||
"(Vector Extensions for Embedded Processors)">;
|
||||
def HasVInstructionsAnyF : Predicate<"Subtarget->hasVInstructionsAnyF()">,
|
||||
AssemblerPredicate<
|
||||
(any_of FeatureStdExtZve32f, FeatureStdExtV),
|
||||
(any_of FeatureStdExtZve32f),
|
||||
"'V' (Vector Extension for Application Processors), 'Zve32f', "
|
||||
"'Zve64f' or 'Zve64d' (Vector Extensions for Embedded Processors)">;
|
||||
|
||||
|
@ -205,19 +205,13 @@ public:
|
||||
}
|
||||
|
||||
// Vector codegen related methods.
|
||||
bool hasVInstructions() const { return HasStdExtV || HasStdExtZve32x; }
|
||||
bool hasVInstructionsI64() const { return HasStdExtV || HasStdExtZve64x; }
|
||||
bool hasVInstructionsF16() const {
|
||||
return (HasStdExtV || HasStdExtZve32f) && HasStdExtZfh;
|
||||
}
|
||||
bool hasVInstructions() const { return HasStdExtZve32x; }
|
||||
bool hasVInstructionsI64() const { return HasStdExtZve64x; }
|
||||
bool hasVInstructionsF16() const { return HasStdExtZve32f && HasStdExtZfh; }
|
||||
// FIXME: Consider Zfinx in the future
|
||||
bool hasVInstructionsF32() const {
|
||||
return HasStdExtV || (HasStdExtZve32f && HasStdExtF);
|
||||
}
|
||||
bool hasVInstructionsF32() const { return HasStdExtZve32f && HasStdExtF; }
|
||||
// FIXME: Consider Zdinx in the future
|
||||
bool hasVInstructionsF64() const {
|
||||
return HasStdExtV || (HasStdExtZve64d && HasStdExtD);
|
||||
}
|
||||
bool hasVInstructionsF64() const { return HasStdExtZve64d && HasStdExtD; }
|
||||
// F16 and F64 both require F32.
|
||||
bool hasVInstructionsAnyF() const { return hasVInstructionsF32(); }
|
||||
unsigned getMaxInterleaveFactor() const {
|
||||
|
@ -85,8 +85,8 @@
|
||||
; RV32ZBR: .attribute 5, "rv32i2p0_zbr0p93"
|
||||
; RV32ZBS: .attribute 5, "rv32i2p0_zbs1p0"
|
||||
; RV32ZBT: .attribute 5, "rv32i2p0_zbt0p93"
|
||||
; RV32V: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV32COMBINED: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zfh1p0_zbb1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV32V: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV32COMBINED: .attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zfh1p0_zbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV32ZBKB: .attribute 5, "rv32i2p0_zbkb1p0"
|
||||
; RV32ZBKC: .attribute 5, "rv32i2p0_zbkc1p0"
|
||||
; RV32ZBKX: .attribute 5, "rv32i2p0_zbkx1p0"
|
||||
@ -119,8 +119,8 @@
|
||||
; RV64ZBR: .attribute 5, "rv64i2p0_zbr0p93"
|
||||
; RV64ZBS: .attribute 5, "rv64i2p0_zbs1p0"
|
||||
; RV64ZBT: .attribute 5, "rv64i2p0_zbt0p93"
|
||||
; RV64V: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV64COMBINED: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zfh1p0_zbb1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV64V: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV64COMBINED: .attribute 5, "rv64i2p0_f2p0_d2p0_v1p0_zfh1p0_zbb1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
; RV64ZBKB: .attribute 5, "rv64i2p0_zbkb1p0"
|
||||
; RV64ZBKC: .attribute 5, "rv64i2p0_zbkc1p0"
|
||||
; RV64ZBKX: .attribute 5, "rv64i2p0_zbkx1p0"
|
||||
|
@ -34,43 +34,43 @@
|
||||
# CHECK: attribute 5, "rv32i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"
|
||||
|
||||
.attribute arch, "rv32iv"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl32b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl64b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl128b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl32b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl256b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl512b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl1024b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl2048b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl512b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl4096b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl8192b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl16384b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl32768b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32768b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32768b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl8192b1p0"
|
||||
|
||||
.attribute arch, "rv32ivzvl65536b"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32768b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl65536b1p0_zvl8192b1p0"
|
||||
# CHECK: attribute 5, "rv32i2p0_f2p0_d2p0_v1p0_zve32f1p0_zve32x1p0_zve64d1p0_zve64f1p0_zve64x1p0_zvl1024b1p0_zvl128b1p0_zvl16384b1p0_zvl2048b1p0_zvl256b1p0_zvl32768b1p0_zvl32b1p0_zvl4096b1p0_zvl512b1p0_zvl64b1p0_zvl65536b1p0_zvl8192b1p0"
|
||||
|
||||
.attribute arch, "rv32izve32x"
|
||||
# CHECK: attribute 5, "rv32i2p0_zve32x1p0_zvl32b1p0"
|
||||
|
Loading…
Reference in New Issue
Block a user