Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

Couldn't join subrange crash in OpenCV Arithm/Log test #28457

Closed
arsenm opened this issue Jun 10, 2016 · 5 comments
Closed

Couldn't join subrange crash in OpenCV Arithm/Log test #28457

arsenm opened this issue Jun 10, 2016 · 5 comments
Assignees
Labels
bugzilla Issues migrated from bugzilla llvm:regalloc

Comments

@arsenm
Copy link
Contributor

arsenm commented Jun 10, 2016

Bugzilla Link 28083
Resolution FIXED
Resolved on Jun 10, 2016 19:32
Version trunk
OS Linux
Attachments Semi-reduced crashing testcase, Further reduced testcase
CC @hfinkel,@MatzeB,@qcolombet

Extended Description

RegisterCoalescer crashes on this. -verify-machineinstrs catches an error before this.

*** Couldn't join subrange!

UNREACHABLE executed at /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2567!
#​0 0x00000000025c88b8 llvm::sys::PrintStackTrace(llvm::raw_ostream&) /home/matt/src/llvm/lib/Support/Unix/Signals.inc:402:0
#​1 0x00000000025c8c76 PrintStackTraceSignalHandler(void*) /home/matt/src/llvm/lib/Support/Unix/Signals.inc:470:0
#​2 0x00000000025c6f98 llvm::sys::RunSignalHandlers() /home/matt/src/llvm/lib/Support/Signals.cpp:44:0
#​3 0x00000000025c820a SignalHandler(int) /home/matt/src/llvm/lib/Support/Unix/Signals.inc:256:0
#​4 0x00007fd34769cef0 __restore_rt (/usr/lib/libpthread.so.0+0x10ef0)
#​5 0x00007fd346867295 __GI_raise (/usr/lib/libc.so.6+0x33295)
#​6 0x00007fd3468686da __GI_abort (/usr/lib/libc.so.6+0x346da)
#​7 0x0000000002562655 bindingsErrorHandler(void*, std::__cxx11::basic_string<char, std::char_traits, std::allocator > const&, bool) /home/matt/src/llvm/lib/Support/ErrorHandling.cpp:127:0
#​8 0x0000000001ebd6ff (anonymous namespace)::RegisterCoalescer::joinSubRegRanges(llvm::LiveRange&, llvm::LiveRange&, unsigned int, llvm::CoalescerPair const&) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2574:0
#​9 0x0000000001ebdcb0 (anonymous namespace)::RegisterCoalescer::mergeSubRangeInto(llvm::LiveInterval&, llvm::LiveRange const&, unsigned int, llvm::CoalescerPair&) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2630:0
#​10 0x0000000001ebe43a (anonymous namespace)::RegisterCoalescer::joinVirtRegs(llvm::CoalescerPair&) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2693:0
#​11 0x0000000001ebe84c (anonymous namespace)::RegisterCoalescer::joinIntervals(llvm::CoalescerPair&) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2742:0
#​12 0x0000000001eb8461 (anonymous namespace)::RegisterCoalescer::joinCopy(llvm::MachineInstr*, bool&) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:1456:0
#​13 0x0000000001ebeb9c (anonymous namespace)::RegisterCoalescer::copyCoalesceWorkList(llvm::MutableArrayRefllvm::MachineInstr*) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2812:0
#​14 0x0000000001ebf614 (anonymous namespace)::RegisterCoalescer::coalesceLocals() /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2938:0
#​15 0x0000000001ebfa7e (anonymous namespace)::RegisterCoalescer::joinAllIntervals() /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:2972:0
#​16 0x0000000001ebfdd9 (anonymous namespace)::RegisterCoalescer::runOnMachineFunction(llvm::MachineFunction&) /home/matt/src/llvm/lib/CodeGen/RegisterCoalescer.cpp:3018:0
#​17 0x0000000001de26ba llvm::MachineFunctionPass::runOnFunction(llvm::Function&) /home/matt/src/llvm/lib/CodeGen/MachineFunctionPass.cpp:60:0

@arsenm
Copy link
Contributor Author

arsenm commented Jun 10, 2016

assigned to @MatzeB

@qcolombet
Copy link
Collaborator

The verifier issue comes out of the Machine Scheduler, right?

I.e., the bug is in the scheduler (fall-out of the subreg scheduling?), I believe, not the coalescer.

@qcolombet
Copy link
Collaborator

Here is what I am seeing:

After Machine Instruction Scheduler

[...]
*** Bad machine code: Instruction ending live segment doesn't read the register ***

  • function: opencv_arithm_log_live_segment
  • basic block: BB#1 bb7 (0x7fd52c062a88) [496B;864B)
  • instruction: 588B %vreg74<def,dead> = COPY
  • liverange: [400r,544r:0)[544r,568r:1)[568r,588r:2) 0@400r 1@544r 2@568r
  • register: %vreg79
  • segment: [568r,588r:2)

*** Bad machine code: Instruction ending live segment doesn't read the register ***

  • function: opencv_arithm_log_live_segment
  • basic block: BB#1 bb7 (0x7fd52c062a88) [496B;864B)
  • instruction: 588B %vreg74<def,dead> = COPY
  • liverange: [544r,588r:0) 0@544r
  • register: %vreg79
  • lanemask: 00000008
  • segment: [544r,588r:0)

@arsenm
Copy link
Contributor Author

arsenm commented Jun 10, 2016

Here is what I am seeing:

After Machine Instruction Scheduler

[...]
*** Bad machine code: Instruction ending live segment doesn't read the
register ***

  • function: opencv_arithm_log_live_segment
  • basic block: BB#1 bb7 (0x7fd52c062a88) [496B;864B)
  • instruction: 588B %vreg74<def,dead> = COPY
  • liverange: [400r,544r:0)[544r,568r:1)[568r,588r:2) 0@400r 1@544r 2@568r
  • register: %vreg79
  • segment: [568r,588r:2)

*** Bad machine code: Instruction ending live segment doesn't read the
register ***

  • function: opencv_arithm_log_live_segment
  • basic block: BB#1 bb7 (0x7fd52c062a88) [496B;864B)
  • instruction: 588B %vreg74<def,dead> = COPY
  • liverange: [544r,588r:0) 0@544r
  • register: %vreg79
  • lanemask: 00000008
  • segment: [544r,588r:0)

Yes, the verifier error is after the scheduler.

@MatzeB
Copy link
Contributor

MatzeB commented Jun 11, 2016

Thanks for the testcase. Fixed in r272446

@llvmbot llvmbot transferred this issue from llvm/llvm-bugzilla-archive Dec 10, 2021
This issue was closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bugzilla Issues migrated from bugzilla llvm:regalloc
Projects
None yet
Development

No branches or pull requests

3 participants