Displaying 20 results from an estimated 600 matches similar to: "[LLVMdev] Constraints with Subregisters"
2011 Dec 21
2
[LLVMdev] Stop MachineCSE on certain instructions
Hi, Jim.
In my case the target (Tilera) doesn't have a full 32-bit mult operation and to do so it has to accumulate results from three 16-bit mults, by retaining operands and the result across in the same registers. However the ISel DAG thinks its a CSE case. Please note this is not a MAdd/MSub triad.
How could I do this by defining such a sequence or the pattern in the .def file itself for
2011 Dec 20
2
[LLVMdev] Stop MachineCSE on certain instructions
Hello Jim.
Just out of curiosity, won't such mechanism work via the patterns from instructions defs?
Thanks.
Girish.
>________________________________
> From: Jim Grosbach <grosbach at apple.com>
>To: Johannes Birgmeier <e0902998 at student.tuwien.ac.at>
>Cc: LLVM Developers Mailing List <llvmdev at cs.uiuc.edu>
>Sent: Monday, 19 December 2011 10:33 PM
2011 Dec 23
1
[LLVMdev] Stop MachineCSE on certain instructions
Hi Jim.
I'm doing custom lowering but here I have a very basic issue and the situation is like this -
[Original Op]
Mul Dest, Src1, Src2
[Expanded from EmitInstrWithCustomInserter]
Step1 Dest, Src1, Src2 <=== BuildMI(..., Step1, Dest).addReg(Src1).addReg(Src2)
Step2 Dest, Src1, Src2 <=== BuildMI(..., Step2, Dest).addReg(Src1).addReg(Src2)
Step3 Dest, Src2, Src1 <===
2011 Dec 21
0
[LLVMdev] Stop MachineCSE on certain instructions
Ah, OK. I think I understand much better now. Thanks! You shouldn't need bundles for that sort of thing. A custom lowering or a fancy pattern should be sufficient, depending on the details of how your target is defined.
For patterns, looks at the various targets use of the Pat<>, Pattern<>, ComplexPattern<> and related classes in the .td files.
For examples of custom
2011 Dec 20
0
[LLVMdev] Stop MachineCSE on certain instructions
Hi Girish,
Sorry, but I'm afraid I don't understand your question. Can you elaborate a bit?
-Jim
On Dec 19, 2011, at 9:12 PM, girish gulawani wrote:
>
> Hello Jim.
> Just out of curiosity, won't such mechanism work via the patterns from instructions defs?
>
> Thanks.
> Girish.
>
> From: Jim Grosbach <grosbach at apple.com>
> To: Johannes
2011 Dec 19
0
[LLVMdev] Stop MachineCSE on certain instructions
Hi Johannes,
You may be interested in the (very) recently added explicit instruction bundle support. For an example of their usage, have a look at the ARM backend's IT-block (Thumb2 predication support) pass, which uses them to tie instructions together.
-Jim
On Dec 17, 2011, at 12:24 PM, Johannes Birgmeier wrote:
> Hello,
>
> I'm writing for a backend and have a complicated
2011 Dec 17
4
[LLVMdev] Stop MachineCSE on certain instructions
Hello,
I'm writing for a backend and have a complicated instruction bundle (3
instructions) that has to be executed like a single block (meaning: if
the first instruction is executed, all three have to be executed to
obtain the result, though not necessarily without other instructions in
between). Unfortunately, MachineCSE gets in the way sometimes and rips
it apart.
Is there a way to
2011 Dec 20
0
[LLVMdev] Stop MachineCSE on certain instructions
If an instruction is marked as side-effect free then it's a candidate for CSE. Try marking the instruction with hasSideEffects.
Evan
On Dec 17, 2011, at 12:24 PM, Johannes Birgmeier wrote:
> Hello,
>
> I'm writing for a backend and have a complicated instruction bundle (3
> instructions) that has to be executed like a single block (meaning: if
> the first instruction
2011 Dec 21
1
[LLVMdev] Stop MachineCSE on certain instructions
Hi Evan.
The hasSideEffects method I believe operates only on Inline Assembly (IA) blocks. What if such a sequence is not part of IA?
Thanks.
Girish.
If an instruction is marked as side-effect free then it's a candidate for CSE. Try marking the instruction with hasSideEffects.
>
>Evan
>
>On Dec 17, 2011, at 12:24 PM, Johannes Birgmeier wrote:
>
>> Hello,
>>
2012 Jul 18
1
[LLVMdev] Instructions working on 64bit registers without true support for 64bit operations
Hello Tom,
> I took a look at lib/CodeGen/SelectionDAG/LegalizeDAG.cpp and it
> doesn't look like there is an Expand operation implemented for
> ISD::Constant. I think you'll either need implement Expand for
> ISD::Constant or Custom lower it in your backend.
thank you for that information. This exactly is what I feared. Well I
did some more mostly unguided hacking and these
2012 Aug 21
2
[LLVMdev] Passing return values on the stack & storing arbitrary sized integers
Fabian,
> here are the definitions of these register classes:
>
> // Data register class
> def DR : RegisterClass<"TriCore", [i32], 32,
> (add D0, D1, D2, D3, D4, D5, D6, D7,
> D8, D9, D10, D11, D12, D13, D14, D15)>;
>
> // Extended-size data register class
> def ER :
2012 Aug 21
0
[LLVMdev] Passing return values on the stack & storing arbitrary sized integers
2012/8/21 Anton Korobeynikov <anton at korobeynikov.info>:
>> This isn't really my area of expertise, but I think you're messing up
>> your RegisterClass definition. Look at how ARM defines DTriple.
> DTriple is untyped :) , because we do not have any valut type which
> defines 3xi64.
> However, the paired register needs to have type.
>
> Fabian, what are
2012 Aug 22
2
[LLVMdev] Passing return values on the stack & storing arbitrary sized integers
Hi Fabian, Anton,
On 22/08/2012 08:25, Fabian Scheler wrote:
>>> here are the definitions of these register classes:
>>>
>>> // Data register class
>>> def DR : RegisterClass<"TriCore", [i32], 32,
>>> (add D0, D1, D2, D3, D4, D5, D6, D7,
>>> D8, D9, D10, D11, D12, D13, D14,
2012 Jan 08
4
[LLVMdev] libcalls for shifts
> Is i64 a legal type on your target? If so, you might need to hack the
> code generator a bit; no in-tree target has a legal integer type that
> doesn't support shifts. If not, I have no idea how you're getting
> that error.
Yes, well, i64 is a legal type, that's how it is. However, i64s are
always stored in two 32-bit registers and in some cases need complicated
2012 Mar 21
4
[LLVMdev] apparent mistake in several ports register td file ???
The field Num seems to have no meaning. It is not recognized by the
backend tools. It does not hurt anything but should not be there.
// We have banks of 32 registers each.
class MipsReg<string n> : Register<n> {
field bits<5> Num;
let Namespace = "Mips";
}
class ARMReg<bits<4> num, string n, list<Register> subregs = []> :
Register<n> {
2012 Aug 22
0
[LLVMdev] Passing return values on the stack & storing arbitrary sized integers
>> here are the definitions of these register classes:
>>
>> // Data register class
>> def DR : RegisterClass<"TriCore", [i32], 32,
>> (add D0, D1, D2, D3, D4, D5, D6, D7,
>> D8, D9, D10, D11, D12, D13, D14, D15)>;
>>
>> // Extended-size data register class
>> def ER :
2012 Mar 23
0
[LLVMdev] apparent mistake in several ports register td file ???
At least or Mips, this line seems extraneous. I removed it and and all
consequential uses of
that (400 changes to MipsRegisterInfo.td) and make check for mips still
works.
Am running our full test sequence now.
This Mips part of this was copied from the Sparc port. Similar problems
in other ports.
Seems this has just been copied many times to new ports.
On 03/21/2012 02:58 PM, reed kotler
2011 Oct 27
0
[LLVMdev] Trunc Load
On Thu, Oct 27, 2011 at 9:29 AM, Johannes Birgmeier
<e0902998 at student.tuwien.ac.at> wrote:
>
>> Hi Johannes, what processor are you targeting? Is it little-endian or
>> big-endian?
> Little-endian. (The truth: you can set it manually, but it is set to
> little endian, for sure.) The processor is a TI TMS320C64x.
>
> Follow-up: I discovered that the
2012 Jan 08
0
[LLVMdev] libcalls for shifts
On Sat, Jan 7, 2012 at 10:18 AM, Johannes Birgmeier
<e0902998 at student.tuwien.ac.at> wrote:
> Hello,
>
> my target has libcall support for long long shifts. I already have the
> following lines in my Lowering constructor:
>
> setLibcallName(RTLIB::SHL_I64, "__llshl");
> setLibcallName(RTLIB::SRL_I64, "__llshru");
>
2011 Oct 27
2
[LLVMdev] Trunc Load
> Hi Johannes, what processor are you targeting? Is it little-endian or
> big-endian?
Little-endian. (The truth: you can set it manually, but it is set to
little endian, for sure.) The processor is a TI TMS320C64x.
Follow-up: I discovered that the "guilty" method is
DAGCombiner::ReduceLoadWidth. The error is introduced because the offset
is not calculated correctly.
The first