search for: add32rr

Displaying 20 results from an estimated 23 matches for "add32rr".

Did you mean: add32ri
2020 Nov 11
1
[RFC] A value-tracking LiveDebugValues implementation
...After phi-elimination, it is > > bb.3.vaarg.end: > ; predecessors: %bb.2, %bb.1 > > %5:gr32 = COPY killed %18:gr32, debug-location !50; phi.ll:21:1 // %18 was def in all predecessors //phi --> COPY killed %18 > %17:gr32 = ADD32rr killed %8:gr32(tied-def 0), killed %5:gr32, implicit-def dead $eflags, debug-location !41; phi.ll:12:1 // kill %5 > DBG_VALUE %5:gr32, $noreg, !"15", !DIExpression(), debug-location !50; phi.ll:21:1 line no:21 > $eax = COPY killed %17:gr32, debug-location !51; phi.ll:23...
2009 Apr 22
2
[LLVMdev] Def/Kill flags for subregisters
...d there, like I have done above. Here is an X86 example: %EAX<def> = MOV32rm %ESP, 1, %noreg, 8, %noreg, Mem:LD(4,4) [FixedStack-2 + 0] %ECX<def> = MOV32rm %ESP, 1, %noreg, 4, %noreg, Mem:LD(4,16) [FixedStack-1 + 0] %EDX<def> = LEA32r %ECX, 1, %EAX, 0 %EDX<def> = ADD32rr %EDX, %EAX<kill>, %EFLAGS<imp-def,dead> %EAX<def> = MOVZX32rr8 %CL<kill> %EAX<def> = ADD32rr %EAX, %EDX<kill>, %EFLAGS<imp-def,dead> RET %EAX<imp-use,kill> This function defines ECX and kills CL, leaving ECX, CX, and CH still alive. It is not a...
2013 May 09
2
[LLVMdev] Predicated Vector Operations
...m is similar to that of two-address constraints. Two address instructions work as follows. When we match an instruction we “tie” input and output registers. Say you had an LLVM-IR add: x = add i32 y, z for x86 we generate the following machine ir instruction during ISel: vr0<def, tied1> = ADD32rr vr1<use, tied0>, vr2<use> Once we go out of SSA during CodeGen we have to replace the two address constraint by copies: vr0 = vr1 vr0 = ADD32rr vr0, vr2 Coalescing and allocation will then take care of removing unnecessary copies. I think that predicate instructions would be handled...
2006 Jun 26
2
[LLVMdev] Mapping bytecode to X86
...FLDCW16m <fi#0>, 1, %NOREG, 0 %reg1024 = MOV32rm <fi#-2>, 1, %NOREG, 0 %reg1025 = MOV32rm %reg1024, 1, %NOREG, 0 %reg1026 = MOVSX32rm8 %reg1025, 1, %NOREG, 0 %reg1027 = MOVSX32rm8 %reg1025, 1, %NOREG, 1 ADJCALLSTACKDOWN 8 %reg1028 = ADD32rr %reg1026, %reg1027 %reg1029 = IMUL32rr %reg1028, %reg1027 MOV32mr %ESP, 1, %NOREG, 4, %reg1029 MOV32mi %ESP, 1, %NOREG, 0, <ga:.str_1> CALLpcrel32 <ga:printf> ADJCALLSTACKUP 8, 0 %reg1030 = MOV32rr %EAX %reg1031 = IMPLICIT_DEF_GR32...
2009 Apr 17
0
[LLVMdev] Help me improve two-address code
...es, the "target-independent" ISD::ADD node is commutative. But it doesn't mean the target specific instruction it is selected to has to be commutative. > > ... and assumed it was sufficient, since I saw no other targets making > special arrangements. In X86InstrInfo.td, ADD32rr (and lots others) are marked isCommutable. Evan > > I see no obvious (to me, anyway 8^) "copy instruction" property. The > insn in question is generated by copyRegToReg(), and satisfies the > isMoveInstr() predicate. > > G > > ___________________________________...
2009 Apr 16
3
[LLVMdev] Help me improve two-address code
Evan Cheng wrote: > On Apr 16, 2009, at 3:17 PM, Greg McGary wrote: > >> Is there some optimizer knob I'm not turning properly? In more complex >> cases, GCC does poorly with two-address operand choices and so bloats >> the code with unnecessary register moves. I have high hopes LLVM >> can do better, so this result for a simple case is bothersome. >>
2009 Apr 22
0
[LLVMdev] Def/Kill flags for subregisters
...> Here is an X86 example: > > %EAX<def> = MOV32rm %ESP, 1, %noreg, 8, %noreg, Mem:LD(4,4) > [FixedStack-2 + 0] > %ECX<def> = MOV32rm %ESP, 1, %noreg, 4, %noreg, Mem:LD(4,16) > [FixedStack-1 + 0] > %EDX<def> = LEA32r %ECX, 1, %EAX, 0 > %EDX<def> = ADD32rr %EDX, %EAX<kill>, %EFLAGS<imp-def,dead> > %EAX<def> = MOVZX32rr8 %CL<kill> > %EAX<def> = ADD32rr %EAX, %EDX<kill>, %EFLAGS<imp-def,dead> > RET %EAX<imp-use,kill> > > This function defines ECX and kills CL, leaving ECX, CX, and CH st...
2013 May 10
0
[LLVMdev] Predicated Vector Operations
...constraints. Two address instructions work as follows. When we match an instruction we “tie” input and output registers. > > Say you had an LLVM-IR add: > > x = add i32 y, z > > for x86 we generate the following machine ir instruction during ISel: > > vr0<def, tied1> = ADD32rr vr1<use, tied0>, vr2<use> > > Once we go out of SSA during CodeGen we have to replace the two address constraint by copies: > > vr0 = vr1 > vr0 = ADD32rr vr0, vr2 > > Coalescing and allocation will then take care of removing unnecessary copies. I think that predicat...
2013 May 09
0
[LLVMdev] Predicated Vector Operations
On Thu, May 9, 2013 at 8:10 AM, <dag at cray.com> wrote: > Jeff Bush <jeffbush001 at gmail.com> writes: > >> %tx = select %mask, %x, <0.0, 0.0, 0.0 ...> >> %ty = select %mask, %y, <0.0, 0.0, 0.0 ...> >> %sum = fadd %tx, %ty >> %newvalue = select %mask, %sum, %oldvalue >> >> I believe the generated instructions depend on whether
2019 Nov 08
2
Register Dataflow Analysis on X86
Do you know whether it has been fixed on the 8.0.1 release? Scott On Fri, Nov 8, 2019 at 9:45 AM Krzysztof Parzyszek <kparzysz at quicinc.com<mailto:kparzysz at quicinc.com>> wrote: The one blocking issue that existed in the past has been fixed. I haven’t had time to do any work on it lately, but I’m not aware of any fundamental problems that would make it not work on x86. --
2012 Mar 24
2
[LLVMdev] tablegen question
According to the TableGen manual: "Each def record has a special entry called "NAME." This is the name of the def ("ADD32rr" above). In the general case def names can be formed from various kinds of string processing expressions and NAME resolves to the final value obtained after resolving all of those expressions. The user may refer to NAME anywhere she desires to use the ultimate name of the def. NAME should...
2010 Nov 09
0
[LLVMdev] Questions on using Metadata in JIT mode
...; = MOV32rm %RSP, 1, %reg0, 20, %reg0; mem:LD4[%X] dbg:l8.cpp:1:1 MOV32mr %RSP, 1, %reg0, 12, %reg0, %EDI; mem:ST4[%Z] dbg:l8.cpp:1:1 %EAX<def> = MOV32rm %RSP, 1, %reg0, 16, %reg0; mem:LD4[%Y] dbg:l8.cpp:5:1 MOV32mr %RSP, 1, %reg0, 20, %reg0, %EAX; mem:ST4[%X] dbg:l8.cpp:5:1 %EDI<def> = ADD32rr %EDI, %EAX<kill>, %EFLAGS<imp-def,dead>; dbg:l8.cpp:6:1 MOV32mr %RSP, 1, %reg0, 20, %reg0, %EDI; mem:ST4[%X] dbg:l8.cpp:6:1 %RAX<def> = MOV64ri <ga:@intDisp>; dbg:l8.cpp:7:1 CALL64r %RAX<kill>, %EDI<kill>, %RAX<imp-def,dead>, %RDI<imp-def,dead>, %RSP...
2012 Mar 23
0
[LLVMdev] tablegen question
>From my understanding, NAME is a special builtin entry and dedicated for things related multiclass, So, is the following rewrite what you want? class Base<int V> { int Value = V; } class Derived<string Truth> : Base<!if(!eq(Truth, "true"), 1, 0)>; multiclass Derived_m<string T> { def #NAME# : Derived<T>; } defm TRUE :
2012 Mar 16
2
[LLVMdev] tablegen question
Trying to resolve some general tablegen questions. Consider the test case for Tablegen called eq.td class Base<int V> { int Value = V; } class Derived<string Truth> : Base<!if(!eq(Truth, "true"), 1, 0)>; def TRUE : Derived<"true">; def FALSE : Derived<"false">; If I process this through tablegen I get: ------------- Classes
2019 Dec 23
2
Register Dataflow Analysis on X86
...3741833>(d420,b1009):u1006, u1441"<#1073741833>(d404,b1009):u1439", u1122"<#1073741833>(d1032,b1027):, u1442"<#1073741833>(d420,b1027):u1440", u1443"<#1073741833>(d404,b1027):u1441"] ... // d1117 is used in def d645 of register R9D s644: ADD32rr [d645<R9D>(+d1117,d694,u659):d634, d646<EFLAGS>!(d633,d651,):, u647<R9D>(+d1117):u637, u648<R9D>(+d1117):u647] But after examining the corresponding MIR, I do not think that R11D flows into R9D. So it looks to me as though this phi node is erroneous. Any help wold be much...
2014 Oct 24
2
[LLVMdev] Adding masked vector load and store intrinsics
> So %passthrough can *only* be undef or zeroinitializer? No, that wasn't the intent. %passthrough can be any other definition that is needed. Zero and undef were simply two possible values that illustrated some interesting behavior. Mapping of the %passthrough to the actual semantics of many vector instruction sets where the masked instructions leave the masked-off elements of the
2017 Jul 23
2
[X86] Memory folding tables in x86 backend
Hi all, Memory fold tables: Two way mapping of each register-form instruction to its corresponding memory-form instruction. E.g. Mapping 'X86::ADD32rr' to 'X86::ADD32rm'. Few months ago I started an effort to auto-generate the X86 memory folding tables currently held under lib/Target/X86/X86InstInfo.cpp as huge manually-maintained static arrays. Automating the tables would reduce the maintenance burden for developers to repeatedly up...
2014 Oct 24
3
[LLVMdev] Adding masked vector load and store intrinsics
...instructions ***: # Machine code for function foo: SSA Function Live Ins: %EDI in %vreg0, %ESI in %vreg1 BB#0: derived from LLVM BB %entry Live Ins: %EDI %ESI %vreg1<def> = COPY %ESI; GR32:%vreg1 %vreg0<def> = COPY %EDI; GR32:%vreg0 %vreg2<def,tied1> = ADD32rr %vreg1<tied0>, %vreg0, %EFLAGS<imp-def,dead> ; GR32:%vreg2,%vreg1,%vreg0 in ISEL. So, the necessary instruction semantic needn't be represented in LLVM IR. It is created once you have to do mapping to "real" machine instructions using virtual registers, where copies, an...
2013 May 07
6
[LLVMdev] Predicated Vector Operations
I'm trying to understand how predicated/masked instructions can be generated in llvm, specifically an instruction where a set bit in the mask will write the new result into the corresponding vector lane in the destination and a clear bit will cause the lane in the destination to remain what it was before the instruction executed. I've seen a few places that suggest 'select' is the
2020 Jan 10
2
Register Dataflow Analysis on X86
...3741833>(d420,b1009):u1006, u1441"<#1073741833>(d404,b1009):u1439", u1122"<#1073741833>(d1032,b1027):, u1442"<#1073741833>(d420,b1027):u1440", u1443"<#1073741833>(d404,b1027):u1441"] ... // d1117 is used in def d645 of register R9D s644: ADD32rr [d645<R9D>(+d1117,d694,u659):d634, d646<EFLAGS>!(d633,d651,):, u647<R9D>(+d1117):u637, u648<R9D>(+d1117):u647] But after examining the corresponding MIR, I do not think that R11D flows into R9D. So it looks to me as though this phi node is erroneous. Any help wold be much...