Displaying 20 results from an estimated 300 matches similar to: "Using `smullohi` in TableGen patterns"
2016 Jan 18
3
Using `smullohi` in TableGen patterns
> As far as I know, you cannot define a tablegen pattern with multiple
results, and need to use C++ matching. I’m kind of surprised there are
defined td nodes for these.
Yes they were added a while ago, but never used.
If I write a C++ matcher, will the register allocator work correctly? The
multiplication instruction I'm working with always writes the result to
registers `R1` and `R0`,
2012 May 21
3
[LLVMdev] APInt::sdivrem error?
I wrote the following bit of code
static APInt FloorOfQuotient(APInt a, APInt b) {
unsigned bits = a.getBitWidth();
APInt q(bits, 1), r(bits, 1);
APInt::sdivrem(a, b, q, r);
* errs() << "sdivrem(" << a << ", " << b << ") = (" << q << ", " << r <<
")\n";
* if (r == 0)
return q;
else {
2012 May 21
0
[LLVMdev] APInt::sdivrem error?
OK, the code for sdivrem in APInt.h is wrong.
Here's what's written:
static void sdivrem(const APInt &LHS, const APInt &RHS,
APInt &Quotient, APInt &Remainder) {
if (LHS.isNegative()) {
if (RHS.isNegative())
APInt::udivrem(-LHS, -RHS, Quotient, Remainder);
else
APInt::udivrem(-LHS, RHS, Quotient, Remainder);
Quotient =
2013 Jun 21
3
[LLVMdev] ExpandDivRemLibCall vs. AEABI
Folks,
I'm working on bug 16387:
"clang doesn't produce ARM EABI-compliant modulo runtime function"
http://llvm.org/bugs/show_bug.cgi?id=16387
And I need some pointers.
I've changed ARMISelLowering::ARMTargetLowering::ARMTargetLowering() to
associate __aeabi_idivmod variants to RTLIB::{U,S}DIVREM_* library calls,
but now I need to teach the expansion that on AEABI case,
2013 Jun 21
0
[LLVMdev] ExpandDivRemLibCall vs. AEABI
Hi Renato,
> * Have some call-back mechanism, possibly upon a flag
> (HasSpecialDivRemLowering), and update the remainder result
If you setOperationAction on SDIVREM and UDIVREM to Custom you can
expand the rtlib call appropriately yourself. There's precedent for
sincos on Darwin systems (both ARM and x86) and in AArch64 for
basically every operation on fp128.
Cheers.
Tim.
2010 Aug 29
2
[LLVMdev] Register design decision for backend
Hello everbody,
This is my first email to the list, and hope to write more as i get more
involved in LLVM. I'm currently writing a backend for a 8 bit
microcontroller, and i have arrived to a point where i need to take a design
decision in order to continue the development.
Some background information: The microcontroller only has 8bit registers,
however it has some special instructions that
2010 Aug 31
0
[LLVMdev] Register design decision for backend
Hi, I don't know if anyone else has responded to your question, but I am
currently in development of a register allocator. Thank you for bringing up
the fact that sub-register classes may be larger than their super-register.
If this remains the case, I for one will write a transform for my allocator
which will make the 16 bit register the super-register with the 8bit as the
sub. At least for
2012 Jan 10
1
[LLVMdev] SelectionDAG
Hello,
I am working on a AVR backend and have a version up and running that will convert LLVM IR code to assembly code for my target. I have written a bunch of instructions from the AVR Instruction Set in AVRInstrInfo.td and not much else. In a simple test case I am attempting to compile (if that is the word you are supposed to use for this operation) test.ll:
define i8 @foo(i8 %a, i8 %b) {
2010 Nov 27
3
[LLVMdev] Register Pairing
Hello, some months ago i wrote to the mailing list asking some questions
about register pairing, i've been experimenting several things with the help
i got back then.
Some background first: this issue is for a backend for an 8bit
microcontroller with only 8bit regs, however it has a few 16bit instructions
that only work with fixed register pairs, so it doesnt allow all
combinations of regs.
2017 Feb 26
2
When AVR backend generates mulsu instruction ?
Hello LLVMDevs,
I am looking for an example for how to lower LLVM IR to mulsu kind of
instruction. I found that AVR back end have such instruction but
AVRInstrInfo.td does not define any DAG pattern for which this
instruction gets emitted.
def MULSURdRr : FMUL2RdRr<1,
(outs),
(ins GPR8:$lhs, GPR8:$rhs),
"mulsu\t$lhs, $rhs",
[]>,
Requires<[SupportsMultiplication]>;
Also
2017 Feb 27
2
When AVR backend generates mulsu instruction ?
Thanks Dylan,
I am working on a backend which has mulhsu instruction that performs
multiplication between signed and unsigned number and returns upper 32 bits
into result register. I think I also need to write some code probably as
you indicated to check signedness of the operands and based on that lower
to mulhsu instruction.
-Vivek
On Mon, Feb 27, 2017 at 11:13 AM, Dylan McKay <me at
2015 Jan 31
3
[LLVMdev] Encoding instructions with inconsistent formats
I'm attempting to implement codegen support for the AVR ST/LD
<http://www.atmel.com/webdoc/avrassembler/avrassembler.wb_ST.html> family
of instructions.
The binary encoding is not particularly consistent -- take a look at this
table of variants of LD, along with their machine code representation:
# load 8 bits from pointer register X into general purpose Rd
ld Rd, X `1001 000d dddd
2016 Jan 31
2
Specifying DAG patterns in the instruction
TableGen, as a DSL language, is made up of records. Every def corresponds
to a record. For example, TableGen has a class Register, and your backend
will define records by def GPR8 : Register<...>. You are correct in saying
that the record definition is one of the SDNode values. These correspond
1:1 to llvm::ISD::NodeType
2010 Sep 04
6
[LLVMdev] Possible missed optimization?
Hello, while testing trivial functions in my backend i noticed a suboptimal
way of assigning regs that had the following pattern, consider the following
function:
typedef unsigned short t;
t foo(t a, t b)
{
t a4 = b^a^18;
return a4;
}
Argument "a" is passed in R15:R14 and argument "b" is passed in R13:R12, the
return value is stored in R15:R14.
Producing the
2010 Sep 04
0
[LLVMdev] Possible missed optimization?
Hello
> and as the return value. Is this a missed optimization from LLVM or did i
> miss something out?
> Changing the register allocation order didnt work.
What are the patterns for xor / mov ?
--
With best regards, Anton Korobeynikov
Faculty of Mathematics and Mechanics, Saint Petersburg State University
2010 Dec 13
0
[LLVMdev] tblgen internals
Concerning the RecordKeeper reference in Record. Would you prefer to partially go
back to a more limited constrained version of a global. Since we are not threaded anyway,
we could turn the reference into a singleton for the duration of an initial parse and use session.
The concept would be to instead make the reference a static pointer, make RecordKeeper
a friend of Record, and add
2010 Sep 04
1
[LLVMdev] Possible missed optimization?
Indeed, i've marked it as commutable:
let isCommutable = 1,
isTwoAddress = 1 in
def XORRdRr : FRdRr<0b0010,
0b01,
(outs GPR8:$dst),
(ins GPR8:$src1, GPR8:$src2),
"xor\t$dst, $src2",
[(set GPR8:$dst, (xor GPR8:$src1, GPR8:$src2))]>;
-------------- next part --------------
An HTML
2010 Dec 13
0
[LLVMdev] tblgen internals
On Dec 12, 2010, at 10:54 AM, Garrison Venn wrote:
>
> Hey Chris,
>
> The following patch removes all global references to a RecordKeeper instance for the tblgen
> utility. This effort was motivated by the FIXME remark, in TableGen.cpp. Although a few files
> were touched, the main change was to Record.h.
>
> The patch takes the simple approach of adding a RecordKeeper
2010 Dec 10
1
[LLVMdev] tblgen internals
Attached patch for removing for the first trivial RecordKeeper:: getAllDerivedDefinitions(...)
dependency on the global RecordKeeper Records instance. The real work will be removing
this dependency from the other Record.h classes/structs, and from TGParser. Thinking this would
be implemented as some sort of context structure/class holding a RecordKeeper instance passed
to TGParser which in turn
2010 Aug 31
2
[LLVMdev] Register design decision for backend
Hello Jeff, you're the first one to reply to my question :)
I got a bit confused with the fact you said that the subregister class is
larger than the superregister class. As far as i understood or what i tried
to do with my code is to define a register pair composed of two 8 bit
registers the way i described in my previous message. So R1R0 in WDREGS is
directly mapped into R0 and R1 of GPR8.