[PATCH] D70401: [RISCV] CodeGen of RVE and ilp32e/lp64e ABIs
Edmund Raile via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Mar 28 00:29:22 PDT 2023
recallmenot added a comment.
In D70401#4205333 <https://reviews.llvm.org/D70401#4205333>, @pcwang-thead wrote:
> In D70401#4204511 <https://reviews.llvm.org/D70401#4204511>, @recallmenot wrote:
>
>> Hi, I'm working on CH32V003 for rust and it uses RV32EC core.
>> I tried replacing my distros llvm and clang with a patched version of this like this:
>>
>> git clone https://aur.archlinux.org/llvm-git.git
>> cd llvm-git
>> mkdir src
>> cd src
>> git clone https://github.com/llvm/llvm-project.git
>> cd llvm-project
>> arc patch D70401
>> cd ../..
>> mv llvm-config.h src/
>> makepkg -es
>> sudo pacman -Rd --nodeps clang llvm
>> makepkg -eid
>>
>> but that bricked my xfce-wayland-manjaro DE (one screen black)
>> And in config.toml if I put
>>
>> [build]
>> target = "riscv32i-unknown-none-elf"
>> rustflags = [
>> "-C", "target-feature=+e,+c"
>> ]
>>
>> then build with cargo build
>> LLVM still complains it doesn't implement CodeGen for RV32E yet
>> What am I doing wrong?
>> Ended up reverting to repository llvm and clang, desktop now works again but CodeGen is obviously missing.
>
> I don't see any obvious problem here.
> I am not familiar with rust. Is `riscv32i-unknown-none-elf` a valid target for `rustc`, it should be something like `riscv32-unknown-elf` in LLVM I think. And is `target-feature=+e,+c` the right way to specify features?
> Can you please provide the whole command/arguments passed to LLVM?
Yeah so I looked at the at the target files of rustc, telling rustc to do RV32I will indeed result in RV32 and the way to enable the E and C features seems to be correct, BUT:
rust uses their own "special sauce" version of llvm and rustc needs to be built against that to enable the new features. I tried to apply (patch) the diff directly to rusts llvm branch but there were many errors, and I couldn't figure out how to apply them manually since some things are different.
I'm stuck, this is all way beyond my understanding. Sorry I can't test it for you guys.
What I did was:
git clone https://github.com/rust-lang/rust.git
cd rust
nvim config.toml
[llvm]
download-ci-llvm = false
then I started building with
./x.py build
and as soon as the rust-llvm source was downloaded completely I aborted (CTRL+C).
then downloaded the raw diff from this page (button top right) into the rust llvm dir, opened a terminal in that dir and tried to patch with
patch -p1 < D70401.diff
but that gives lots of errors
resolving them manually seems way beyond me, especially since patch seems to already use fuzzy matching
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D70401/new/
https://reviews.llvm.org/D70401
More information about the cfe-commits
mailing list