Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

P.275ページのllcでのエラーが発生しません。 #31

Closed
m1goh opened this issue Nov 3, 2022 · 3 comments
Closed

P.275ページのllcでのエラーが発生しません。 #31

m1goh opened this issue Nov 3, 2022 · 3 comments

Comments

@m1goh
Copy link

m1goh commented Nov 3, 2022

本では、minous_value.cをコンパイルして、アセンブラを生成するとllcでエラーが発生していますが、私の実行環境ではエラーとならず。アセンブラが生成されてしまいます。
このような感じです。

akiyoshi@beetle:~$ cd
akiyoshi@beetle:~$ cd minus_value/
akiyoshi@beetle:~/minus_value$ cat minus_value.c
int minus_value()
{
    return -5;
akiyoshi@beetle:~/minus_value$ ~/llvm-myriscvx120/build/bin/clang  minus_value.c -c  -target riscv64-unknown-elf -emit-llvm -o minus_value.bc
akiyoshi@beetle:~/minus_value$ ~/llvm-myriscvx120/build/bin/llc -march=myriscvx64 -filetype=asm long_value.bc -o long_value.myriscvx64.S
/home/akiyoshi/llvm-myriscvx120/build/bin/llc: error: /home/akiyoshi/llvm-myriscvx120/build/bin/llc: long_value.bc: error: Could not open input file: No such file or directory
akiyoshi@beetle:~/minus_value$ ~/llvm-myriscvx120/build/bin/llc -march=myriscvx64 -filetype=asm minus_value.bc -o minus_value.myriscvx64.S
akiyoshi@beetle:~/minus_value$ cat minus_value.myriscvx64.S
        .text
        .section .mdebug.abilp
        .previous
        .file   "minus_value.c"
        .globl  minus_value                     # -- Begin function minus_value
        .p2align        2
        .type   minus_value,@function
minus_value:                            # @minus_value

# %bb.0:                                # %entry
        addi    x10, x0, -5
        ret
$func_end0:
        .size   minus_value, ($func_end0)-minus_value
                                        # -- End function
        .ident  "clang version 12.0.1 (https://github.com/llvm/llvm-project.git 06f588827f7961847ed820a15a51e994c86fc1f8)"
        .section        ".note.GNU-stack","",@progbits

P.279のlong_value.cをコンパイルすると本と同じようなllcでエラーが発生します。

akiyoshi@beetle:~$ cd long_value/
akiyoshi@beetle:~/long_value$ ls
long_value.bc  long_value.c
akiyoshi@beetle:~/long_value$ ~/llvm-myriscvx120/build/bin/clang long_value.c  -c  -target riscv64-unknown-elf -emit-llv
m -o long_value.bc
akiyoshi@beetle:~/long_value$ ~/llvm-myriscvx120/build/bin/llc -march=myriscvx64 -filetype=asm long_value.bc -o long_value..myriscvx64.S
LLVM ERROR: Cannot select: t1: i64 = Constant<81985529216486895>
In function: long_value
PLEASE submit a bug report to https://bugs.llvm.org/ and include the crash backtrace.
Stack dump:
0.      Program arguments: /home/akiyoshi/llvm-myriscvx120/build/bin/llc -march=myriscvx64 -filetype=asm long_value.bc -o long_value..myriscvx64.S
1.      Running pass 'Function Pass Manager' on module 'long_value.bc'.
2.      Running pass 'MYRISCVX DAG->DAG Pattern Instruction Selection' on function '@long_value'
 #0 0x0000562bce0455ca llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Support/Unix/Signals.inc:565:22
 #1 0x0000562bce045685 PrintStackTraceSignalHandler(void*) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Support/Unix/Signals.inc:632:1
 #2 0x0000562bce0432fb llvm::sys::RunSignalHandlers() /home/akiyoshi/llvm-myriscvx120/llvm/lib/Support/Signals.cpp:71:20
 #3 0x0000562bce044f16 SignalHandler(int) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Support/Unix/Signals.inc:407:1
 #4 0x00007f93fa678420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
 #5 0x00007f93fa11500b raise (/lib/x86_64-linux-gnu/libc.so.6+0x4300b)
 #6 0x00007f93fa0f4859 abort (/lib/x86_64-linux-gnu/libc.so.6+0x22859)
 #7 0x0000562bcdf8529d llvm::install_bad_alloc_error_handler(void (*)(void*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool), void*) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Support/ErrorHandling.cpp:130:61
 #8 0x0000562bcdf85096 llvm::report_fatal_error(llvm::StringRef, bool) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Support/ErrorHandling.cpp:90:68
 #9 0x0000562bcde41b3b /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3763:21
#10 0x0000562bcde41263 llvm::SelectionDAGISel::SelectCodeCommon(llvm::SDNode*, unsigned char const*, unsigned int) /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:3666:9
#11 0x0000562bcc84dca6 llvm::MYRISCVXDAGToDAGISel::SelectCode(llvm::SDNode*) /home/akiyoshi/llvm-myriscvx120/build/lib/Target/MYRISCVX/MYRISCVXGenDAGISel.inc:3605:1
#12 0x0000562bcc84daf7 llvm::MYRISCVXDAGToDAGISel::Select(llvm::SDNode*) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MYRISCVXISelDAGToDAG.cpp:101:13
#13 0x0000562bcde337e3 llvm::SelectionDAGISel::DoInstructionSelection() /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1118:32
#14 0x0000562bcde32abc llvm::SelectionDAGISel::CodeGenAndEmitDAG() /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:957:61
#15 0x0000562bcde31193 llvm::SelectionDAGISel::SelectBasicBlock(llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, llvm::ilist_iterator<llvm::ilist_detail::node_options<llvm::Instruction, true, false, void>, false, true>, bool&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:711:1
#16 0x0000562bcde35e99 llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1611:33
#17 0x0000562bcde2fd9d llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:506:7
#18 0x0000562bcc84d792 llvm::MYRISCVXDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/Target/MYRISCVX/MYRISCVXISelDAGToDAG.cpp:51:52
#19 0x0000562bccfedd55 llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/CodeGen/MachineFunctionPass.cpp:72:33
#20 0x0000562bcd6554ae llvm::FPPassManager::runOnFunction(llvm::Function&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/IR/LegacyPassManager.cpp:1435:20
#21 0x0000562bcd655777 llvm::FPPassManager::runOnModule(llvm::Module&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/IR/LegacyPassManager.cpp:1481:13
#22 0x0000562bcd655be9 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/IR/LegacyPassManager.cpp:1550:20
#23 0x0000562bcd650ce4 llvm::legacy::PassManagerImpl::run(llvm::Module&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/IR/LegacyPassManager.cpp:541:13
#24 0x0000562bcd6564bf llvm::legacy::PassManager::run(llvm::Module&) /home/akiyoshi/llvm-myriscvx120/llvm/lib/IR/LegacyPassManager.cpp:1678:1
#25 0x0000562bcc38b9f0 compileModule(char**, llvm::LLVMContext&) /home/akiyoshi/llvm-myriscvx120/llvm/tools/llc/llc.cpp:687:66
#26 0x0000562bcc3896cc main /home/akiyoshi/llvm-myriscvx120/llvm/tools/llc/llc.cpp:385:35
#27 0x00007f93fa0f6083 __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x24083)
#28 0x0000562bcc3886be _start (/home/akiyoshi/llvm-myriscvx120/build/bin/llc+0x13256be)
Aborted

本とは、挙動が変わってしまっていると考えていいのでしょうか?もし、おわかりになるようであれば教えていただけるとありがたいです。よろしくお願いします。

@msyksphinz-self
Copy link
Owner

本件確認しました。どうもLLVMの挙動が変わってしまったようでErrattaはのちほどアップデートします。
Clangのオプションで -target riscv64-unknown-elf をつけるかつけないかでllcの挙動が変わります。
-targetをつけると正常動作し、-targetをつけないとエラーとなります。
とりあえずllcハングを確認したい場合はclangの-targetオプションを外してみてください。

@msyksphinz-self
Copy link
Owner

-targetをつけない場合

; ModuleID = 'minus_value.riscv64.temp.bc'
source_filename = "minus_value.c"
target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n64-S128"
target triple = "riscv64-unknown-unknown-elf"

; Function Attrs: noinline nounwind optnone
define dso_local signext i32 @minus_value() #0 {
entry:
  ret i32 -5
}

