diff options
| author | David Greene <greened@obbligato.org> | 2010-02-16 20:50:18 +0000 |
|---|---|---|
| committer | David Greene <greened@obbligato.org> | 2010-02-16 20:50:18 +0000 |
| commit | 9641d06809b747bf30b5de1870038dfebf3aad4d (patch) | |
| tree | 44315112e461b4cc29550044ce3a49fc20efcd65 /llvm/docs | |
| parent | 6bfacb7393e0662ac848af8df62b04ee8bda14ac (diff) | |
| download | bcm5719-llvm-9641d06809b747bf30b5de1870038dfebf3aad4d.tar.gz bcm5719-llvm-9641d06809b747bf30b5de1870038dfebf3aad4d.zip | |
Add support for emitting non-temporal stores for DAGs marked
non-temporal. Fix from r96241 for botched encoding of MOVNTDQ.
Add documentation for !nontemporal metadata.
Add a simpler movnt testcase.
llvm-svn: 96386
Diffstat (limited to 'llvm/docs')
| -rw-r--r-- | llvm/docs/LangRef.html | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/llvm/docs/LangRef.html b/llvm/docs/LangRef.html index b337b6a8571..76208388211 100644 --- a/llvm/docs/LangRef.html +++ b/llvm/docs/LangRef.html @@ -4074,8 +4074,9 @@ Instruction</a> </div> <h5>Syntax:</h5> <pre> - <result> = load <ty>* <pointer>[, align <alignment>] - <result> = volatile load <ty>* <pointer>[, align <alignment>] + <result> = load <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] + <result> = volatile load <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] + !<index> = !{ i32 1 } </pre> <h5>Overview:</h5> @@ -4088,7 +4089,7 @@ Instruction</a> </div> marked as <tt>volatile</tt>, then the optimizer is not allowed to modify the number or order of execution of this <tt>load</tt> with other volatile <tt>load</tt> and <tt><a href="#i_store">store</a></tt> - instructions. </p> + instructions.</p> <p>The optional constant "align" argument specifies the alignment of the operation (that is, the alignment of the memory address). A value of 0 or an @@ -4098,6 +4099,14 @@ Instruction</a> </div> alignment results in an undefined behavior. Underestimating the alignment may produce less efficient code. An alignment of 1 is always safe.</p> +<p>The optional !nontemporal metadata must reference a single metatadata + name <index> corresponding to a metadata node with one i32 entry of + value 1. The existance of the !nontemporal metatadata on the + instruction tells the optimizer and code generator that this load is + not expected to be reused in the cache. The code generator may + select special instructions to save cache bandwidth, such as the + MOVNT intruction on x86.</p> + <h5>Semantics:</h5> <p>The location of memory pointed to is loaded. If the value being loaded is of scalar type then the number of bytes read does not exceed the minimum number @@ -4124,8 +4133,8 @@ Instruction</a> </div> <h5>Syntax:</h5> <pre> - store <ty> <value>, <ty>* <pointer>[, align <alignment>] <i>; yields {void}</i> - volatile store <ty> <value>, <ty>* <pointer>[, align <alignment>] <i>; yields {void}</i> + store <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] <i>; yields {void}</i> + volatile store <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>] <i>; yields {void}</i> </pre> <h5>Overview:</h5> @@ -4150,6 +4159,15 @@ Instruction</a> </div> alignment results in an undefined behavior. Underestimating the alignment may produce less efficient code. An alignment of 1 is always safe.</p> +<p>The optional !nontemporal metadata must reference a single metatadata + name <index> corresponding to a metadata node with one i32 entry of + value 1. The existance of the !nontemporal metatadata on the + instruction tells the optimizer and code generator that this load is + not expected to be reused in the cache. The code generator may + select special instructions to save cache bandwidth, such as the + MOVNT intruction on x86.</p> + + <h5>Semantics:</h5> <p>The contents of memory are updated to contain '<tt><value></tt>' at the location specified by the '<tt><pointer></tt>' operand. If |

