Displaying 20 results from an estimated 1000 matches similar to: "Putting "tied-to" constraints on virtual registers in SelectionDAGISel's Select() method"
2013 Apr 24
1
[LLVMdev] use of ARM GPRPair register class
Hi,
I am experimenting with creating instructions that write into virtual
registers that use the ARM GPRPair register class in Pre-RA phase.
During register allocation, I hit an assertion because the code is not in
SSA form:
lib/CodeGen/MachineRegisterInfo.cpp:271: llvm::MachineInstr*
llvm::MachineRegisterInfo::getVRegDef(unsigned int) const: Assertion
`(I.atEnd() || llvm::next(I) ==
2009 Jan 27
3
[LLVMdev] Hitting assertion, unsure why
Ok, I've had time to track this down a little bit more and I seem to
have found another case where it fails. This is occurring during
Schedulur->EmitSchedule() in SelectionDAGISel.cpp:695. The problem seems
to be that somehow the CopyToReg part of the switch statement in
ScheduleDAG::EmitNode has a FrameIndex as its second operand. This is
especially problematic because the code is either
2017 Feb 21
2
Error at Pre-regalloc Machine LICM: "getVRegDef assumes a single definition or no definition"' failed.
Hello.
Does anybody have an idea why I'm getting the error below when using llc with
arguments -O1 -disable-cgp? Note that this error is not given when using llc -O0. (I'd
like to mention also I'm using custom Instruction selection for BUILD_VECTOR, which gets
converted in my back end's machine instrution VLOAD_D, although the custom code seems to
always select
2008 Feb 15
2
[LLVMdev] More address registers
Hi again,
I'm finally getting some time to work on my m68k backend again. :)
I was trying to solve the problem that loads from arbitrary addresses need
to go through address registers. 68k allows flexible addressing similar to
what the x86 can do, only that the adressing base has to reside in an
address register:
move.size[b/w/l] <Displacement>(Ax, Dx * Scale[1/2/4/8]), <Dest>
2017 Sep 11
3
Live Register Spilling
Hi Matthias,
Sorry for the late reply.
Yes, you are correct, I do have optnone attribute on my function.
I did pass -O0 to the tools.
For your information, my invocations are as below:
clang --target=mips-unknown-linux -mips32 test.c -emit-llvm -S
llc -O0 -march=mips -mcpu=mips32 test.ll -o test.s
Based on the generated .ll file, there is optnone attribute on the function, i
2009 Jul 01
3
[LLVMdev] Inserting nodes into SelectionDAG (X86)
On Jul 1, 2009, at 2:22 PMPDT, Dan Gohman wrote:
>> Ops.push_back(DAG.getConstant(1, MVT::i32));
>> Chain = DAG.getNode(ISD::ADD, DAG.getVTList(MVT::Other, MVT::i32),
>> &Ops[0], Ops.size());
>>
>> Isn't that the way how it is supposed to work?
>
> ADD does not use a chain, so there's no chain operand, or
> MVT::Other result for it in an ADD
2017 Mar 07
2
Specifying conditional blocks for the back end
Hello.
Because I experience optimizations (DCE, OoO schedule) which mess the correct
semantics of the list of instructions lowered in ISelLowering from the VSELECT LLVM
instruction, and these bad transformations happen even before scheduling, at later I-sel
subpasses, I try to fix this problem by lowering VSELECT to only one pseudo-instruction
and LATER translate it to a list of
2009 Jan 28
0
[LLVMdev] Hitting assertion, unsure why
On Jan 27, 2009, at 3:54 PM, Villmow, Micah wrote:
> Ok, I've had time to track this down a little bit more and I seem to
> have found another case where it fails. This is occurring during
> Schedulur->EmitSchedule() in SelectionDAGISel.cpp:695. The problem
> seems
> to be that somehow the CopyToReg part of the switch statement in
> ScheduleDAG::EmitNode has a
2014 Feb 08
2
[LLVMdev] selecting ISD node - help
Hey, I wanted to add an intrinsics to read MSRs.
So I added the intrinsics and lowered it to a new ISD node I created
ISD::RDMSR, its first operand is the MSR id.
I added a case in X86DAGToDAGISel::Select for ISD::RDMSR.
Now I know rdmsr works like so:
mov r/ecx, <id>
rdmsr
r/eax holds the lower 32/64 bit
>From what I understood this needs a Token Factor node, nodes which are
2014 Aug 11
2
[LLVMdev] tablegen pattern
Hi Guys,
I have a taget instruction which take a vec4 and returns a vec4.( say instruction “vec4:$dst mod( vec4:$src)" )
And I want to use it to match i an ir instruction/intrinsic function( say " float:$dst llvm.irmod( vec4:$src)" which takes a vec4, output a float.
I think the procedure is: when I see the intrinsic llvm.irmod, I need to call "extractlt(
2008 Feb 18
0
[LLVMdev] More address registers
2008/2/15, Andreas Fredriksson <deplinenoise at gmail.com>:
>
> I tried mocking this up using the following. (Base is what's returned as
> the Ax in the move expression above when the DAG is constructed due to
> SelectAddr().)
>
> SDOperand chain = CurDAG->getCopyToReg(Base, M68K::A3, Base);
> Base = CurDAG->getCopyFromReg(chain, M68K::A3, MVT::i32);
2018 Sep 10
3
How to avoid multiple registers definitions in customInserter.
Hi,
I'm lowering some of the logical operators (by example the | operator) on integer32.
Sadly my target only provide native instruction on high and low parts of 32 bits registers.
So, I have to generate a sequence of two native instructions (LOR followed by HOR).
I've introduced an Pseudo instruction with a custom inserter.
def OR_A_oo : CLPPseudoInst<(ins
2009 Jul 03
0
[LLVMdev] Inserting nodes into SelectionDAG (X86)
Thanks to your help I've actually made some progress... Especially the
SelectionDAGNodes.h was a good hint.
But there are still some things that I can't figure out:
// 'mov eax, 41'
Chain = DAG.getCopyToReg(Chain, DAG.getRegister(X86::EAX, MVT::i32),
DAG.getConstant(41, MVT::i32), InFlag);
InFlag = Chain.getValue(1);
// 'inc eax'
SDValue eaxVal =
2020 Jul 15
2
[Beginner] Understanding Tablegen language
Adding -debug to a -gen-dag-isel run can also print useful information
about the parsed patterns.
On Wed, Jul 15, 2020 at 10:44 AM Matt Arsenault via llvm-dev <
llvm-dev at lists.llvm.org> wrote:
>
>
> > On Jul 15, 2020, at 13:33, Rotate Right via llvm-dev <
> llvm-dev at lists.llvm.org> wrote:
> >
> > Is there a backend to Tablegen which can dump a map of
2014 Oct 28
2
[LLVMdev] Problem in X86 backend (again)
Hi,
I'm still having problems implementing my custom inserter in the X86 backend.
I found a solution to my last problem (http://lists.cs.uiuc.edu/pipermail/llvmdev/2014-October/078296.html), by using a virtual register.
The binary works when it's compiled in -O0, but not in -O1,-O2,...
I really can't figure what I'm doing wrong... Any idea?
Here is the code of my custom
2020 Jul 15
2
[Beginner] Understanding Tablegen language
Is there a backend to Tablegen which can dump a map of pattern-to-matched
to instruction-to-be-generated?
--help doesn't seem to indicate anything like that.
On Tue, Jul 14, 2020 at 2:13 PM Rotate Right <rightrotate5 at gmail.com> wrote:
> Thanks Matt and Thomas. I will go through them.
>
> On Tue, Jul 14, 2020, 1:35 PM Matt P. Dziubinski <matdzb at gmail.com> wrote:
2011 Jul 05
2
[LLVMdev] load/store in IR without stack/heap
Hi all,
Can anyone give an idea to solve my problem? I'm implementing backend part
using LLVM for my research architecture. The main issue is that this
architecture
cannot use stack/heap. So, all the value should be stored in the register.
Given that architecture, load/store instruction in IR uses virtual register
to load/
store the value. For example:
C source code is:
if(...) {
a = 1;
2017 Sep 12
2
Live Register Spilling
Running llc with '-verify-machineinstrs' may tell you which instruction break the SSA form.
Ruiling
From: llvm-dev [mailto:llvm-dev-bounces at lists.llvm.org] On Behalf Of jin chuan see via llvm-dev
Sent: Monday, September 11, 2017 10:02 AM
To: Matthias Braun <mbraun at apple.com>
Cc: llvm-dev at lists.llvm.org
Subject: Re: [llvm-dev] Live Register Spilling
Sorry about the
2019 Nov 19
2
Question about physical registers in ISel
To get into more detail, I'm trying to update WebAssembly's `call`
instruction. `call` is currently constrained to return one or zero
arguments, so in TableGen we have a separate call Instruction for each
possible return type. But I need to update calls to return arbitrarily many
values of any combination of WebAssembly types, so even if we imposed some
reasonable artificial limit like 8
2016 Jan 22
2
meaning of $ in tablegen
What is the meaning of a $ sign in tablgen? Here is an example
// Pattern fragments
def vextract_sext_i8 : PatFrag<(ops node:$vec, node:$idx),
(MipsVExtractSExt node:$vec,
node:$idx, i8)>;
Taken from
https://github.com/llvm-mirror/llvm/blob/fd031a51c35d1781c066a42e221a7ae28610be3f/lib/Target/Mips/MipsMSAInstrInfo.td#L118
--
Rail Shafigulin