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 | 8939b0d8a930729cd8d9c06dd4afd08de93260d2 (patch) | |
tree | dae31b5f9f2e13fc81011349b9e34ffcd6b722e2 /docs | |
parent | 713bc585ef5f60129c950f69392cefa85b9aaac1 (diff) | |
download | external_llvm-8939b0d8a930729cd8d9c06dd4afd08de93260d2.zip external_llvm-8939b0d8a930729cd8d9c06dd4afd08de93260d2.tar.gz external_llvm-8939b0d8a930729cd8d9c06dd4afd08de93260d2.tar.bz2 |
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96386 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'docs')
-rw-r--r-- | docs/LangRef.html | 28 |
1 files changed, 23 insertions, 5 deletions
diff --git a/docs/LangRef.html b/docs/LangRef.html index b337b6a..7620838 100644 --- a/docs/LangRef.html +++ b/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 |