Displaying 20 results from an estimated 20000 matches similar to: "[LLVMdev] physical registers content/data print out"
2020 Jul 20
2
[ARM] Should Use Load and Store with Register Offset
Hello LLVM Community (specifically anyone working with ARM Cortex-M),
While trying to compile the Newlib C library I found that Clang10 was
generating slightly larger binaries than the libc from the prebuilt
gcc-arm-none-eabi toolchain. I looked at a few specific functions (memcpy,
strcpy, etc.) and noticed that LLVM does not tend to generate load/store
instructions with a register offset (e.g.
2009 Feb 13
3
[LLVMdev] Modeling GPU vector registers, again (with my implementation)
It seems to me that LLVM sub-register is not for the following hardware
architecture.
All instructions of a hardware are vector instructions. All registers
contains
4 32-bit FP sub-registers. They are called r0.x, r0.y, r0.z, r0.w.
Most instructions write more than one elements in this way:
mul r0.xyw, r1, r2
add r0.z, r3, r4
sub r5, r0, r1
Notice that the four elements of r0 are written
2020 Jul 21
2
[ARM] Should Use Load and Store with Register Offset
Hello Sjoerd,
Thank you for your response! I was not aware that -Oz is a closer
equivalent to GCC's -Os. I tried -Oz when compiling with clang and
confirmed that the Clang's generated assembly is equivalent to GCC for the
code snippet I posted above.
clang --target=armv6m-none-eabi -Oz -fomit-frame-pointer
memcpy_alt1:
push {r4, lr}
movs r3, #0
.LBB0_1:
cmp
2020 Apr 15
4
[ARM] Register pressure with -mthumb forces register reload before each call
Hi,
I have attached WIP patch for adding foldMemoryOperand to Thumb1InstrInfo.
For the following case:
void f(int x, int y, int z)
{
void bar(int, int, int);
bar(x, y, z);
bar(x, z, y);
bar(y, x, z);
bar(y, y, x);
}
it calls foldMemoryOperand twice, and thus converts two calls from blx to bl.
callMI->dump() shows the function name "bar" correctly, however in
generated
2018 Jun 15
2
Strange Machineinstr
Hi
I write a machinefunction pass to print all the machinefunction's machine
instructions.
My target architecture is ARM. However, I don't understand some part of the
machine instructions.
Below is some of the assembly language for function A.
.text:0001C034 STMFD SP!, {R4,R10,R11,LR}
> .text:0001C038 ADD R11, SP, #8
> .text:0001C03C
2020 Mar 31
2
[ARM] Register pressure with -mthumb forces register reload before each call
Hi,
Compiling attached test-case, which is reduced version of of
uECC_shared_secret from tinycrypt library [1], with
--target=arm-linux-gnueabi -march=armv6-m -Oz -S
results in reloading of register holding function's address before
every call to blx:
ldr r3, .LCPI0_0
blx r3
mov r0, r6
mov r1, r5
mov r2, r4
ldr r3,
2009 Nov 13
3
[LLVMdev] -debug and -print-machineinstrs broken
Are these known to be broken right now? I get failure when using either.
$ llc -march=arm -print-machineinstrs hw.bc
...
BB#0: derived from LLVM BB %entry
Live Ins: %LR %R7
%SP<def> = SUBri %SP<kill>, 8, 14, %reg0, %reg0
STR %LR<kill>, %SP, %reg0, 4, 14, %reg0; mem:ST4[0 llc
0x008b3304 PrintStackTrace(void*) + 45
1 llc 0x008b390c
2006 Jun 30
3
[LLVMdev] Removing dead code
> > It seems to me that the only instructions
> > with dead definitions that I should not remove are the calls. Is it true?
> > I would like to know if a code like this below is safe, that is, besides
> > call instructions, is there other instructions that must stay in the code
> > even if their definitions are dead?
> >
> > MachineInstr * mi = iter;
>
2018 Jun 15
3
Strange Machineinstr
Hi Krzysztof
Thank you very much for your quick and clear reply. I know that MIR may not
match hardware instructions directly. However, I think the semantics should
be similar.
For example, the first instruction is a store-multiple instruction in ARM.
I think the first four MIR I shown should have the similar semantics with
the first three hardware instructions. I still cannot see the
2012 Aug 30
0
[LLVMdev] MC Register mapping question (MCRegUnitIterator )
Hello Jakob and everyone,
I am observing an issue with MCRegUnitIterator in my back end, and trying
to reverse engineer some of the table gen magic around it, but if you or
someone readily knows the answer, I would highly appreciate it.
Here is the problem.
In my back end we have a rather simple int register file structure:
// Integer registers.
def R0 : Ri< 0, "r0">,
2013 Dec 20
1
[LLVMdev] spilling & restoring registers for EHReturn & return _Unwind_Reason_Code
Hi
I'm working on the XCore target and am having difficulty building libgcc.
Background:
If I use a libgcc built by llvm3.0-gcc with my current clang-llvm3.3 compiler, exceptions 'seem' to work.
Trying to rebuild libgcc however breaks exception handling - they aren't caught!
I thus assumed I needed to focus on the unwind code and particularly functions that call
2013 Jul 23
2
[LLVMdev] Question on optimizeThumb2JumpTables
In looking at the code in
ARMConstantislandPass.cpp::optimizeThumb2JumpTables(), I see that there is
the following condition for not creating tbb-based jump tables:
// The instruction should be a tLEApcrel or t2LEApcrelJT; we want
// to delete it as well.
MachineInstr *LeaMI = PrevI;
if ((LeaMI->getOpcode() != ARM::tLEApcrelJT &&
2020 Apr 07
2
[ARM] Register pressure with -mthumb forces register reload before each call
If I'm understanding what's going on in this test correctly, what's happening is:
* ARMTargetLowering::LowerCall prefers indirect calls when a function is called at least 3 times in minsize
* In thumb 1 (without -fno-omit-frame-pointer) we have effectively only 3 callee-saved registers (r4-r6)
* The function has three arguments, so those three plus the register we need to hold the
2006 Aug 03
1
[LLVMdev] need some help to remove a dummy mov
I have just added a retflag to the ARM backend. I thought that using
BRIND directly was to blame for a dummy move. But I the move wasn't
removed.
When compiling
---------------------------------------
int %g() {
entry:
call void %f( )
ret int 42
}
declare void %f()
--------------------------------------
The ARM backend produces
-------------------------------------------
g:
2012 Aug 30
2
[LLVMdev] MC Register mapping question (MCRegUnitIterator )
Hi Sergei,
Register units != sub registers.
Register units are an abstraction to describe overlapping of registers
effectively.
You probably wanted to use MCSubRegIterator.
On Thu, Aug 30, 2012 at 2:30 PM, Sergei Larin <slarin at codeaurora.org> wrote:
> Hello Jakob and everyone,
>
> I am observing an issue with MCRegUnitIterator in my back end, and trying
> to reverse
2012 Aug 31
0
[LLVMdev] Assert in LiveInterval update
Lang,
I think I am getting closer to understanding this. The findLastUseBefore()
should probably look something like this:
// Return the last use of reg between NewIdx and OldIdx.
SlotIndex findLastUseBefore(unsigned Reg, SlotIndex OldIdx) {
SlotIndex LastUse = NewIdx;
if (TargetRegisterInfo::isPhysicalRegister(Reg)) {
for (MCRegUnitRootIterator Roots(Reg,
2013 Jul 29
0
[LLVMdev] Question on optimizeThumb2JumpTables
Hi Jakob,
You're the unfortunate soul who last touched the constant island pass,
right? Do you happen to have any insight for Daniel?
Chad
On Tue, Jul 23, 2013 at 9:55 AM, Daniel Stewart <stewartd at codeaurora.org>wrote:
> In looking at the code in
> ARMConstantislandPass.cpp::optimizeThumb2JumpTables(), I see that there is
> the following condition for not creating
2012 Aug 31
2
[LLVMdev] Assert in LiveInterval update
Hi Lang,
Just one more quick question. in LiveIntervalAnalysis.cpp In
SlotIndex findLastUseBefore(unsigned Reg, SlotIndex OldIdx)
Did you really mean to use
for (MachineRegisterInfo::use_nodbg_iterator
UI = MRI.use_nodbg_begin(Reg),
UE = MRI.use_nodbg_end();
UI != UE; UI.skipInstruction()) {}
Aren't we currently dealing with units,
2009 Feb 13
0
[LLVMdev] Modeling GPU vector registers, again (with my implementation)
On Feb 13, 2009, at 9:47 AM, Alex wrote:
> It seems to me that LLVM sub-register is not for the following
> hardware architecture.
>
> All instructions of a hardware are vector instructions. All
> registers contains
> 4 32-bit FP sub-registers. They are called r0.x, r0.y, r0.z, r0.w.
>
> Most instructions write more than one elements in this way:
>
> mul
2013 Jul 29
1
[LLVMdev] Question on optimizeThumb2JumpTables
On Jul 29, 2013, at 6:50 AM, Chad Rosier <chad.rosier at gmail.com> wrote:
> Hi Jakob,
> You're the unfortunate soul who last touched the constant island pass, right? Do you happen to have any insight for Daniel?
Sorry, no. I don't remember working with that particular bit of code. You could try digging through the commit logs.
Thanks,
/jakob
> On Tue, Jul 23, 2013 at