Displaying 20 results from an estimated 40000 matches similar to: "[LLVMdev] backend store i64 on target"
2013 Aug 06
1
[LLVMdev] strcpy optimization to i32 instead of i64 stores
Hi,
For my 32-bit architecture backend, I run into trouble because strcpy is converted into i64 store instructions, on which instruction selection fails. No i64 store is declared anywhere in my .td files or architecture backend, so I would assume that they are automatically converted into 2 i32 stores, but apparently, that is not the case. Do I need to add anything to my backend to have this
2016 Jun 29
0
Instruction selection problem with type i64 - mistaken as v8i64?
Hi,
I vaguely remember hitting something like this when I was implementing MSA. IIRC, there was an optimization (in DAGCombine or somewhere around there) that was folding CopyToReg instructions into the load without checking whether the new register class was acceptable. I remember adding a target hook to limit this optimization based on the EVT's involved but I'm not sure if that's
2008 Dec 27
3
[LLVMdev] Using CallingConvLower in ARM target
Attached is a prototype patch that uses CCState to lower RET nodes in
the ARM target. Lowering CALL nodes will come later.
This patch does not handle f64 and i64 types. For these types, it
would be ideal to request the conversions below:
def RetCC_ARM_APCS : CallingConv<[
CCIfType<[f32], CCBitConvertToType<i32>>,
CCIfType<[f64], CCBitConvertToType<i64>>,
2009 Jul 10
2
[LLVMdev] Help: Instruction Pattern Matching question
Hello,
I am having some trouble matching patterns in targetinstructioninfo.td file with the CodeGen expectation. Could anybody please help?
Here is the example:
I want to emit instruction for adding 2 different kind of oprands. Basically i want to mix register types when I define the instruction for add,sub etc
I define the instruction TargetInstruction.td as follows:
class MyInst
<opcode
2016 Jun 28
2
Instruction selection problem with type i64 - mistaken as v8i64?
Hello.
I am writing a back end in which I combined the existing BPF LLVM back end with the
Mips MSA vector extensions (from the Mips back end)
I have encountered an error when compiling with llc: the instruction selector uses a
vector register instead of a scalar register with type i64 .
I have the following part of LLVM IR program:
vector.body.preheader:
2016 Jan 07
3
BPF backend with vector operations - some strange error
Hello.
I've tried to add some simple arithmetic vector operations to the BPF backend
available in the LLVM repo. Because I added in BPFRegisterInfo.td another RegisterClass
(taken from the Mips backend):
def MSA128W: RegisterClass<"BPF", [v2i64, v2f64], 128,
(sequence "W%u", 0, 31)>;
in order to support vector for example, ADD
2016 Jun 02
2
BPF backend with vector operations - error "Could not infer all types in, pattern!"
Hello.
I come back to this older thread.
Again, because of i64immSExt32 I receive TableGen error "Could not infer all types
in, pattern!" (exact details written below). So far I'm not able to generate selection
code with TableGen for the ADD_r* instructions, etc:
def i64immSExt32 : PatLeaf<(imm),
[{return
2012 Jun 23
0
[LLVMdev] Why can not sparcv9 backend handle i64 produced by FrameIndex?
Hi, all,
I have been recently porting a backend for our experimental DSP.
It has a regular register file for ALU, naming it R registers, and
another register file (J registers) for memory access.
Both R registers and J registers are 32-bit.
Since LLVM cannot distinguish 32-bit integers or pointers during
register allocation, I have to define J as 64-bit, although
it's physically 32-bit. This
2009 Jan 09
2
[LLVMdev] RFC: Store alignment should be LValue alignment, not source alignment
Hi all,
Please review this patch. It's fixing PR3232 comment #8. Function bar
from 2008-03-24-BitFiled-And-Alloca.c compiles to:
%struct.Key = type { { i32, i32 } }
...
define i32 @bar(i64 %key_token2) nounwind {
entry:
%key_token2_addr = alloca i64 ; <i64*> [#uses=2]
%retval = alloca i32 ; <i32*> [#uses=2]
%iospec =
2010 Mar 18
0
[LLVMdev] how to lower MUL i64 for soft int arithmetic?
Dear, SelectionDAG developers, could you please comment on this issue
and clarify internals of MUL lowering?
Does my case (processor with soft MUL) supported by current design or
such architectures are out of scope? How lowering of large MUL is
supposed to work? What kind of minimalistic support should be provided
by target back-end? What can be used from current LegalizeDAG?
- Thanks, Sergey
2010 Mar 17
0
[LLVMdev] llvm-gcc promotes i32 mul to i64 inside __muldi3
> This shouldn't be necessary, IMO. If you were going to implement it,
> then the correct thing to do would be to have generic selection dag
> lowering of large multiplies, which renders the library mostly
> useless.
In fact, I would prefer to avoid custom lowering for operations on large types.
i64 will be rare in my case (embedded) and their performance is not an issue.
I need
2010 Mar 17
2
[LLVMdev] llvm-gcc promotes i32 mul to i64 inside __muldi3
On Wed, Mar 17, 2010 at 4:57 PM, Sergey Yakoushkin
<sergey.yakoushkin at gmail.com> wrote:
> Thanks, yes, I'm facing the same issue.
>
> Hm... seems there are no simple fixes.
> I have to do one more i64 mul implementation to workaround aggressive
> optimizations.
> Is that correct? Is this the only way?
This shouldn't be necessary, IMO. If you were going to
2011 Oct 20
2
[LLVMdev] Emulate i64 add with 3 instructions
Hello!
Is there a way to tell LLVM how to emulate an instruction with multiple
others? Specifically, in our processor, there is no instruction for
adding two i64s; it has to be done like this
dst_high32:dst_low32 = src1_low32 + src2_low32 (unsigned add; dst_high
might contain the overflow bit)
dst_high32 = dst_high32 + src1_high32
dst_high32 = dst_high32 + src2_high32
I tried it with
2010 Dec 26
1
[LLVMdev] Generating target dependent function calls
On 12/26/2010 01:31 AM, Eric Christopher wrote:
>>>>
>>>>
>>>> The reason for the difference is that e.g "long" in
>>>>
>>>>> bool GOMP_loop_runtime_next(long, long)
>>>>
>>>> has a different size on different architectures.
>>>>
>>>> Currently we generate the prototypes and
2013 Jul 30
0
[LLVMdev] Help with promotion/custom handling of MUL i32 and MUL i64
On Tue, Jul 30, 2013 at 01:14:16PM -0600, Dan wrote:
> I'll try to run through the scenario:
>
>
> 64-bit register type target (all registers have 64 bits).
>
> all 32-bits are getting promoted to 64-bit integers
>
> Problem:
>
> MUL on i32 is getting promoted to MUL on i64
>
> MUL on i64 is getting expanded to a library call in compiler-rt
>
>
2013 Jul 31
2
[LLVMdev] Help with promotion/custom handling of MUL i32 and MUL i64
Thanks for the information, allow maybe I can re-phrase the question or
issue.
Assume 64-bit register types, but integer is 32-bit. Already have table
generation of the 64-bit operation descriptions.
How about this modified approach?
Before type-legalization, I'd really like to move all MUL I64 to a
subroutine call of my own choice.
This would be a form of customization, but I want this
2013 Jul 31
1
[LLVMdev] Help with promotion/custom handling of MUL i32 and MUL i64
Thanks Tom. I really appreciate your insight.
I'm able to use the customize to get the 64-bit to go to a subroutine and
for the 32-bit, I am generate XXXISD::MUL32. I'm not sure then what you
mean about "overriding" the ReplaceNodeResults.
For ReplaceNodeResults, I'm doing:
SDValue Res = LowerOperation(SDValue(N, 0), DAG);
for (unsigned I = 0, E =
2016 Mar 28
0
RFC: atomic operations on SI+
On Fri, Mar 25, 2016 at 02:22:11PM -0400, Jan Vesely wrote:
> Hi Tom, Matt,
>
> I'm working on a project that needs few coherent atomic operations (HSA
> mode: load, store, compare-and-swap) for std::atomic_uint in HCC.
>
> the attached patch implements atomic compare and swap for SI+
> (untested). I tried to stay within what was available, but there are
> few issues
2013 Jul 30
3
[LLVMdev] Help with promotion/custom handling of MUL i32 and MUL i64
I'll try to run through the scenario:
64-bit register type target (all registers have 64 bits).
all 32-bits are getting promoted to 64-bit integers
Problem:
MUL on i32 is getting promoted to MUL on i64
MUL on i64 is getting expanded to a library call in compiler-rt
the problem is that MUL32 gets promoted and then converted into a
subroutine call because it is now type i64, even though
2014 Aug 13
2
[LLVMdev] Pseudo load and store instructions for AArch64
Hello,
I'm trying to add pseudo 64-bit load and store instructions for AArch64, which
should have latencies set to "1" while being otherwise exactly the same as
normal load and store instructions. Various assertions fire (even different
ones for the same binary, maybe something is uninitialized) and I can't
understand what's wrong. Related pieces added by me:
to