Skip to content

Commit 58e0339

Browse files
toppercjoaosaffran
authored andcommitted
[RISCV] Set Feature32Bit/Feature64Bit based on triple for -mcpu=help. (llvm#127031)
llvm-mc keeps going after printing help text and creates an assembler. If we don't set one of the XLen sized feature bits we trip a fatal error in RISCVFeatures::validate. llvm-mc should probably be fixed, but I don't know if its the only tool with this issue.
1 parent 52b8fd7 commit 58e0339

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

llvm/lib/Target/RISCV/MCTargetDesc/RISCVMCTargetDesc.cpp

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,22 @@ static MCSubtargetInfo *createRISCVMCSubtargetInfo(const Triple &TT,
8989
if (CPU.empty() || CPU == "generic")
9090
CPU = TT.isArch64Bit() ? "generic-rv64" : "generic-rv32";
9191

92-
return createRISCVMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);
92+
MCSubtargetInfo *X =
93+
createRISCVMCSubtargetInfoImpl(TT, CPU, /*TuneCPU*/ CPU, FS);
94+
95+
// If the CPU is "help" fill in 64 or 32 bit feature so we can pass
96+
// RISCVFeatures::validate.
97+
// FIXME: Why does llvm-mc still expect a source file with -mcpu=help?
98+
if (CPU == "help") {
99+
llvm::FeatureBitset Features = X->getFeatureBits();
100+
if (TT.isArch64Bit())
101+
Features.set(RISCV::Feature64Bit);
102+
else
103+
Features.set(RISCV::Feature32Bit);
104+
X->setFeatureBits(Features);
105+
}
106+
107+
return X;
93108
}
94109

95110
static MCInstPrinter *createRISCVMCInstPrinter(const Triple &T,

0 commit comments

Comments
 (0)