search for: r1026

Displaying 20 results from an estimated 24 matches for "r1026".

Did you mean: 1026
2007 Apr 12
0
[LLVMdev] Regalloc Refactoring
...vide pretty cleanly between than and LiveIntervals. Beyond that, one of the issues is the "r2rmap" and "rep" function. As you've noticed, the coallescer basically uses these to avoid rewriting the code after it does coallescing. For example, if r1024 is coallesced with r1026, it leaves all uses of both registers in the code, instead of rewriting uses of r1026 with r1024 and deleting all memory of r1026. This mades sense long ago, but now it is increasingly clear that this is a bad idea. I would much rather have the coallescer be responsible for updating the code....
2007 Apr 12
8
[LLVMdev] Regalloc Refactoring
...k about the various algorithms? > Beyond that, one of the issues is the "r2rmap" and "rep" function. As > you've noticed, the coallescer basically uses these to avoid rewriting the > code after it does coallescing. For example, if r1024 is coallesced with > r1026, it leaves all uses of both registers in the code, instead of > rewriting uses of r1026 with r1024 and deleting all memory of r1026. This > mades sense long ago, but now it is increasingly clear that this is a bad > idea. I would much rather have the coallescer be responsible for updat...
2009 Jul 07
1
[LLVMdev] LLVM code target dependent generator question
...dition. I am having hard time mapping LLVM add to my machine add instruction based on the oprand types. Here is the sample code: void myFunction( int* src, int* dst, int i ) { dst[i] = src[i]; i = i + 4; return; } I want to get this translate to my machine code as following: shl R1028, R1026, 2 add_pointer R1029, R1024, R1028 // incrementing the src pointer load R1030, R1029 add_pointer R1031, R1025,R1028 // calculating the dst address store R1030, R1031 mov R1031, 4 add R1032, R1026, R1031 //scalar addition ret Currently my ADD instruction is defined in the InstrInfo.td file as f...
2007 Apr 12
3
[LLVMdev] Regalloc Refactoring
Hi all, As I work toward improving LLVM register allocation, I've come across the need to do some refactoring. Specifically, I would like to separate register coalescing from live interval analysis. Right now LiveIntervals handles both. The reason I want to separate them is that other types of register allocators might like to do coalescing differently (e.g. graph coloring does it by
2007 Apr 14
0
[LLVMdev] Regalloc Refactoring
...David Greene wrote: >> Beyond that, one of the issues is the "r2rmap" and "rep" function. As >> you've noticed, the coallescer basically uses these to avoid rewriting the >> code after it does coallescing. For example, if r1024 is coallesced with >> r1026, it leaves all uses of both registers in the code, instead of >> rewriting uses of r1026 with r1024 and deleting all memory of r1026. This >> mades sense long ago, but now it is increasingly clear that this is a bad >> idea. I would much rather have the coallescer be responsible...
2007 Apr 16
0
[LLVMdev] Regalloc Refactoring
...nd that, one of the issues is the "r2rmap" and "rep" >> function. As >> you've noticed, the coallescer basically uses these to avoid >> rewriting the >> code after it does coallescing. For example, if r1024 is >> coallesced with >> r1026, it leaves all uses of both registers in the code, instead of >> rewriting uses of r1026 with r1024 and deleting all memory of >> r1026. This >> mades sense long ago, but now it is increasingly clear that this >> is a bad >> idea. I would much rather have the coal...
2009 Jul 07
0
[LLVMdev] LLVM code target dependent generator question
...dition. I am having hard time mapping LLVM add to my machine add instruction based on the oprand types. Here is the sample code: void myFunction( int* src, int* dst, int i ) { dst[i] = src[i]; i = i + 4; return; } I want to get this translate to my machine code as following: shl R1028, R1026, 2 add_pointer R1029, R1024, R1028 // incrementing the src pointer load R1030, R1029 add_pointer R1031, R1025,R1028 // calculating the dst address store R1030, R1031 mov R1031, 4 add R1032, R1026, R1031 //scalar addition ret Currently my ADD instruction is defined in the InstrInfo.td file as f...
2007 Apr 23
0
[LLVMdev] Register based vector insert/extract
...xtend (e.g. i16 -> i8) wants to make use of subregisters. Consider code like this: t1 = load i16 t2 = truncate i16 t1 to i8 t3 = add i8 t2, 42 What we would really want to generate is something like this at the machine instr level: r1024 = X86_LOADi16 ... ;; r1024 is i16 r1026 = ADDi8 r1024[subreg #0], 42 More specifically, we want to be able to define, for each register class, a set of subregister classes. In the X86 world, the 64-bit register classes could have subregclass0 = i8 parts, subregclass1 = i16 parts, subregclass2 = i32 parts. Each <physreg, subreg#&...
2010 Apr 14
2
[LLVMdev] Default behavior of DeadMachineInstructionElim deletes all instructions
...to this more and there is a part where I'm working with physical registers. If there is a function call, there is a copy from virtual register space to the functions that are expected to be passed into the register. So it looks something like this: ... do some work ... Mov %r0, %r1025 Mov %r1, %r1026 Mov %r2, %r1027 Call someFunc %r0, %r1, %r2 <-- this func stores to memory Ret The moves to the physical registers are being deleted as NonAllocatableRegs is set to all one's and then inverted, and since these are deleted, every instruction that they depended on is also deleted. I have a w...
2007 Apr 23
2
[LLVMdev] Register based vector insert/extract
On Apr 23, 2007, at 1:43 PM, Christopher Lamb wrote: > On Apr 23, 2007, at 1:17 PM, Christopher Lamb wrote: > >> On Apr 23, 2007, at 12:31 PM, Chris Lattner wrote: >> >>> On Mon, 23 Apr 2007, Christopher Lamb wrote: >>>> How can one let the back end know how to insert and extract >>>> elements of >>>> a vector through sub-register
2008 Oct 20
3
[LLVMdev] Virtual Register allocation across functions
...previous functions. For example: start function 0 r1024 = mov %var0.0 r1025 = mov %var0.1 lots of intermediate code call function1 w/ 3 parameters more intermediate code %r1300 = add %call.result, %r1024 end function 0 start function 1 %r1024 = mov %var1.0 %r1025 = mov %var1.1 %r1026 = mov %var1.2 some code return some value end function 0 The mov to r1024 in function 1 clobbers the data from function 0. The only ways I can think to get around this, is to push every virtual register used in a function to a stack or some internal data structure and then pull them back out...
2007 Jun 26
0
[LLVMdev] Live Intervals Question
...ading the machine instructions. EAX and all other > A registers are last used at instruction 40 and EAX is not defined > again > until instruction 48, which is the last use of register 1027. The > move to > register 1026 is entirely unnecessary -- why is it even there? Move to r1026 is marked dead. This is the artifact of translating CopyFromReg (of the call result) of EAX. It's harmless. EAX,inf = [30,31:0)[34,42:1)[50,54:2) 0 at 30 1@? 2 at 50 RAX,inf = [34,50:0)[50,54:1) 0@? 1 at 50 %reg1026,0 = [42,43:0) 0 at 42 %reg1027,0 = [46,50:0) 0@? 40 %reg1026<dead&gt...
2008 Oct 20
0
[LLVMdev] Virtual Register allocation across functions
No, there isn't something like that right now. What are you trying to accomplish? If you wish to implement this, it shouldn't be hard to do. Right now, MachineRegisterInfo re-starts virtual register number at TargetRegisterInfo::FirstVirtualRegister. You can add a mechanism to change that to a variable instead. Evan On Oct 20, 2008, at 1:43 PM, Villmow, Micah wrote: > Is
2010 Apr 29
0
[LLVMdev] Default behavior of DeadMachineInstructionElim deletes all instructions
...to this more and there is a part where I'm working with physical registers. If there is a function call, there is a copy from virtual register space to the functions that are expected to be passed into the register. So it looks something like this: ... do some work ... Mov %r0, %r1025 Mov %r1, %r1026 Mov %r2, %r1027 Call someFunc %r0, %r1, %r2 <-- this func stores to memory Ret The moves to the physical registers are being deleted as NonAllocatableRegs is set to all one's and then inverted, and since these are deleted, every instruction that they depended on is also deleted. I have a w...
2007 Jun 26
3
[LLVMdev] Live Intervals Question
For the x86-64 target, I tried compiling a simple hello world. I don't understand the live interval information. Here's the machine instructions as dumped by LiveIntervalAnalysis: ********** MACHINEINSTRS ********** file hello.c line 3 b: 0 FNSTCW16m <fi#0>, 1, %NOREG, 0 FNSTCW16m <fi#0> 1 %mreg(0) 0 4 MOV8mi <fi#0>, 1, %NOREG, 1, 2 MOV8mi <fi#0> 1 %mreg(0) 1 2 8
2008 Oct 20
2
[LLVMdev] Virtual Register allocation across functions
Is there currently a way to have virtual register allocation information be saved across functions so that if I create a new virtual register in a function that it doesn't use a virtual register allocated in any previous function? Thanks, Micah Villmow Systems Engineer Advanced Technology & Performance Advanced Micro Devices Inc. 4555 Great America Pkwy, Santa Clara, CA. 95054
2008 Nov 18
0
[LLVMdev] 32 bit boolean results
On Nov 18, 2008, at 11:24 AM, Villmow, Micah wrote: > Is there a way to tell LLVM to treat Boolean results as 32bit values > instead of 1 bit values? LLVM IR doesn't have a concept of C level booleans. What problem are you trying to solve? -Chris > > Thanks, > > Micah Villmow > Systems Engineer > Advanced Technology & Performance > Advanced Micro Devices
2008 Nov 18
2
[LLVMdev] 32 bit boolean results
...when it hits my backend, there are some changes that generate something weird. int gID = width; const int idx = gID % 64; const int idy = gID / 64; pv[gID] = 0; if( idy > 63 && idx > 0 ) { pv[gID]=1; } generates conditionals : ult r1043.x, 63, r1026.x ilt r1041.x, r1039.x, 1 and r1041.x, r1041.x, r1043.x if_logicalz r1041.x //write to pv endif which is C for if ((63 < idy && idx < 1) == 0) { } I have no clue how the 1 gets put in there but being able to sto...
2008 Nov 18
3
[LLVMdev] 32 bit boolean results
Is there a way to tell LLVM to treat Boolean results as 32bit values instead of 1 bit values? Thanks, Micah Villmow Systems Engineer Advanced Technology & Performance Advanced Micro Devices Inc. 4555 Great America Pkwy, Santa Clara, CA. 95054 P: 408-572-6219 F: 408-572-6596 -------------- next part -------------- An HTML attachment was scrubbed... URL:
2010 Apr 14
0
[LLVMdev] Default behavior of DeadMachineInstructionElim deletes all instructions
On Apr 14, 2010, at 1:55 PMPDT, Villmow, Micah wrote: > I’ve recently sync’d to a newer version of LLVM(Apple branch 2326 from Apple branch 2323.8) that changed the interface to addCommonCodeGenPasses which caused the default implementation to be executed instead of my overriding implementation. This default implementation has DeadMachineInstructionElim pass enabled, which is causing havoc