[llvm-dev] lli cannot execute the bc file for RISCV, Unable to find target for this triple

199 views
Skip to first unread message

Junning Wu via llvm-dev

unread,
Apr 1, 2020, 9:00:49 PM4/1/20
to llvm...@lists.llvm.org
llvm-project version:dd8a2013dc1804be1b7d9cffacad2e984300bd22

Instructons to build LLVM+clang:

```
cmake -G Ninja -DCMAKE_INSTALL_PREFIX=/home/llvm/workspace/llvm/llvm-project/llvm_install -DCMAKE_BUILD_TYPE="Release" -DDEFAULT_SYSROOT="/home/llvm/workspace/riscv/riscv-tc-20200220/bin/riscv32-unknown-elf" -DGCC_INSTALL_PREFIX="/home/llvm/workspace/riscv/riscv-tc-20200220" -DLLVM_DEFAULT_TARGET_TRIPLE="riscv32-unknown-elf" -DLLVM_ENABLE_PROJECTS="clang;lld;libc" -DLLVM_TARGETS_TO_BUILD="RISCV" ../llvm
```

When compiling the obj file for the RTL simulation platform, everything is ok. 
But when I try to run the bc file using lli, I have such an error.

```
#../llvm/llvm-project/llvm_install/bin/lli main.ll
../llvm/llvm-project/llvm_install/bin/lli: error: error creating EE: Unable to find target for this triple (no targets are registered)
```

Clang & lli version(Confusion About " riscv32-unknown-unknown-elf " WITH " riscv32-unknown-elf "):
```
$ ../llvm/llvm-project/llvm_install/bin/clang --version
clang version 11.0.0 (https://github.com/llvm/llvm-project.git dd8a2013dc1804be1b7d9cffacad2e984300bd22)
Target: riscv32-unknown-unknown-elf
Thread model: posix
InstalledDir: /home/llvm/workspace/test_lli/../llvm/llvm-project/llvm_install/bin

$ ../llvm/llvm-project/llvm_install/bin/lli --version
LLVM (http://llvm.org/):
  LLVM version 11.0.0git
  Optimized build.
  Default target: riscv32-unknown-elf
  Host CPU: skylake
```

  Instructons to generate main.ll:

```
../llvm/llvm-project/llvm_install/bin/clang --target=riscv32-unknown-elf --sysroot=/home/llvm/workspace/riscv/riscv-tc-20200220/bin/riscv32-unknown-elf --gcc-toolchain=/home/llvm/workspace/riscv/riscv-tc-20200220 -march=rv32imac -mabi=ilp32 -I/home/llvm/workspace/llvm/llvm-project/llvm_install/riscv32-unknown-elf/include -S -emit-llvm main.c
```  

//main.c
```
#include <stdio.h>
int main(){
  int a,b,c;
  a = 5;
  b = 2;
  asm volatile
  (
    "norm   %[z], %[x]\n\t"
    : [z] "=r" (c)
    : [x] "r" (a)
  ) ;
   if ( c != 28 ){
     printf("\nHAAWKING TEST: FAILED\n");
     return -1;
  }
  printf("\nHAAWKING TEST: PASSED\n");
  return 0;
}
```

Since I add some custom instructions to the RISC-V ISA and have not got a simulator, so I want to check out whether these instructions using lli.
Can anyone figure out why this happens?

Luís Marques via llvm-dev

unread,
Apr 2, 2020, 6:55:47 AM4/2/20
to Junning Wu, llvm...@lists.llvm.org
On Thu, Apr 2, 2020 at 2:00 AM Junning Wu via llvm-dev <llvm...@lists.llvm.org> wrote:
Since I add some custom instructions to the RISC-V ISA and have not got a simulator, so I want to check out whether these instructions using lli.
Can anyone figure out why this happens?

LLI will either interpret the LLVM bytecode or "JIT" it to native code (basically just dynamically do a regular compilation plus code loading), so I don't think LLI is very well suited for your use case.

In any case, I am currently working on the ELF loader used for the JIT, which AFAIK is basically the only thing remaining for LLI to work for RISC-V, *if* you can then execute the native instructions. So you'll need an emulator anyway. I'm using QEMU, which you can also use for free.

Best,
Luís

Junning Wu via llvm-dev

unread,
Apr 2, 2020, 7:52:57 AM4/2/20
to Luís Marques, llvm...@lists.llvm.org
Cool, thanks! 
I also got this answer from https://llvm.org/docs/CommandGuide/lli.html, which says that “lli is not an emulator. It will not execute IR of different architectures and it can only interpret (or JIT-compile) for the host architecture.
Thanks a lot. I will try QEMU or gem5.

Reply all
Reply to author
Forward
0 new messages