[LLVMdev] Always unfold memory operand

David Meyer pdox at google.com
Tue Jun 8 16:20:56 PDT 2010


Hi Eli,

I have tried this, but the resulting tool-chain was broken.

There are only two references to "CALL64m": the definition in
X86Instr64bit.td, and an entry in X86InstrInfo.cpp.
After commenting both out, compilation of a large application fails with:

llc: ScheduleDAG.cpp:462: void
llvm::ScheduleDAGTopologicalSort::InitDAGTopologicalSorting(): Assertion
`Node2Index[SU->NodeNum] > Node2Index[I->getSUnit()->NodeNum] && "Wrong
topological sorting"' failed.

bugpoint produced this minimal example which triggers the problem:

define ccc void @ArgsFree() nounwind {
entry:
  %0 = load void (i8*)** undef, align 4
  call ccc void %0(i8* undef) nounwind
  unreachable
}

Any ideas?

- David



On Tue, Jun 8, 2010 at 4:04 PM, Eli Friedman <eli.friedman at gmail.com> wrote:

> On Tue, Jun 8, 2010 at 2:05 PM, David Meyer <pdox at google.com> wrote:
> > Hi,
> > I am attempting to modify LLVM to generate code for an architecture which
> is
> > nearly identical to X86-64, but with a few minor differences.
> > In particular, "call" must always have a register operand, and cannot
> have a
> > memory operand. Any ideas on how I can express this rule?
>
> Just get rid of the pattern for matching the CALL64m instruction, or
> make it require a target feature your target doesn't have.
>
> -Eli
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20100608/f6456814/attachment.html>


More information about the llvm-dev mailing list