[proposal] change default ABI for special riscv arch

Hello,

In the clang’s riscv driver,
https://github.com/llvm/llvm-project/blob/main/clang/lib/Driver/ToolChains/Arch/RISCV.cpp

the default abi is fomulated according to arch if no explicit -mabi is specified.

Is it possible to set the default abi to ilp32f for -march=rv32imacf. For my exployer’s chip, HW F is used while SW D is used. Each time I have to write "-march=rv32imacf -mabi=ilp32f“, can it be simplified to only “-march=imacf” ? Just adding a line is enough.

if (MArch.substr(4).contains_lower(“f”) && !MArch.substr(4).contains_lower(“d”))
return “ilp32f”;

Can I submit a patch to fix it?

Ben

That one line change doesn’t look like it handles multiletter extension names correctly. For example, Zbf contains “f”.

~Craig

I will figure out all corner cases, thanks for your support. :slight_smile:

I also think the logic of fomulating default arch according to -mabi can be improved.

// 3. Choose a default based on -mabi=
//
// ilp32e → rv32e
// ilp32 | ilp32f | ilp32d → rv32imafdc
// lp64 | lp64f | lp64d → rv64imafdc

it can be

// ilp32e → rv32e
// ilp32 → rv32imac
// ilp32f → rv32imacf
// ilp32d → rv32 imacfd
// lp64 → rv64imac
// lp64f → rv64imacf
// lp64d → rv64imacfd

Although GCC didn't implement the implied ABI option,
but I would suggest you create an issue on
riscv-toolchain-conventions[1] and/or raise discussion on RISC-V LLVM
sync up meeting

[1] https://github.com/riscv/riscv-toolchain-conventions

Thanks,

https://github.com/riscv/riscv-toolchain-conventions/issues/13

Ben Shi