attributes #0 = { noinline nounwind optnone "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+a,+c,+m,+relax,-save-restore" "unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0, !1, !2}
!llvm.ident = !{!3}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 1, !"target-abi", !"lp64"}
!2 = !{i32 1, !"SmallDataLimit", i32 8}
!3 = !{!"clang version 12.0.1 (git@github.com:msyksphinz-self/llvm-project.git a198ed3100730aa24b92c43173c64e9a0cfee581)"}

-targetをつけた場合

; ModuleID = 'minus_value.riscv64.static.bc'
source_filename = "minus_value.c"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

; Function Attrs: noinline nounwind optnone uwtable
define dso_local i32 @minus_value() #0 {
entry:
  ret i32 -5
}

attributes #0 = { noinline nounwind optnone uwtable "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tables"="false" "no-nans-fp-math"="false" "no-signed-zeros-fp-math"="false" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" "unsafe-fp-math"="false" "use-soft-float"="false" }

!llvm.module.flags = !{!0}
!llvm.ident = !{!1}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{!"clang version 12.0.1 (git@github.com:msyksphinz-self/llvm-project.git a198ed3100730aa24b92c43173c64e9a0cfee581)"}

@m1goh
Copy link
Author

m1goh commented Nov 8, 2022

返信ありがとうございます。本を読んでいる所が先に進んでしまったので、差分を戻してビルドしてエラーになるのを確認できました。

# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants