[llvm-commits] [llvm] r42870 - in /llvm/trunk: include/llvm/Target/ lib/CodeGen/SelectionDAG/ lib/Target/ lib/Target/X86/ test/CodeGen/X86/

Duncan Sands baldrick at free.fr
Fri Oct 12 07:56:17 PDT 2007


Hi Arnold,

> +  /// tail call optimization. Target which want to do tail call optimization
> +  /// should implement this function.

Target -> Targets.  Also shouldn't it be "override" rather than "implement"?

> +  /// PerformTailCallOpt - This flag is enabled when the -tailcallopt is

when the -> when

> +/// CheckDAGForTailCallsAndFixThem - This Function looks for CALL nodes in the
> +/// DAG and fixes their tailcall attribute operand

Missing full stop at the end.

> +pushes all arguments on the top of the stack (their normal place if
> +that was a not tail call optimized functiong call ) before moving them

if that was a not tail call optimized functiong call ->
for non-tail call optimized calls

> +to actual stack slot. this is done to prevent overwriting of paramters

this -> This
paramters -> parameters

> +callee overwrites callers arguments.

callers -> the caller's

> +   parameters of the caller function and have no local value in the
> +   caller

Missing full stop.

> +   in above example local does not need to be pushed onto the top of

in above -> In the above

> +   the stack as it is definitetly not a caller's function parameter

definitetly -> definitely
Missing full stop.

> +   overwrite a caller paramter which is used by the callee and only

paramter -> parameter

> +   push them onto the top of the stack

Missing full stop.

> +   here we don't need to write any variables to the top of the stack

here -> Here

> +   since they don't overwrite each other

Missing full stop.

> +   here we need to push the arguments because they overwrite each other

here -> Here
Missing full stop.

> +   code for lowering directly onto callers arguments:

code -> Code

> +// tail call convetion (fast) one register is reserved for target address
> +// namely R9

tail -> Tail
convetion -> convention
(fast) one -> (fast): One
address namely R9 -> address, namely R9.

> +/// Same as C calling convention up to nonfree ECX which is used for storing 
> +/// potential pointer to tail called function

up to nonfree -> except for non-free
storing potential -> storing a potential
Missing full stop.

Note that ECX may be used if there is a 'nest' parameter, see this line:
+  // The 'nest' parameter, if any, is passed in ECX.
+  CCIfNest<CCAssignToReg<[ECX]>>,

How do you avoid collisions?

Ciao,

Duncan.



More information about the llvm-commits mailing list