llvm-6502/test
Tom Stellard 041211cd79 R600/SI: Fix bug from insertion of llvm.SI.end.cf into loop headers
The llvm.SI.end.cf intrinsic is used to mark the end of if-then blocks,
if-then-else blocks, and loops.  It is responsible for updating the
exec mask to re-enable threads that had been masked during the preceding
control flow block.  For example:

s_mov_b64 exec, 0x3                 ; Initial exec mask
s_mov_b64 s[0:1], exec              ; Saved exec mask
v_cmpx_gt_u32 exec, s[2:3], v0, 0   ; llvm.SI.if
do_stuff()
s_or_b64 exec, exec, s[0:1]         ; llvm.SI.end.cf

The bug fixed by this patch was one where the llvm.SI.end.cf intrinsic
was being inserted into the header of loops.  This would happen when
an if block terminated in a loop header and we would end up with
code like this:

s_mov_b64 exec, 0x3                 ; Initial exec mask
s_mov_b64 s[0:1], exec              ; Saved exec mask
v_cmpx_gt_u32 exec, s[2:3], v0, 0   ; llvm.SI.if
do_stuff()

LOOP:                       ; Start of loop header
s_or_b64 exec, exec, s[0:1] ; llvm.SI.end.cf <-BUG: The exec mask has the
                              same value at the beginning of each loop
			      iteration.
do_stuff();
s_cbranch_execnz LOOP

The fix is to create a new basic block before the loop and insert the
llvm.SI.end.cf there.  This way the exec mask is restored before the
start of the loop instead of at the beginning of each iteration.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228302 91177308-0d34-0410-b5e6-96231b3b80d8
2015-02-05 15:32:15 +00:00
..
Analysis
Assembler AsmParser: Recognize DW_TAG_* constants 2015-02-03 21:56:01 +00:00
Bindings Propagate a better error message to the C api. 2015-02-03 01:53:03 +00:00
Bitcode
BugPoint
CodeGen R600/SI: Fix bug from insertion of llvm.SI.end.cf into loop headers 2015-02-05 15:32:15 +00:00
DebugInfo Debug Info: Relax assertion in isUnsignedDIType() to allow floats to be 2015-02-02 18:31:58 +00:00
ExecutionEngine [Orc] Make OrcMCJITReplacement::addObject calls transfer buffer ownership to the 2015-02-02 19:51:18 +00:00
Feature
FileCheck
Instrumentation [sanitizer] add another workaround for PR 17409: when over a threshold emit coverage instrumentation as calls. 2015-02-04 01:21:45 +00:00
Integer
JitListener
Linker Utils: Resolve cycles under distinct MDNodes 2015-02-04 19:44:34 +00:00
LTO
MC [PowerPC] Implement the vclz instructions for PWR8 2015-02-05 15:24:47 +00:00
Object
Other [PM] Teach the module-to-function adaptor to not run function passes 2015-02-01 10:47:25 +00:00
SymbolRewriter
TableGen
tools Add code to llvm-objdump so the -section option with -macho will dump ‘C’ string 2015-02-04 21:38:42 +00:00
Transforms Teach isDereferenceablePointer() to look through bitcast constant expressions. 2015-02-05 09:15:37 +00:00
Unit
Verifier
YAMLParser
.clang-format
CMakeLists.txt
lit.cfg Remove a gross usage of environment variables in MachineVerifier, replacing it with support for setting the -verify-machineinstrs flag via an environment variable in LIT. 2015-02-04 00:02:59 +00:00
lit.site.cfg.in
Makefile
Makefile.tests
TestRunner.sh