[PATCH] D139706: [RISCV][VP] expand vp intrinscs if no +v feature

Craig Topper via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Dec 13 08:54:48 PST 2022


craig.topper added a comment.

In D139706#3991367 <https://reviews.llvm.org/D139706#3991367>, @inclyc wrote:

> In D139706#3987299 <https://reviews.llvm.org/D139706#3987299>, @craig.topper wrote:
>
>> Can we test scalable vectors too?
>
> Oops it crashes... (without +v)
>
>   declare i32 @llvm.vp.reduce.add.nxv4i32(i32, <vscale x 4 x i32>, <vscale x 4 x i1>, i32)
>   
>   define i32 @vpreduce_add_nxv4i32(i32 %s, <vscale x 4 x i32> %v, <vscale x 4 x i1> %m, i32 %evl) {
>     %r = call i32 @llvm.vp.reduce.add.nxv4i32(i32 %s, <vscale x 4 x i32> %v, <vscale x 4 x i1> %m, i32 %evl)
>     ret i32 %r
>   }
>
>
>
>   LLVM ERROR: Don't know how to legalize this scalable vector type
>   PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace.
>   Stack dump:
>   0.      Program arguments: <llvm-project>/build/bin/llc -mtriple=riscv32 -verify-machineinstrs
>   1.      Running pass 'Function Pass Manager' on module '<stdin>'.
>   2.      Running pass 'RISCV DAG->DAG Pattern Instruction Selection' on function '@vpreduce_add_nxv4i32'
>    #0 0x00007f84946951da llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) <llvm-project>/llvm/lib/Support/Unix/Signals.inc:567:11
>    #1 0x00007f849469538b PrintStackTraceSignalHandler(void*) <llvm-project>/llvm/lib/Support/Unix/Signals.inc:641:1
>    #2 0x00007f8494693a16 llvm::sys::RunSignalHandlers() <llvm-project>/llvm/lib/Support/Signals.cpp:104:5
>    #3 0x00007f8494695a75 SignalHandler(int) <llvm-project>/llvm/lib/Support/Unix/Signals.inc:412:1
>    #4 0x00007f8493d94950 (/usr/lib64/libc.so.6+0x37950)
>    #5 0x00007f8493de042c (/usr/lib64/libc.so.6+0x8342c)
>    #6 0x00007f8493d948b2 raise (/usr/lib64/libc.so.6+0x378b2)
>    #7 0x00007f8493d7f471 abort (/usr/lib64/libc.so.6+0x22471)
>    #8 0x00007f849451c214 llvm::report_fatal_error(llvm::Twine const&, bool) <llvm-project>/llvm/lib/Support/ErrorHandling.cpp:125:5
>    #9 0x00007f849451c082 <llvm-project>/llvm/lib/Support/ErrorHandling.cpp:83:3
>   #10 0x00007f8498425ace llvm::TargetLoweringBase::getVectorTypeBreakdown(llvm::LLVMContext&, llvm::EVT, llvm::EVT&, unsigned int&, llvm::MVT&) const <llvm-project>/llvm/lib/CodeGen/TargetLoweringBase.cpp:1595:23
>   #11 0x00007f849abac44f llvm::TargetLoweringBase::getVectorTypeBreakdownForCallingConv(llvm::LLVMContext&, unsigned int, llvm::EVT, llvm::EVT&, unsigned int&, llvm::MVT&) const <llvm-project>/llvm/include/llvm/CodeGen/TargetLowering.h:1047:5
>   #12 0x00007f8498ac7ae1 getCopyFromPartsVector(llvm::SelectionDAG&, llvm::SDLoc const&, llvm::SDValue const*, unsigned int, llvm::MVT, llvm::EVT, llvm::Value const*, std::optional<unsigned int>) <llvm-project>/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:341:15
>   #13 0x00007f8498a7551c getCopyFromParts(llvm::SelectionDAG&, llvm::SDLoc const&, llvm::SDValue const*, unsigned int, llvm::MVT, llvm::EVT, llvm::Value const*, std::optional<unsigned int>, std::optional<llvm::ISD::NodeType>) <llvm-project>/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:172:12
>   #14 0x00007f8498ac3e13 llvm::SelectionDAGISel::LowerArguments(llvm::Function const&) <llvm-project>/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp:10770:29
>   #15 0x00007f8498b9925a llvm::SelectionDAGISel::SelectAllBasicBlocks(llvm::Function const&) <llvm-project>/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:1401:3
>   #16 0x00007f8498b97cdd llvm::SelectionDAGISel::runOnMachineFunction(llvm::MachineFunction&) <llvm-project>/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp:479:3
>   #17 0x00007f849ab1f3c5 llvm::RISCVDAGToDAGISel::runOnMachineFunction(llvm::MachineFunction&) <llvm-project>/llvm/lib/Target/RISCV/RISCVISelDAGToDAG.h:37:5
>   #18 0x00007f8498013e2f llvm::MachineFunctionPass::runOnFunction(llvm::Function&) <llvm-project>/llvm/lib/CodeGen/MachineFunctionPass.cpp:91:8
>   #19 0x00007f849528b643 llvm::FPPassManager::runOnFunction(llvm::Function&) <llvm-project>/llvm/lib/IR/LegacyPassManager.cpp:1430:23
>   #20 0x00007f8495290462 llvm::FPPassManager::runOnModule(llvm::Module&) <llvm-project>/llvm/lib/IR/LegacyPassManager.cpp:1476:16
>   #21 0x00007f849528bf19 (anonymous namespace)::MPPassManager::runOnModule(llvm::Module&) <llvm-project>/llvm/lib/IR/LegacyPassManager.cpp:1545:23
>   #22 0x00007f849528ba8a llvm::legacy::PassManagerImpl::run(llvm::Module&) <llvm-project>/llvm/lib/IR/LegacyPassManager.cpp:535:16
>   #23 0x00007f8495290741 llvm::legacy::PassManager::run(llvm::Module&) <llvm-project>/llvm/lib/IR/LegacyPassManager.cpp:1672:3
>   #24 0x0000561d7417889a compileModule(char**, llvm::LLVMContext&) <llvm-project>/llvm/tools/llc/llc.cpp:737:41
>   #25 0x0000561d74176ca2 main <llvm-project>/llvm/tools/llc/llc.cpp:418:13
>   #26 0x00007f8493d8034a (/usr/lib64/libc.so.6+0x2334a)
>   #27 0x00007f8493d803fc __libc_start_main (/usr/lib64/libc.so.6+0x233fc)
>   #28 0x0000561d741764b1 _start (<llvm-project>/build/bin/llc+0x284b1)

Can you use vp.load and vp.store instead of using scalable vector arguments and returns?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D139706



More information about the llvm-commits mailing list