mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-10-25 10:27:04 +00:00
Line up the comments in a code example.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@145908 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -2582,11 +2582,11 @@ b: unreachable
|
|||||||
<pre class="doc_code">
|
<pre class="doc_code">
|
||||||
entry:
|
entry:
|
||||||
%poison = sub nuw i32 0, 1 ; Results in a poison value.
|
%poison = sub nuw i32 0, 1 ; Results in a poison value.
|
||||||
%still_poison = and i32 %poison, 0 ; Whereas (and i32 undef, 0) would return 0.
|
%still_poison = and i32 %poison, 0 ; Whereas (and i32 undef, 0) would return 0.
|
||||||
%poison_yet_again = getelementptr i32* @h, i32 %still_poison
|
%poison_yet_again = getelementptr i32* @h, i32 %still_poison
|
||||||
store i32 0, i32* %poison_yet_again ; undefined behavior
|
store i32 0, i32* %poison_yet_again ; undefined behavior
|
||||||
|
|
||||||
store i32 %poison, i32* @g ; Poison value conceptually stored to memory.
|
store i32 %poison, i32* @g ; Poison value conceptually stored to memory.
|
||||||
%poison2 = load i32* @g ; Returns a poison value, not just undef.
|
%poison2 = load i32* @g ; Returns a poison value, not just undef.
|
||||||
|
|
||||||
store volatile i32 %poison, i32* @g ; External observation; undefined behavior.
|
store volatile i32 %poison, i32* @g ; External observation; undefined behavior.
|
||||||
@@ -2596,38 +2596,38 @@ entry:
|
|||||||
%poison3 = load i16* %narrowaddr ; Returns a poison value.
|
%poison3 = load i16* %narrowaddr ; Returns a poison value.
|
||||||
%poison4 = load i64* %wideaddr ; Returns a poison value.
|
%poison4 = load i64* %wideaddr ; Returns a poison value.
|
||||||
|
|
||||||
%cmp = icmp slt i32 %poison, 0 ; Returns a poison value.
|
%cmp = icmp slt i32 %poison, 0 ; Returns a poison value.
|
||||||
br i1 %cmp, label %true, label %end ; Branch to either destination.
|
br i1 %cmp, label %true, label %end ; Branch to either destination.
|
||||||
|
|
||||||
true:
|
true:
|
||||||
store volatile i32 0, i32* @g ; This is control-dependent on %cmp, so
|
store volatile i32 0, i32* @g ; This is control-dependent on %cmp, so
|
||||||
; it has undefined behavior.
|
; it has undefined behavior.
|
||||||
br label %end
|
br label %end
|
||||||
|
|
||||||
end:
|
end:
|
||||||
%p = phi i32 [ 0, %entry ], [ 1, %true ]
|
%p = phi i32 [ 0, %entry ], [ 1, %true ]
|
||||||
; Both edges into this PHI are
|
; Both edges into this PHI are
|
||||||
; control-dependent on %cmp, so this
|
; control-dependent on %cmp, so this
|
||||||
; always results in a poison value.
|
; always results in a poison value.
|
||||||
|
|
||||||
store volatile i32 0, i32* @g ; This would depend on the store in %true
|
store volatile i32 0, i32* @g ; This would depend on the store in %true
|
||||||
; if %cmp is true, or the store in %entry
|
; if %cmp is true, or the store in %entry
|
||||||
; otherwise, so this is undefined behavior.
|
; otherwise, so this is undefined behavior.
|
||||||
|
|
||||||
br i1 %cmp, label %second_true, label %second_end
|
br i1 %cmp, label %second_true, label %second_end
|
||||||
; The same branch again, but this time the
|
; The same branch again, but this time the
|
||||||
; true block doesn't have side effects.
|
; true block doesn't have side effects.
|
||||||
|
|
||||||
second_true:
|
second_true:
|
||||||
; No side effects!
|
; No side effects!
|
||||||
ret void
|
ret void
|
||||||
|
|
||||||
second_end:
|
second_end:
|
||||||
store volatile i32 0, i32* @g ; This time, the instruction always depends
|
store volatile i32 0, i32* @g ; This time, the instruction always depends
|
||||||
; on the store in %end. Also, it is
|
; on the store in %end. Also, it is
|
||||||
; control-equivalent to %end, so this is
|
; control-equivalent to %end, so this is
|
||||||
; well-defined (again, ignoring earlier
|
; well-defined (again, ignoring earlier
|
||||||
; undefined behavior in this example).
|
; undefined behavior in this example).
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
Reference in New Issue
Block a user