[PATCH] D125271: [riscv] Enable strict assertions in InsertVSETVLI data flow

Wang Pengcheng via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Sun May 29 23:00:31 PDT 2022


pcwang-thead added a comment.

Here is a issue found in D125747 <https://reviews.llvm.org/D125747>. It seems that we will get compilation failures with `-mllvm -scalable-vectorization=on` using latest LLVM upstream.
Full command is: `clang -O2 -march=rv64gcv -mllvm -riscv-v-vector-bits-max=128 -mllvm -riscv-v-vector-bits-min=128 -mllvm -scalable-vectorization=on` .
When compiling TSVC, I got:

  clang-15: llvm-project-upstream/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp:1172: void {anonymous}::RISCVInsertVSETVLI::emitVSETVLIs(llvm::MachineBasicBlock&): Assertion `CurInfo == Info.Exit && "InsertVSETVLI dataflow invariant violated"' failed.
  PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
  Stack dump:
  0.      Program arguments: software/clang-riscv-upstream/bin/clang-15 -cc1 -triple riscv64-unknown-linux-gnu -emit-obj --mrelax-relocations -disable-free -clear-ast-before-backend -main-file-name tsc.c -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=none -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-feature +m -target-feature +a -target-feature +f -target-feature +d -target-feature +c -target-feature +v -target-feature +zve32f -target-feature +zve32x -target-feature +zve64d -target-feature +zve64f -target-feature +zve64x -target-feature +zvl128b -target-feature +zvl32b -target-feature +zvl64b -target-feature +relax -target-feature -save-restore -target-abi lp64d -msmall-data-limit 8 -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -fcoverage-compilation-dir=workspace/issues/vectorize/TSVC -resource-dir software/clang-riscv-upstream/lib/clang/15.0.0 -isysroot software/release/sysroot/ -internal-isystem software/clang-riscv-upstream/lib/clang/15.0.0/include -internal-isystem software/release/sysroot//usr/local/include -internal-isystem software/release/lib/gcc/riscv64-unknown-linux-gnu/10.2.0/../../../../riscv64-unknown-linux-gnu/include -internal-externc-isystem software/release/sysroot//include -internal-externc-isystem software/release/sysroot//usr/include -O2 -fdebug-compilation-dir=workspace/issues/vectorize/TSVC -ferror-limit 19 -fno-signed-char -fgnuc-version=4.2.1 -fcolor-diagnostics -vectorize-loops -vectorize-slp -mllvm -riscv-v-vector-bits-max=128 -mllvm -riscv-v-vector-bits-min=128 -mllvm -scalable-vectorization=on -faddrsig -o /tmp/tsc-ef6646.o -x c tsc.c
  1.      <eof> parser at end of file
  2.      Code generation
  3.      Running pass 'Function Pass Manager' on module 'tsc.c'.
  4.      Running pass 'RISCV Insert VSETVLI pass' on function '@init'
   #0 0x0000563161942c8e llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) llvm-project-upstream/llvm/lib/Support/Unix/Signals.inc:565:0
   #1 0x0000563161942d45 PrintStackTraceSignalHandler(void*) llvm-project-upstream/llvm/lib/Support/Unix/Signals.inc:632:0
   #2 0x00005631619409ec llvm::sys::RunSignalHandlers() llvm-project-upstream/llvm/lib/Support/Signals.cpp:103:0
   #3 0x000056316194260f SignalHandler(int) llvm-project-upstream/llvm/lib/Support/Unix/Signals.inc:407:0
   #4 0x00007fb119b9e980 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x12980)
   #5 0x00007fb11884fe87 raise /build/glibc-uZu3wS/glibc-2.27/signal/../sysdeps/unix/sysv/linux/raise.c:51:0
   #6 0x00007fb1188517f1 abort /build/glibc-uZu3wS/glibc-2.27/stdlib/abort.c:81:0
   #7 0x00007fb1188413fa __assert_fail_base /build/glibc-uZu3wS/glibc-2.27/assert/assert.c:89:0
   #8 0x00007fb118841472 (/lib/x86_64-linux-gnu/libc.so.6+0x30472)
   #9 0x000056315f2af865 (anonymous namespace)::RISCVInsertVSETVLI::emitVSETVLIs(llvm::MachineBasicBlock&) llvm-project-upstream/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp:1171:0
  #10 0x000056315f2b0f8c (anonymous namespace)::RISCVInsertVSETVLI::runOnMachineFunction(llvm::MachineFunction&) llvm-project-upstream/llvm/lib/Target/RISCV/RISCVInsertVSETVLI.cpp:1476:0
  #11 0x0000563160757cff llvm::MachineFunctionPass::runOnFunction(llvm::Function&) llvm-project-upstream/llvm/lib/CodeGen/MachineFunctionPass.cpp:73:0
  #12 0x0000563160eb0894 llvm::FPPassManager::runOnFunction(llvm::Function&) llvm-project-upstream/llvm/lib/IR/LegacyPassManager.cpp:1430:0
  #13 0x0000563160eb0b3d llvm::FPPassManager::runOnModule(llvm::Module&) llvm-project-upstream/llvm/lib/IR/LegacyPassManager.cpp:1476:0
  #14 0x0000563160eb0f65 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) llvm-project-upstream/llvm/lib/IR/LegacyPassManager.cpp:1545:0
  #15 0x0000563160eabf87 llvm::legacy::PassManagerImpl::run(llvm::Module&) llvm-project-upstream/llvm/lib/IR/LegacyPassManager.cpp:535:0
  #16 0x0000563160eb17ef llvm::legacy::PassManager::run(llvm::Module&) llvm-project-upstream/llvm/lib/IR/LegacyPassManager.cpp:1673:0
  #17 0x0000563161e2b800 (anonymous namespace)::EmitAssemblyHelper::RunCodegenPipeline(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>&, std::unique_ptr<llvm::ToolOutputFile, std::default_delete<llvm::ToolOutputFile>>&) llvm-project-upstream/clang/lib/CodeGen/BackendUtil.cpp:1000:0
  #18 0x0000563161e2ba04 (anonymous namespace)::EmitAssemblyHelper::EmitAssembly(clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) llvm-project-upstream/clang/lib/CodeGen/BackendUtil.cpp:1025:0
  #19 0x0000563161e2ca1c clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) llvm-project-upstream/clang/lib/CodeGen/BackendUtil.cpp:1181:0
  #20 0x00005631632689b0 clang::BackendConsumer::HandleTranslationUnit(clang::ASTContext&) llvm-project-upstream/clang/lib/CodeGen/CodeGenAction.cpp:379:0
  #21 0x0000563164ffc402 clang::ParseAST(clang::Sema&, bool, bool) llvm-project-upstream/clang/lib/Parse/ParseAST.cpp:182:0
  #22 0x00005631628ea47f clang::ASTFrontendAction::ExecuteAction() llvm-project-upstream/clang/lib/Frontend/FrontendAction.cpp:1139:0
  #23 0x0000563163265160 clang::CodeGenAction::ExecuteAction() llvm-project-upstream/clang/lib/CodeGen/CodeGenAction.cpp:1144:0
  #24 0x00005631628e9d48 clang::FrontendAction::Execute() llvm-project-upstream/clang/lib/Frontend/FrontendAction.cpp:1036:0
  #25 0x000056316281ed6b clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) llvm-project-upstream/clang/lib/Frontend/CompilerInstance.cpp:1036:0
  #26 0x0000563162a89d7c clang::ExecuteCompilerInvocation(clang::CompilerInstance*) llvm-project-upstream/clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:266:0
  #27 0x000056315f2336b1 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) llvm-project-upstream/clang/tools/driver/cc1_main.cpp:248:0
  #28 0x000056315f227195 ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) llvm-project-upstream/clang/tools/driver/driver.cpp:317:0
  #29 0x000056315f2278b2 main llvm-project-upstream/clang/tools/driver/driver.cpp:388:0
  #30 0x00007fb118832c87 __libc_start_main /build/glibc-uZu3wS/glibc-2.27/csu/../csu/libc-start.c:344:0
  #31 0x000056315f22590a _start (software/clang-riscv-upstream/bin/clang-15+0x2ce490a)

Reduced LLVM IRs via llvm-reduce:

  target datalayout = "e-m:e-p:64:64-i64:64-i128:128-n64-S128"
  target triple = "riscv64-unknown-linux-gnu"
  
  define i32 @init(ptr %b, i1 %0) {
  entry:
    br label %vector.body8501
  
  vector.body8501:                                  ; preds = %vector.body8501, %entry
    %vec.ind8503 = phi <4 x i64> [ %vec.ind.next8506, %vector.body8501 ], [ zeroinitializer, %entry ]
    %step.add8504 = add <4 x i64> %vec.ind8503, zeroinitializer
    %1 = getelementptr inbounds float, ptr %b, <4 x i64> %step.add8504
    call void @llvm.masked.scatter.v4f32.v4p0(<4 x float> zeroinitializer, <4 x ptr> %1, i32 0, <4 x i1> undef)
    %vec.ind.next8506 = add <4 x i64> %vec.ind8503, <i64 16, i64 16, i64 16, i64 16>
    br i1 %0, label %vector.body8513, label %vector.body8501
  
  vector.body8513:                                  ; preds = %vector.body8513, %vector.body8501
    call void @llvm.masked.scatter.v4f32.v4p0(<4 x float> <float -1.000000e+00, float -1.000000e+00, float -1.000000e+00, float -1.000000e+00>, <4 x ptr> undef, i32 0, <4 x i1> undef)
    br label %vector.body8513
  }
  
  ; Function Attrs: nocallback nofree nosync nounwind willreturn writeonly
  declare void @llvm.masked.scatter.v4f32.v4p0(<4 x float>, <4 x ptr>, i32 immarg, <4 x i1>) #0
  
  ; uselistorder directives
  uselistorder ptr @llvm.masked.scatter.v4f32.v4p0, { 1, 0 }
  
  attributes #0 = { nocallback nofree nosync nounwind willreturn writeonly }

@reames can you take a look at this?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D125271/new/

https://reviews.llvm.org/D125271



More information about the llvm-commits mailing list